零基础入门学习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 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)) 错误有点多,帮你改了改:
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 jackz007 发表于 2019-11-11 12:05
原代码错误分析
所以,正确的代码应该是:
谢谢你帮我一步步分析了我的代码。
不过我运行了你的代码,输入1,2,3出错了呢。 zltzlt 发表于 2019-11-11 17:56
错误有点多,帮你改了改:
感谢你的回答! Archie27 发表于 2019-11-12 10:44
谢谢你帮我一步步分析了我的代码。
不过我运行了你的代码,输入1,2,3出错了呢。
输入 1 , 2 , 3 不行,一定要输入 1 2 3,数字间要用空格,而不是逗号分隔。 jackz007 发表于 2019-11-12 10:49
输入 1 , 2 , 3 不行,一定要输入 1 2 3,数字间要用空格,而不是逗号分隔。
明白了,谢谢!
页:
[1]