Archie27 发表于 2019-11-11 11:53:48

零基础入门学习python:课后作业016_动动手1

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)

请问我这样写的问题出在哪儿了?谢谢!

jackz007 发表于 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))

zltzlt 发表于 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)

运行效果:

请输入需要加总的数据:, '123']
总和为: 10

Archie27 发表于 2019-11-12 10:44:59

jackz007 发表于 2019-11-11 12:05
原代码错误分析

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

谢谢你帮我一步步分析了我的代码。
不过我运行了你的代码,输入1,2,3出错了呢。

Archie27 发表于 2019-11-12 10:45:31

zltzlt 发表于 2019-11-11 17:56
错误有点多,帮你改了改:




感谢你的回答!

jackz007 发表于 2019-11-12 10:49:22

Archie27 发表于 2019-11-12 10:44
谢谢你帮我一步步分析了我的代码。
不过我运行了你的代码,输入1,2,3出错了呢。

      输入 1 , 2 , 3 不行,一定要输入 1 2 3,数字间要用空格,而不是逗号分隔。

Archie27 发表于 2019-11-12 11:06:15

jackz007 发表于 2019-11-12 10:49
输入 1 , 2 , 3 不行,一定要输入 1 2 3,数字间要用空格,而不是逗号分隔。

明白了,谢谢!
页: [1]
查看完整版本: 零基础入门学习python:课后作业016_动动手1