Python-验证用户输入

时间:2017-03-20 00:41:58

标签: string python-3.x validation int

我的代码需要验证用户输入,以确保他们输入一个数字并保持循环,直到他们输入一个数字。

我的代码:

http.Dir(".")

我的输出:

输入一个数字:d

错误:输入一个数字:f

错误:输入一个数字:5

错误:输入一个数字:5

错误:输入一个数字:3

为什么它甚至不接受数字?

1 个答案:

答案 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()方法,因为它是最灵活的。

我希望这能回答你的问题。快乐的编码!