|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Peteryo01223 于 2021-1-11 09:34 编辑
原题目:
0. 编写一个符合以下要求的函数:
a) 计算打印所有参数的和乘以基数(base=3)的结果
b) 如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算。
小甲鱼的答案:
- 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)
复制代码
运行结果:
结果是: 75
我的问题:
1. 我认为,题目中b)的明确表达了,如:参数最后一个数字是5,则5不进入加法,而要把这个5 作为base来做乘法计算。结果应该是(1+2+3+4)*5 = 50。小甲鱼的运行结果是75,明显在求和的时候,没有移除5,对么?
2. 我的修改如下,但运行值不对(目前是45),请问是哪里写错了。
- def mFun(*param):
- result = 0
- if param[:-1] == 5: # 如果最后一个param是 5
- param = param.pop() # 那么从param中删除这个 5,以确保这个 5不参与求和计算。
- base = 5 # 同时,给base赋值为 5
- for each in param:
- result += each
- result = result * base
-
- else:
- base=3
- for each in param:
- result += each
- result = result * base
- print('结果是:', result)
- mFun(1, 2, 3, 4, 5)
复制代码
谢谢~
本帖最后由 sunrise085 于 2021-1-11 09:57 编辑
base是带有默认值的关键字参数,关键字参数必须使用关键字传入。若别关键字,就被当做是一般参数了,而这个方法中一般参数都会被打包进param中。
b)说的是如果参数中最后一个参数为 (base=5),这是说最后一个参数是关键字参数base=5,不是说最后一个参数为5
其实小甲鱼的这个题目b)有点歧义,容易让人误解,应该写成: b) 如果参数中最后一个参数为(base=x),则设定基数为x,基数不参与求和计算
第二个问题
- def mFun(*param):
- result = 0
- if param[-1] == 5: # 这里错啦!如果最后一个param是 5
- param = param[:-1] # 这里也错啦!那么从param中删除这个 5,以确保这个 5不参与求和计算。
- base = 5 # 同时,给base赋值为 5
- for each in param:
- result += each
- result = result * base
-
- else:
- base=3
- for each in param:
- result += each
- result = result * base
- print('结果是:', result)
- mFun(1, 2, 3, 4, 5)
复制代码
|
|