鱼C论坛

 找回密码
 立即注册
查看: 2195|回复: 4

[已解决]请教一个课后题

[复制链接]
发表于 2017-6-11 13:46:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
原题和给出的代码是这样

1. 视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动“无视”参数里的字符串并返回正确的计算结果
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]))


我将代码改了一下:

def sum(x):
    result = 0
    for each in x:
        if  type(each) != str:
            result += each
        else:
            continue
    return result
print(sum([1, 2.1, 2.3, 'a', '1', True,]))

为何原题的结果是5.4,我改这个是6.4,我改的代码为何会多加了一个1
最佳答案
2017-6-11 14:13:48
bool类是 int类 的 子类
True 就是 1
  1. >>> issubclass(bool,int)
  2. True
  3. >>> True == 1
  4. True
  5. >>> True.__class__
  6. <class 'bool'>
  7. >>> isinstance(True,int)
  8. True
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-11 13:55:51 | 显示全部楼层
因为  True是布尔值  代表 1     所以最后多加了一个1
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-11 13:58:34 | 显示全部楼层
我建议你尝试下删掉字符串的一和true试试,你最后会发现,多出来的一是True,因为True不是字符串,所以比原结果多了一
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-11 14:13:48 | 显示全部楼层    本楼为最佳答案   
bool类是 int类 的 子类
True 就是 1
  1. >>> issubclass(bool,int)
  2. True
  3. >>> True == 1
  4. True
  5. >>> True.__class__
  6. <class 'bool'>
  7. >>> isinstance(True,int)
  8. True
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-6-11 23:28:48 | 显示全部楼层
谢谢大家,终于明白了True值为1造成的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-28 00:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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