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