用户输入验证未正确验证,对我可能做错了什么有什么建议?

User input validation not validating correctly, any suggestions for what I may be doing wrong?

提问人:thai_green_curry 提问时间:6/7/2023 最后编辑:thai_green_curry 更新时间:6/7/2023 访问量:41

问:

我正在尝试使用 while 循环验证用户的输入,以便只接受整数和大于 8 的数字。我目前的代码在输入字符串并打印正确的输出时正常运行。

但是,我遇到的问题是,当用户输入小于 8 的整数时,它会显示我想要的“输入不正确”消息,但当它提示用户输入另一个输入时。当我重新输入大于 8 的整数时,当我希望它中断到下一个提示时,它仍然会打印“输入不正确”。有人认为我可能做错了吗?我不被允许为这个特定的赋值定义一个函数。

Number_List = []

while (True):
    try:
        Number_List.extend(map(int, input("Enter the length, width, and height of the room: ").split()))
    except ValueError:
        print("\nIncorrect Input. \nPlease try again. \n")
        continue

    if (Number_List[0] < 8) or (Number_List[1] < 8) or (Number_List[2] < 8):
        print("\nIncorrect Input. \nPlease try again. \n")
        continue
    else:
        break
python-3.x 列表 python-2.7 while-loop

评论


答:

0赞 Da sil 6/7/2023 #1

这是因为您正在扩展您的列表。因此,当您输入新输入时,数字将添加到 的末尾。Number_List

因此,始终保持不变。Number_List[0]Number_List[1]Number_List[2]

为了更好地理解,我建议您在例外之前打印。Number_List

要使其正常工作,您可以简单地将相应的行替换为:

Number_List = list((map(int, input("Enter the length, width, and height of the room: ").split())))

有了它,您每次都会创建一个新列表。

希望它有所帮助。

0赞 JimBigMac 6/7/2023 #2

这可能无法提供答案。只是为了通过将您的代码粘贴到 python tutor 来分享我的观察结果。

因此,首先,您最初的目标是:使用 while 循环验证用户的输入,以便只接受整数和大于 8 的数字

我通过尝试不同的输入组合对您的代码进行了一些实验。

  • 案例 1:输入 ➡️ 10 8 9

    代码工作得很好。

  • 案例 2:我尝试添加一个小于 8 的数字来触发“ValueError” 输入 ➡️ 8 6 14

然后它确实触发了“输入不正确。 请再试一次“,没问题,然后出现输入框,建议输入新的输入集。

现在,问题来了:您创建的列表“Number_List = []”仍然有那些不正确的输入,所以即使你输入了新的输入,列表也会越来越大,没有任何清理机制,不正确的输入仍然会在列表中。

希望这能激发您修复代码。干杯

评论

1赞 thai_green_curry 6/7/2023
谢谢,这是我的程序的问题。干杯!
0赞 JimBigMac 6/7/2023
@thai_green_curry 解决这个问题的另一种方法是仔细考虑你要把 Number_List = [] 放在哪里,这是一个空列表,不是吗?现在,它的位置在 while 循环之外,这使得它在没有任何清理机制的情况下继续存储输入,但是,如果你把它放在 'while(True):' 下,每次运行 while 循环时,它都会清理它的输入以刷新它再次成为一个空列表。
1赞 thai_green_curry 6/7/2023
我不知道!感谢您的澄清,这会让事情变得容易得多。下次我做一个 while 循环时,我一定会牢记这一点。我很欣赏你的建议。