鱼C论坛

 找回密码
 立即注册
查看: 2954|回复: 7

[已解决]关于sum函数改进的那道习题

[复制链接]
发表于 2021-6-8 21:48:26 | 显示全部楼层 |阅读模式
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,中间还有个/。
而小甲鱼的课中,他是这样写的:
微信截图_20210608214510.png
他没用到/啊,结果也算出来了。
可是我做了个类似的,却报错了:
>>> 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函数括号里的构成到底应该怎么写?
最佳答案
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 参数之后的

最佳答案

查看完整内容

当然, else 的代码去掉都行,因为 else 后就算没 continue 也会自动开始下次循环 根据你的代码,应该判断出来的是序列都行,因为内部就一个 for 循环,序列均可迭代,只是当你填入字典和字符串一个是将键相加,一个始终为0 (因为是字符串 if 判断不符合条件) 这里的 True 是布尔类型的数据,和字符串、整型、列表一样, True 属于 bool 而已,1 属于 int,2.1 属于 float 自带的 sum 函数中有 / 意思 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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)
和我上次查的居然不一样。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-6-9 10:01:26 | 显示全部楼层
wmy1212 发表于 2021-6-9 09:56
欸,我又查了一下help,现在结果是这样:

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



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

IDLE.png

PyCharm 显示的不一样:

PyCharm.png

傻傻呼呼,分不清楚了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-9 16:07:47 | 显示全部楼层
Twilight6 发表于 2021-6-9 10:01
我在 IDLE 中也查了下,发现和你之前显示是一样的:

哈哈哈~谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-9 16:11:47 | 显示全部楼层

我傻了,我今天又算了一下sum函数完全没问题,上次错了好像是因为我在作业重新定义了sum函数为sum(x),也就是只能有一个参数,还run了一下,所以才会有这样的结果
>>> 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
重启一下IDLE就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

遇到这种情况还可以调用 del sum~可以不重启
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-10 11:10:18 | 显示全部楼层
Twilight6 发表于 2021-6-9 16:36
遇到这种情况还可以调用 del sum~可以不重启

好!学到了!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 12:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表