好学生l 发表于 2020-9-5 13:59:29

请问下这段求总和的代码具体错在哪里

本帖最后由 好学生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:08:40

本帖最后由 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:22:43

本帖最后由 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())

好学生l 发表于 2020-9-5 14:45:14

sunrise085 发表于 2020-9-5 14:22
第五行的 input 外没有写 eval,所以导致nums列表中第一个元素是数字,后面的元素是字符串,所以在total中 ...

非常感谢
页: [1]
查看完整版本: 请问下这段求总和的代码具体错在哪里