请问下这段求总和的代码具体错在哪里
本帖最后由 好学生l 于 2020-9-5 14:00 编辑def getnum():
nums=[]
temp=eval(input('请输入数字(回车完成):'))
while temp !='':
nums.append(temp)
temp=input('请输入数字(回车完成):')
else:
return nums
def total(nums):
s=0
for i in nums:
s=s+i
return s
total(getnum())
本帖最后由 kylin121380 于 2020-9-5 14:10 编辑
数字不能和字符串加,eval是用来计算字符串表达式的,可以到total函数中统一用int进行计算
def getnum():
nums=[]
temp=input('请输入数字(回车完成):')
while temp !='':
nums.append(temp)
temp=input('请输入数字(回车完成):')
else:
return nums
def total(nums):
s=0
for i in nums:
s=s+int(i)
return s
print(total(getnum())) 本帖最后由 sunrise085 于 2020-9-5 14:29 编辑
第五行的 input 外没有写 eval,所以导致nums列表中第一个元素是数字,后面的元素是字符串,所以在total中进行相加的时候就报错了,报出的错误是int和str不能相加
但是你也不能再第五行的 input 外添加eval,因为你是将空字符串作为while循环的结束条件,而eval不能将空字符串作为参数,所以若直接在 input 外添加eval则会报错。
我帮你修改了一下
def getnum():
nums=[]
temp=input('请输入数字(回车完成):') #在这里先不用eavl 因为下一行你要判断temp是否为空字符串,若用了eval,temp就不在是字符串了
while temp !='':
try:
nums.append(eval(temp)) #把eval放在这里,若temp为空字符串则会抛出下面这个异常,不让其报错即可
except SyntaxError:
pass
temp=input('请输入数字(回车完成):')
else:
return nums
def total(nums):
s=0
for i in nums:
s=s+i
return s
total(getnum())
或者再简单一下
def getnum():
nums=[]
while True:
temp=input('请输入数字(回车完成):')
try:
nums.append(eval(temp))#把eval放在这里,若temp为空字符串则会抛出下面这个异常
except SyntaxError:
return nums #若上面抛出这个异常,则说明输入了空字符串,那么直接return nums即可
def total(nums):
s=0
for i in nums:
s=s+i
return s
total(getnum()) sunrise085 发表于 2020-9-5 14:22
第五行的 input 外没有写 eval,所以导致nums列表中第一个元素是数字,后面的元素是字符串,所以在total中 ...
非常感谢
页:
[1]