第17课:动动手。我的尝试
本帖最后由 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)
谢谢~
本帖最后由 jackz007 于 2021-1-11 09:43 编辑
base 是命名可选参数,不在 param 中,就是说,调用函数的时候,可以不写,但是,如果要写,就一定要写成 base = 5 的样子。
def mFun(* param , base=3): # 定义
. . . . . . .
mFun(1,2,3,4,base=5) # 调用
就是说,base 不可以从 param 中提取。 本帖最后由 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)
jackz007 发表于 2021-1-11 09:38
base 是命名可选参数,不在 param 中,就是说,调用函数的时候,可以不写,但是,如果要写,就一定要写成 b ...
哦哦,那么请问:
1. 小甲鱼code运行结果是75,我觉得是50,哪个是对的呢?
2. 我的修改后,运行值是45,错在哪里了呢? sunrise085 发表于 2021-1-11 09:54
base是带有默认值的关键字参数,关键字参数必须使用关键字传入。若别关键字,就被当做是一般参数了,而这个 ...
哦,我好像明白了。谢谢 本帖最后由 Peteryo01223 于 2021-1-11 10:17 编辑
sunrise085 发表于 2021-1-11 09:54
base是带有默认值的关键字参数,关键字参数必须使用关键字传入。若别关键字,就被当做是一般参数了,而这个 ...
多问一句,我想知道Python到底是如何理解我原code的:
我写的:
if param[:-1] == 5: # 这里不是从0的位置,反方向数一个值么?按说,也是对的吧?
param = param.pop()# 这里不是pop数列中的最后一个数么,也就是说我删除了它?按说,也是对的吧?
会跟您写的:
if param[-1] == 5:
param = param[:-1]
在结果上,为何有差距呢?即:一个是45, 一个是50。
我本来觉得,这两种方式,表达的是一个意思。没想通。
Peteryo01223 发表于 2021-1-11 10:15
多问一句,我想知道Python到底是如何理解我原code的:
param[:-1]是切片,得到的是(1,2,3,4),不是5,param[-1]才是最后一个元素
param是元组不是列表,所以没有pop方法
你的程序没有进入if,而是进入了else,计算的是1+2+3+4+5的结果,再乘以3,得到的45 sunrise085 发表于 2021-1-11 11:13
param[:-1]是切片,得到的是(1,2,3,4),不是5,param[-1]才是最后一个元素
param是元组不是列表,所以 ...
醍醐灌顶!谢谢谢
页:
[1]