小甲鱼Python第018讲函数:灵活即强大 | 课后测试题及参考答案

测试题:
      
0. 请问以下哪个是形参哪个是实参?

1 def MyFun(x):
2     return x ** 3
3 y = 3
4 print(MyFun(y))

  x是形参;y是实参

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

  给函数写文档是为了让别人可以更好的理解你的函数,所以这是一个好习惯:

  1. >>> def MyFirstFunction(name):
  2.         '函数文档在函数定义的最开头部分,用不记名字符串表示'
  3.         print('I love FishC.com!')
复制代码

  我们看到在函数开头写下的字符串Ta是不会打印出来的,但Ta会作为函数的一部分存储起来,这个我们称之为函数文档字符串,Ta的功能跟注释是一样的。

  函数的文档字符串可以按如下方式访问:

  1. >>> MyFirstFunction.__doc__
  2. '函数文档在函数定义的最开头部分,用不记名字符串表示'
复制代码


  另外,我们用help()来访问这个函数也可以看到这个文档字符串:

  1. >>> help(MyFirstFunction)
  2. Help on function MyFirstFunction in module __main__:
  3. MyFirstFunction(name)
  4. 函数文档在函数定义的最开头部分,用不记名字符串表示
复制代码
 

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

  大量代码时,避免由于参数值位置的不确定性造成的参数的传递错误的问题。通过关键字参数可以有效避免此类情况的发生。总而言之,使用关键字参数,可以有效避免因不小心搞乱参数的顺序导致的BUG出现。
     
3. 使用help(print)查看print()这个BIF有哪些默认参数?分别起到什么作用?

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. 默认参数和关键字参数表面最大的区别是什么?

   关键字参数是在函数调用的时候,通过参数名制定需要赋值的参数,这样做就不怕因为搞不清参数的顺序而导致函数调用出错。而默认参数是在参数定义的过程中,为形参赋初值,当函数调用的时候,不传递实参,则默认使用形参的初始值代替。                  
               
动动手:
     
0. 编写一个符合以下要求的函数:
   
    a) 计算打印所有参数的和乘以基数(base=3)的结果
    b) 如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算。

 1 def test(*params,base =3):
 2     sum = 0
 3     if params[-1] != 5:
 4         for each in params:
 5             sum +=each
 6         sum *=base
 7         print("结果是:",sum)
 8     else:
 9         base = 5
10         params = params[0:-1]
11         for each in params:
12             sum +=each
13         sum *=base
14         print("结果是:",sum)
15 test(1,2,3,5)
16 test(1,2,3,2,4,5,6,6,7)

 

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

 1 def  flower():
 2     for each in range(100,1000):
 3         temp = each
 4         sum = 0
 5         while temp:
 6             sum = sum +(temp %10)**3
 7             temp = temp //10
 8         if sum == each:
 9             print(each,end="\t")
10 print("不是水仙花数分别是:",end = "")
11 flower()

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

 1 def findstr(desStr,subStr):
 2     count = 0
 3     lenght  = len(desStr)
 4     if subStr not in desStr:
 5         print("没有")
 6     else:
 7         for each in range(lenght-1):
 8             if desStr[each] == subStr[0]:
 9                 if desStr[each+1] == subStr[1]:
10                     count +=1
11         print("出现次数:%d" % count)
12 
13 desStr = input("目标字符串:")
14 subStr = input("子字符串(两个字符):")
15 findstr(desStr,subStr)

程序执行效果:

1 目标字符串:You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted
2 子字符串(两个字符):im
3 出现次数:3

3. 请写下这一节课你学习到的内容:格式不限,回忆并复述是加强记忆的好方式!

  动动手第二题。编写一个函数 findstr(),该函数统计一个长度为 2 的子字符串在另一个字符串中出现的次数。

    findstr(,)----俩参数:目标字符串,子字符串

posted @ 2020-05-19 23:04  逆袭小白  阅读(390)  评论(0编辑  收藏  举报