|
10鱼币
本帖最后由 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 参数之后的
|
最佳答案
查看完整内容
当然, else 的代码去掉都行,因为 else 后就算没 continue 也会自动开始下次循环
根据你的代码,应该判断出来的是序列都行,因为内部就一个 for 循环,序列均可迭代,只是当你填入字典和字符串一个是将键相加,一个始终为0 (因为是字符串 if 判断不符合条件)
这里的 True 是布尔类型的数据,和字符串、整型、列表一样, True 属于 bool 而已,1 属于 int,2.1 属于 float
自带的 sum 函数中有 / 意思 ...
|