鱼C论坛

 找回密码
 立即注册
查看: 2210|回复: 6

[已解决]零基础入门学习python:课后作业016_动动手1

[复制链接]
发表于 2019-11-11 11:53:48 | 显示全部楼层 |阅读模式

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

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

x
1. 视频中我们说 sum() 这个BIF有个缺陷,就是如果参数里有字符串类型的话就会报错,请写出一个新的实现过程,自动“无视”参数里的字符串并返回正确的计算结果
temp = input('请输入需要加总的数据:')
list0 = list(temp)

for each in list0:
    if isinstance(each,str):
        index0 = list0.index(each)
        list0.pop(index0)
        
sum0 = sum(list0)
sums = str(sum0)

print('总和为:',sum0)

请问我这样写的问题出在哪儿了?谢谢!
最佳答案
2019-11-11 12:05:16
本帖最后由 jackz007 于 2019-11-11 14:25 编辑

        原代码错误分析
temp = input('请输入需要加总的数据:')    # temp 是一个字符串
list0 = list(temp)                      # list0 是只有 1 个字符串元素的列表

for each in list0:                      # each 将只等于字符串 temp
    if isinstance(each,str):            # each 等于 temp , 条件将会成立
        index0 = list0.index(each)      # index 的值将等于 0
        list0.pop(index0)               # 这个操作将把 list0 中唯一的一个元素弹出、清空
        
sum0 = sum(list0)                       # 这个操作获得成功的前提是,list0 是由一系列整数元素构成的列表,可是,现在 list0 已经是空列表了
sums = str(sum0)                        # 后续操作显然没有意义

print('总和为:',sum0)                  # 后续操作显然没有意义
        所以,正确的代码应该是:
temp = input('请输入需要加总的数据:') . strip()
list0 = list(int(x) for x in temp . split())
print('总和为:' , sum(list0))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-11 12:05:16 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2019-11-11 14:25 编辑

        原代码错误分析
temp = input('请输入需要加总的数据:')    # temp 是一个字符串
list0 = list(temp)                      # list0 是只有 1 个字符串元素的列表

for each in list0:                      # each 将只等于字符串 temp
    if isinstance(each,str):            # each 等于 temp , 条件将会成立
        index0 = list0.index(each)      # index 的值将等于 0
        list0.pop(index0)               # 这个操作将把 list0 中唯一的一个元素弹出、清空
        
sum0 = sum(list0)                       # 这个操作获得成功的前提是,list0 是由一系列整数元素构成的列表,可是,现在 list0 已经是空列表了
sums = str(sum0)                        # 后续操作显然没有意义

print('总和为:',sum0)                  # 后续操作显然没有意义
        所以,正确的代码应该是:
temp = input('请输入需要加总的数据:') . strip()
list0 = list(int(x) for x in temp . split())
print('总和为:' , sum(list0))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-11-11 17:56:11 | 显示全部楼层
错误有点多,帮你改了改:
temp = input('请输入需要加总的数据:')
list0 = eval(temp)
list1 = []
for each in list0:
    if isinstance(each, (int, float)):
        list1.append(each)
        
sum0 = sum(list1)
sums = str(sum0)

print('总和为:', sum0)

运行效果:
请输入需要加总的数据:[1, 2, 3, 4, [456], '123']
总和为: 10
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-12 10:44:59 | 显示全部楼层
jackz007 发表于 2019-11-11 12:05
原代码错误分析

        所以,正确的代码应该是:

谢谢你帮我一步步分析了我的代码。
不过我运行了你的代码,输入1,2,3出错了呢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-12 10:45:31 | 显示全部楼层
zltzlt 发表于 2019-11-11 17:56
错误有点多,帮你改了改:

感谢你的回答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-12 10:49:22 From FishC Mobile | 显示全部楼层
Archie27 发表于 2019-11-12 10:44
谢谢你帮我一步步分析了我的代码。
不过我运行了你的代码,输入1,2,3出错了呢。

        输入 1 , 2 , 3 不行,一定要输入 1 2 3,数字间要用空格,而不是逗号分隔。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-12 11:06:15 | 显示全部楼层
jackz007 发表于 2019-11-12 10:49
输入 1 , 2 , 3 不行,一定要输入 1 2 3,数字间要用空格,而不是逗号分隔。

明白了,谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 19:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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