如何让我的脚本只接受数字输入而不会搞砸

How do I make my script take only numeric inputs without screwing it up

我一直在用这个任务撞墙,我似乎一辈子都想不通。

我想编写一个脚本,提示用户输入一个数字,并在每次输入数字后将该数字存储在列表中。当用户只按回车键而不输入任何内容时,脚本将打印出列表中的最高数字。

这是我到目前为止写的:

x = 0
mylist = []
while x != '':
    x = input("enter a number:")
    mylist.append(x)
    if x == '':
        print(max(mylist))

我看到这段代码有两个问题:

  1. 用户可以输入一个字符串(我尝试通过 x = int(input(...) 来解决这个问题,但这只会导致新的错误:

    ValueError: invalid literal for int() with base 10: ''
    
  2. print(max(mylist)) 只打印出初始整数最大的数字。例如,如果用户输入 51 和 112,它会打印出 51.

感谢您花时间帮助我。

我建议您使用 try 语句来检查输入是否为整数。以下是一个尝试将用户输入转换为整数并将其附加到列表的实现。在 ValueError(非整数输入)的结果中,它将打印列表中的最大整数。使用 raw_input 而不是 input 也是一种很好的做法,以防止 python 尝试自行转换输入但失败。

x=0
mylist=[]

while x!='':
    x = raw_input("enter a number:")
    try:
        x = int(x)
        mylist.append(x)
    except ValueError:
        if x == '':
            print(max(mylist))

这可以防止用户向列表中添加非整数,并且是处理意外用户输入的更好方法。作为一个额外的好处,这种方法还可以在将来轻松添加更多条件。

使用不同的变量来测试 While。检查 isnumeric() 的输入,如果它是数字,则在将其附加到数组时将其转换:

keepMoving = True
mylist = []
while keepMoving:
    x = input("enter a number:")
    if x.isnumeric():
         mylist.append(int(x))
    else:
         keepMoving = False
print(max(mylist))