本帖最后由 wmy1212 于 2021-6-8 21:55 编辑
小甲鱼有道题是对sum函数的改进, 原先如果参数里有字符串类型的话就会报错,改进的方向是让它自动“无视”参数里的字符串而计算。
然后参考答案的代码是这样:def sum(x):
result = 0
for each in x:
if (type(each) == int) or (type(each) == float):
result += each
else:
continue
return result
print(sum([1, 2.1, 2.3, 'a', '1', True]))
我有两个问题:
1. continue 这行如果写成 result += 0,是不是代码也是正确的?
2.最后一行这个sum()括号里面的内容,它这里面的元素只有一个,是一个列表。根据上文的定义,这个列表就是x,对列表里的每个元素执行循环,到这里都明白,但是这个True是干嘛用的?
我去查了一下原本的sum函数的help,结果如下:>>> help(sum)
Help on built-in function sum in module builtins:
sum(iterable, /, start=0)
Return the sum of a 'start' value (default: 0) plus an iterable of numbers
When the iterable is empty, return the start value.
This function is intended specifically for use with numeric values and may
reject non-numeric types.
我又迷惑了,这个意思是前面的可迭代对象+后面的start,start默认是0,中间还有个/。
而小甲鱼的课中,他是这样写的:
他没用到/啊,结果也算出来了。
可是我做了个类似的,却报错了:>>> list1 = [1,2,3]
>>> sum(list1,8)
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
sum(list1,8)
TypeError: sum() takes 1 positional argument but 2 were given
>>> sum(list1,/,8)
SyntaxError: invalid syntax
请问这是为什么?我是哪里写错了?sum函数括号里的构成到底应该怎么写?
1. continue 这行如果写成 result += 0,是不是代码也是正确的?
当然, else 的代码去掉都行,因为 else 后就算没 continue 也会自动开始下次循环
2.最后一行这个sum()括号里面的内容,它这里面的元素只有一个,是一个列表。根据上文的定义,这个列表就是x,对列表里的每个元素执行循环,到这里都明白,但是这个True是干嘛用的?
根据你的代码,应该判断出来的是序列都行,因为内部就一个 for 循环,序列均可迭代,只是当你填入字典和字符串一个是将键相加,一个始终为0 (因为是字符串 if 判断不符合条件)
这里的 True 是布尔类型的数据,和字符串、整型、列表一样, True 属于 bool 而已,1 属于 int,2.1 属于 float
我又迷惑了,这个意思是前面的可迭代对象+后面的start,start默认是0,中间还有个/。
自带的 sum 函数中有 / 意思是在 / 之前允许填入位置参数,不允许填入关键字参数,不是表示 / 也是一个参数,/ 相当于是定义参数中的分界线
而你的 help(sum) 好像有些不对劲,我刚刚测试了下 / 是在 start 参数之后的
|