wmy1212 发表于 2021-6-8 21:48:26

关于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函数括号里的构成到底应该怎么写?

Twilight6 发表于 2021-6-8 21:48:27



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 参数之后的

wmy1212 发表于 2021-6-9 09:56:22

Twilight6 发表于 2021-6-8 21:48
当然, else 的代码去掉都行,因为 else 后就算没 continue 也会自动开始下次循环




欸,我又查了一下help,现在结果是这样:
>>> help(sum)
Help on function sum in module __main__:

sum(x)
和我上次查的居然不一样。。

Twilight6 发表于 2021-6-9 10:01:26

wmy1212 发表于 2021-6-9 09:56
欸,我又查了一下help,现在结果是这样:

和我上次查的居然不一样。。


我在 IDLE 中也查了下,发现和你之前显示是一样的:



PyCharm 显示的不一样:



傻傻呼呼,分不清楚了{:10_282:}

wmy1212 发表于 2021-6-9 16:07:47

Twilight6 发表于 2021-6-9 10:01
我在 IDLE 中也查了下,发现和你之前显示是一样的:




哈哈哈~谢谢你{:5_108:}

wmy1212 发表于 2021-6-9 16:11:47

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就可以了

Twilight6 发表于 2021-6-9 16:36:09

wmy1212 发表于 2021-6-9 16:11
我傻了,我今天又算了一下sum函数完全没问题,上次错了好像是因为我在作业重新定义了sum函数为sum(x),也 ...

遇到这种情况还可以调用 del sum~可以不重启

wmy1212 发表于 2021-6-10 11:10:18

Twilight6 发表于 2021-6-9 16:36
遇到这种情况还可以调用 del sum~可以不重启

好!学到了!!{:5_105:}
页: [1]
查看完整版本: 关于sum函数改进的那道习题