我需要我的程序来验证用户输入。 到目前为止,我已经定义了一系列有效的字母'和' 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()解决方案,但是,它们不允许空格,如果用户输入其全名,则需要空格!
我已经在这个问题上花了好几个小时才知道,有人可能会为我解决这个问题。提前谢谢。
答案 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!'