循环时Python输入验证

循环时Python输入验证,python,Python,我需要我的程序来验证用户输入。 到目前为止,我已经定义了一系列“validLetters”和“ValidNumber”: validLetters = ('abcdefghijklmnopqrstuvwxyz ') validNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] 但是,它应该像这样进行验证: name = input("What is your name?\n").lower() while name == "

我需要我的程序来验证用户输入。 到目前为止,我已经定义了一系列“validLetters”和“ValidNumber”:

validLetters = ('abcdefghijklmnopqrstuvwxyz ')
validNumbers = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
但是,它应该像这样进行验证:

name = input("What is your name?\n").lower()
while name == "" or name in validNumbers:
        name = input("What is your name?\n").lower()
strinput0 = name
char_only0 = ''
for char in strinput0:
    if char in validLetters:
        char_only0 += char
    name = char_only0
问题在于语句的“in”部分,它仅在输入为单个数字(例如“6”)时有效,但它接受两个或多个数字(例如“65”),因为“65”(不同于“6”)不是有效数字。

我想让它扫描整个输入,然后再次询问它是否只包含数字,因为你可以看到它会在最后去掉这些数字(加上任何特殊字符)

有.isalpha()解决方案,但是,它们不允许空白,如果用户输入其全名,则需要空白

我已经花了好几个小时来解决这个问题了。你知道,外面有人可能能帮我解决这个问题。提前谢谢。

name.isalpha()
是您要找的。我想,如果我错了,请纠正我。另外,要处理空白,只需使用
name.replace(“”,)
删除空格,这样您的while循环看起来就像

while name == "" or not name.replace(' ','').isalpha():

这将使您不必在while循环之后去掉数字和特殊字符。此外,由于“替换”不会就地更改名称,因此,如果用户输入其全名,则不会受到影响并保留任何空格,因此我建议在

中删除
,并使用正则表达式,因为这是他们擅长的

因此,在您的姓名验证案例中:

import re
name = '123 Full Name'
valid_pattern = re.compile('^[a-zA-Z0-9 ]+$')
if re.match(valid_pattern,name):
    print 'Valid Name'
else:
    print 'Invalid Name!'

我不明白,如果你打算在一开始就去掉数字,为什么你会允许数字。谢谢@sirpasselot的提示,也许你可以回顾一下我对我的问题所做的编辑。非常感谢。@ProGrammer我不太清楚你在问什么,但我建议你把它作为一个新问题发布,因为它与这个问题有点不同。问题如下: