name=input("What is your name?: ")
while name != int:
print("Input is Invalid. Please enter a name.")
name = input("Enter name: ")
此代码在输入整数时有效。但是,当我输入一个字符串时,它也会将其识别为无效。我该如何解决这个问题?
答案 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: ")