Python第018讲课后测试题:函数-灵活即强大

函数-灵活即强大

测试题:

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

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

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

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

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

>>> def MyFirstFunction(name):
	'函数文档在函数定义的最开头部分,用不记名字符串表示'
	print('I love China!')

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

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

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

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

>>> help(MyFirstFunction)
Help on function MyFirstFunction in module __main__:


MyFirstFunction(name)
函数文档在函数定义的最开头部分,用不记名字符串表示

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

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

例如:

>>> def SaySome(name, words):
	print(name + '->' + words)
	
>>> SaySome(words='让编程改变世界!', name='小甲鱼')
小甲鱼->让编程改变世界!

使用关键字参数,可以有效避免不小心搞乱参数的顺序导致的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:
	# 文件类型对象,默认是sys.stdout(标准输出流)
	file:  a file-like object (stream); defaults to the current sys.stdout.
	
	# 第一个参数如果有多个值(第一个参数是收集参数),各个值之间默认用空格(space)隔开
	sep:   string inserted between values, default a space.
		
	# 打印最后一个值之后默认参数一个新行标识符('\n')
	end:   string appended after the last value, default a newline.
		
	# 是否强制刷新流
	flush: whether to forcibly flush the stream.

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

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

动动手:

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

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

def mFun(*param, base = 3):		# 创建函数mFun(),*param: 收集参数,base: 基数默认为 3
	result = 0		# 定义结果变量,初始值为0
	for each in param:		# 将收集到的参数依次赋值给 each
		result += each		# 将收集到的参数进行求和(不包括基数(base))
		
	result *= base			# 将求和后的参数结果(result) 乘以 基数(base)
	print('结果是:', result)	# 打印输出最后结果
	
mFun(1, 2, 3, 4, 5, base = 5)	# 调用函数mFun(),给5个实参,将基数base默认值改为 5

1. 寻找水仙花数

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

'''
水仙花数的定义是: 
这个数等于他每一位上数的幂次之和-->见维基百科的定义
比如一个3位的十进制整数153就是一个水仙花数,因为 153 = 13 + 53 + 33
'''
def Narcissus():        # 创建水仙花数函数Narcissus()
    for each in range(100, 1000):   # 将100到1000-1的数依次赋值给each
        temp = each     # 将each临时存放起来
        sum = 0         # 定义sum求和
        while temp:     # while循环
            sum = sum + (temp % 10)**3      # 求水仙花数
            temp = temp // 10       # 注意这里用地板除

        if sum == each:     # 判断水仙花数是否存在 each 这些数里
            print(each, end = '\t')     # 存在,打印出水仙花数,范围:999内,间隔八个空格

print('所有的水仙花数分别是:', end='\t')      # 打印提示
Narcissus()     # 调用水仙花数函数Narcissus()

2. 编写一个函数 findStr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。

例如:
假定输入的字符串为 “You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”,子字符串为“im”,函数执行后打印“子字符串在目标字符串中共出现3次”

Str(desStr, subStr):        # 创建函数findStr(),给两个形参
    count = 0       # 计数器
    lenght = len(desStr)        # 取出目标字符串的长度
    if subStr not in desStr:    # 用成员运算符判断子字符串是否存在于目标字符串(默认不存在)
        print('抱歉!在目标字符串未找到子字符串!')
    else:
        for each in range(lenght - 1):      # 将目标字符串的长度减1依次赋值给 each
            if desStr[each] == subStr[0]:   # 判断目标字符串里找到的第一个子字符串是不是第 0 位置出现的
                if desStr[each + 1] == subStr[1]:   # 判断目标字符串里找到的第二个子字符串是不是第 1 位置出现的
                    count += 1      # 符合前面两个判断的子字符串将被记录出现次数

        print('子字符串在目标字符串中共出现%d次' % count)      # 打印提示

desStr = input('请输入目标字符串:')         # 用户输入目标字符串
subStr = input('请输入子字符串(两个字符):')    # 用户输入子字符串
findStr(desStr, subStr)     # 调用函数findStr(),输入的目标字符串和子字符串作为实参

程序执行效果:

请输入目标字符串:You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.
请输入子字符串(两个字符):im
子字符串在目标字符串中共出现3次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值