循环时Python输入验证

时间:2015-10-06 13:00:58

标签: python

我需要我的程序来验证用户输入。 到目前为止,我已经定义了一系列有效的字母'和' validNumbers':

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')因为&# 39; 65' (与' 6'不同)不在有效数字中。

我希望它扫描整个输入并再次询问它是否只包含数字,因为你可以看到最后输出这些数字(加上任何特殊字符)。

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

我已经在这个问题上花了好几个小时才知道,有人可能会为我解决这个问题。提前谢谢。

2 个答案:

答案 0 :(得分:1)

name.isalpha()正是您所寻找的我认为并纠正我,如果我错了。此外,要处理空白,只需使用name.replace(' ','')删除空格,这样你的while循环就像

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

这将使您无需在while循环后删除数字和特殊字符。此外,由于替换不会更改名称将不受影响,并且如果用户输入其全名,将保留任何空格

答案 1 :(得分:1)

我会建议删除in并使用正则表达式,因为这是他们擅长的!

所以在你的名字验证案例中:

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!'