我的代码需要验证用户输入,以确保他们输入一个数字并保持循环,直到他们输入一个数字。
我的代码:
http.Dir(".")
我的输出:
输入一个数字:d
错误:输入一个数字:f
错误:输入一个数字:5
错误:输入一个数字:5
错误:输入一个数字:3
为什么它甚至不接受数字?
答案 0 :(得分:0)
<强>答案强>
我认为下面的代码以一种易于理解的方式解决了您的问题。
user_input = input("Enter a number: ")
while not user_input.isnumeric():
user_input = input("Error: Enter a number: ")
<强>解释强>
由于while user_input != int
,您所使用的代码无效。
当您调用input
函数并且用户提供输入时,该输入始终是字符串。
>>> num = input('Enter a number: ') # 5, as a string
>>> num
'5'
您的目的是检查num
是否为数字。因此,要检查字符串是否代表某个数字,您可以使用str.isdigit()
,str.isdecimal()
和str.isnumeric()
方法。您可以阅读更多here。
很容易误认为以下方法是可行的,但它很快就会变得混乱。
while not isinstance(user_input, int):
请记住,调用input
函数后收到的输入将是一个字符串。因此,上面的代码将始终为True,这不是您想要的。但是,如果您将user_input
更改为int
类型,则上述代码可以正常工作。
>>> num = input('Enter a number: ') # 5, as a string
>>> num
'5'
>>> int(num)
5
>>> isinstance(num, int)
True
但如果num
是其他内容,解释器会抛出错误。
>>> num = input('Enter a number: ') # 'A'
>>> int(num)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'A'
这让我们回到答案,其中涉及使用字符串方法来检查字符串是否代表某个数字。我选择使用str.isnumeric()
方法,因为它是最灵活的。
我希望这能回答你的问题。快乐的编码!