关于sum函数改进的那道习题
本帖最后由 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. 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 =
>>> 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 参数之后的
Twilight6 发表于 2021-6-8 21:48
当然, else 的代码去掉都行,因为 else 后就算没 continue 也会自动开始下次循环
欸,我又查了一下help,现在结果是这样:
>>> help(sum)
Help on function sum in module __main__:
sum(x)
和我上次查的居然不一样。。 wmy1212 发表于 2021-6-9 09:56
欸,我又查了一下help,现在结果是这样:
和我上次查的居然不一样。。
我在 IDLE 中也查了下,发现和你之前显示是一样的:
PyCharm 显示的不一样:
傻傻呼呼,分不清楚了{:10_282:}
Twilight6 发表于 2021-6-9 10:01
我在 IDLE 中也查了下,发现和你之前显示是一样的:
哈哈哈~谢谢你{:5_108:} wmy1212 发表于 2021-6-9 16:07
哈哈哈~谢谢你
我傻了,我今天又算了一下sum函数完全没问题,上次错了好像是因为我在作业重新定义了sum函数为sum(x),也就是只能有一个参数,还run了一下,所以才会有这样的结果
>>> list1 =
>>> 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
重启一下IDLE就可以了 wmy1212 发表于 2021-6-9 16:11
我傻了,我今天又算了一下sum函数完全没问题,上次错了好像是因为我在作业重新定义了sum函数为sum(x),也 ...
遇到这种情况还可以调用 del sum~可以不重启 Twilight6 发表于 2021-6-9 16:36
遇到这种情况还可以调用 del sum~可以不重启
好!学到了!!{:5_105:}
页:
[1]