为什么输入"done"会报错?

Why does it give an error when typing "done"?

这是我的问题 你能帮助我吗? 谢谢

写一个程序,让用户反复询问一个数字,直到输入“done”这个词,然后通过输入“done”得到“数字总和”、“数字输入个数”三个值", "数字的平均值"。打印。 您的应用程序应该使用 try 和 except 当用户输入非数字输入时,向他显示“无效输入”错误消息并再次转到数字请求。 像下面的例子:

Enter a number: 4                                                                                 
‌Enter a number: 5                                                                                      
Enter a number: bad data                                                                              
Invalid input                                                                                                           
Enter a number: 7                                                                                         
Enter a number: done                                                                                         
16                                                                                                                   
3                                   
5.333333333333333

我在下面输入代码

while True :
    try: 
        number = input ('Enter number: ')
        n = int (number)
    except:
        print('Invalid input')
    if n == 'done' :
        break
x = None
y = None
for Total in [n] :
    x = x + n
    print (x)
for num in [n] :
    y = y + 1
    print (y)
for Average in [n] :
    x = x + n
    y = y + 1
    aver = x / y
    print ( aver)

当我输入“完成”时,它会显示“输入无效”警告

Enter number: 2
Enter number: 3
Enter number: 4
Enter number: done
Invalid input
Enter number:
  1. 当您键入 'done' 时,number 将等于字符串 'done'
  2. n = int (number)n = int ('done') 相同,这会引发异常,因为 'done' 无法解析为以 10 为底的整数
    1. 请注意,由于调用 int ('done') 引发了错误,因此 n 的值不会更改
  3. 所以你得到 except 子句和 print('Invalid input')
  4. 由于n的值保持不变,n == 'done'False
  5. 因此,循环继续

您可以通过在 except 子句中移动支票来修复它:

while True:
    try: 
        number = input ('Enter number: ')
        n = int (number)
    except:
        if number == 'done':
            break
        print('Invalid input')

还要注意这段代码:

for Total in [n] :
    ...

...将创建一个包含 one 元素 [n] 的列表并迭代此列表 once,因为只有一个元素。所以,它不会真正计算任何总和。


此外,此代码将尝试向 None 添加一个数字:

x = None
y = None
for Total in [n] :
    x = x + n
    print (x)

在第一次迭代中,x = x + n 将计算为 x = None + <integer>,这是无效的,因为 None 无法添加到任何内容。


此外,根据您的输入判断,您想输入 多个 数字,但是第一个 while 循环将用 n 覆盖变量 new 每次迭代的数字,所以所有以前的数字都将丢失。

你应该在某处积累这些数字:

numbers = []
while True:
    try: 
        number = input ('Enter number: ')
        n = int (number)
    except:
        if number == 'done':
            break
        print('Invalid input')
    else:
        # There was no exception
        numbers.append(n)