验证字符串输入

时间:2015-04-26 13:26:41

标签: python string

name=input("What is your name?:  ")

while name != int:
    print("Input is Invalid.  Please enter a name.")
    name = input("Enter name:  ")

此代码在输入整数时有效。但是,当我输入一个字符串时,它也会将其识别为无效。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

你的while条件总是满足 - int是类类型的对象,而name是一个字符串。这两者永远不会平等。

您可以使用正则表达式来验证输入。例如。如果名称不能包含数字字符:

import re
name = input("What is your name?:  ")

while re.search('\d', name):
  print("Input is Invalid.  Please enter a name.")
  name = input("Enter name:  ")

答案 1 :(得分:0)

考虑一下。

>>> n = input("your name ")
your name 5 #5 is my input
>>> n !=int
True
>>> type(n)
<class 'str'>
>>> n = input("your name ")
your name chimp
>>> n != int
True
>>> type(n)
<class 'str'>

无论你输入什么 - 都将永远是字符串。所以它总是会评估为true,你会看到"Input is Invalid. Please enter a name."消息,直到你打破程序。

所以,你需要检查输入值不包含数字(当然还有一些其他符号,但现在让事情变得更容易)。但我们也注意到,即使用户输入了一个数字,它也会被处理为字符串(5 -> "5")。那么让我们将数字列表作为字符串。

>>> a = [str(i) for i in range(10)]
>>> a
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
>>> name = input("what is your name? ")
what is your name? 3rwin
>>> any(i in a for i in name)
True
>>> name = input("what is your name? ")
what is your name? ernesto
>>> any(i in a for i in name)
False
>>> not any(i in a for i in name)
True

只需将您的while表达式更改为while not any(i in a for i in name) 一切都会好的。那么您可以根据需要扩展a(不需要的字符)并获得更准确的结果。

答案 2 :(得分:0)

这个怎么样?

name = input("What is your name?:  ")

while not name.isalpha():
    print("Input is Invalid.  Please enter a name.")
    name = input("Enter name:  ")