【问题标题】:Why does it give an error when typing "done"?为什么输入“完成”时会出错?
【发布时间】:2021-08-12 18:56:10
【问题描述】:

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

编写一个程序,要求用户反复询问一个数字,直到输入“done”这个词,然后通过输入“done”三个值“数字之和”,“数字输入的数量”, “数字的平均值”。打印。 您的应用程序应该使用 try 并且除非用户输入非数字输入,否则向他显示“无效输入”错误消息并再次转到数字请求。 比如下面的例子:

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:

【问题讨论】:

    标签: python for-loop while-loop


    【解决方案1】:
    1. 当您键入'done' 时,number 变为等于字符串'done'
    2. 然后n = int (number)n = int ('done') 相同,这会引发异常,因为'done' 不能被解析为base-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] 的列表并迭代此列表一次,因为只有一个元素。所以,它不会真正计算任何总和。


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

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

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


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

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

    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)
    

    【讨论】:

    • 您不妨检查number == 'done' 之前 try 语句。 Invalid input 唯一有意义的例外是 int 引发的 ValueError;专门捕获它,而不是捕获任何异常。
    • 谢谢你帮助我
    猜你喜欢
    • 2014-12-06
    • 2011-10-10
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2019-05-19
    相关资源
    最近更新 更多