第018讲:函数:灵活即强大

0. 请问以下哪个是形参哪个是实参?

def MyFun(x):
    return x ** 3

y = 3
print(MyFun(y))

  me:X是形参,3是实参

  参考答案:x是形式参数(形参),y是实际参数(实参)。
        跟绝大部分编程语言一样,形参指的是函数创建和定义过程中小括号里的参数,而实参指的是函数在调用过程中传递进去的参数。

1.函数文档和直接用“#”为函数写注释有什么不同?

  me:函数文档可使用,help(),__doc__查看函数文档,而使用#不可以

  参考答案:

 

 

 

2.使用关键字参数,可以有效避免什么问题的出现呢?

  me:多个参数顺序写混乱而照成结果错误。

  参考答案:关键字参数,是指函数在调用的时候,带上参数的名字去指定具体调用的是哪个参数,从而可以不用按照参数的顺序调用函数,

3.使用help(print)查看print()这个BIF有哪些默认参数?分别起到什么作用?

  me:sep=“ ” 当打印多个对象时,默认使用“空格隔开;end=“\n” 多次打印,末尾默认使用换行符

  参考答案:

>>> help(print)
Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    # 文件类型对象,默认是sys.stdout(标准输出流)
    sep:   string inserted between values, default a space.
    # 第一个参数如果有多个值(第一个参数是收集参数),各个值之间默认用空格(space)隔开
    end:   string appended after the last value, default a newline.
    # 打印最后一个值之后默认参数一个新行标识符(‘\n’)
    flush: whether to forcibly flush the stream.
    # 是否强制刷新流

 

4. 默认参数和关键字参数表面最大的区别是什么?

  me:关键字参数可是使用关键字来索引变量,而默认参数不行

  参考答案:关键字参数是在函数调用的时候,通过参数名制定需要赋值的参数,这样做就不怕因为搞不清参数的顺序而导致函数调用出错。而默认参数是在参数定义的过程中,为形参赋初值,当函数调用的时候,不传递实参,则默认使用形参的初始值代替。

动动手

0.编写一个符合以下要求的函数:

  a) 计算打印所有参数的和乘以基数(base=3)的结果
  b) 如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算。

  me:

def sum_base(*params):
    len_params = len(params)
    if params[len_params-1] == 5:
        mm=0
        for x in range(len_params-1):
            mm += int(params[x])
        mm1=mm*5
    else:
        mm=0
        for x in range(len(params)):
            mm += int(params[x])
        mm1 = mm * 3
    print(mm1)

  参考答案:

def mFun(*param, base=3):
    result = 0
    for each in param:
        result += each

    result *= base
    
    print('结果是:', result)

mFun(1, 2, 3, 4, 5, base=5)

 

1. 寻找水仙花数

题目要求:如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如153 = 1^3+5^3+3^3,因此153是一个水仙花数。编写一个程序,找出所有的水仙花数。

  me:

def Daffodil_number():
    for x in range(100,1000):
        mm=str(x)
        if int(mm[0])**3 + int(mm[1])**3 + int(mm[2])**3 == x:
            print(x,end=" ")


Daffodil_number()

  参考答案:

def Narcissus():
    for each in range(100, 1000):
        temp = each
        sum = 0
        while temp:
            sum = sum + (temp%10) ** 3
            temp = temp // 10  # 注意这里用地板除

        if sum == each:
            print(each, end='\t')

print("所有的水仙花数分别是:", end='')
Narcissus()

 

2.编写一个函数 findstr(),该函数统计一个长度为 2 的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为“You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串为“im”,函数执行后打印“子字母串在目标字符串中共出现 3 次”。

 

 

 

  me:

def findstr(mu_biao,zi_zhifu):
    if len(zi_zhifu) != 2:
        print("请输入子字符串(两个字符).....")
        exit()
    x = mu_biao.count(zi_zhifu)
    print(x)

    
x= str(input("请输入目标字符串:"))
y= str(input("请输入子字符串(两个字符):"))
findstr(x,y)

  参考答案:

def findStr(desStr, subStr):
    count = 0
    length = len(desStr)
    if subStr not in desStr:
        print('在目标字符串中未找到字符串!')
    else:
        for each1 in range(length-1):      
            if desStr[each1] == subStr[0]:
                if desStr[each1+1] == subStr[1]:
                    count += 1
                    
        print('子字符串在目标字符串中共出现 %d 次' % count)

desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)

 

posted @ 2019-11-11 21:40  土豆皮儿。  阅读(265)  评论(0编辑  收藏  举报