限制用户输入为字母
我是一名技术写作者,正在学习Python。我想写一个程序来验证用户输入的姓名字段,作为练习,限制用户只能输入字母。我在这里看到了一段类似的代码,用于验证数字(年龄)字段,于是我把它改成了验证字母,如下所示:
import string
import re
r = re.compile(r'[a-zA-Z]+')
print "WELCOME FOR NAME VERIFICATION. TYPE ALPHABETS ONLY!"
print raw_input("Your Name:")
x = r
if x == r:
print x
elif x != r:
print "Come on,'", x,"' can't be your name"
print raw_input("Your Name:")
if 5<=len(x)<=10:
print "Hi,", x, "!"
elif len(x)>10:
print "Mmm,Your name is too long!"
elif len(x)<5:
print "Alas, your name is too short!"
raw_input("Press 'Enter' to exit!")
我希望这段代码能完成两个任务。首先,显示输入提示,直到用户只输入字母作为“姓名”。然后,如果用户输入了字母,就处理这个输入的长度,并显示相应的消息。但是,我遇到了两个问题,即使经过多次尝试,我也无法解决。要么是正确的输入被异常代码拒绝,要么是错误的输入也被接受,并且它们的长度被处理。
请帮我调试我的代码。另外,是否可以不使用正则表达式来实现这个功能?
3 个回答
0
一种实现这个功能的方法是这样做:
namefield = raw_input("Your Name: ")
if not namefield.isalpha():
print "Please use only alpha charactors"
elif not 4<=len(namefield)<=10:
print "Name must be more than 4 characters and less than 10"
else:
print "hello" + namefield
isalpha
这个函数会检查整个字符串是否只包含字母字符。如果是的话,它会返回 True,也就是“对的”意思。
1
我不太明白你想用这个做什么:
x = r
if x == r:
etc
这个条件显然总是会成立。
根据你现在的代码,你其实并没有保存输入的内容,只是直接把它打印出来了。
而且你没有使用循环,这样的话只会问你两次名字,即使两次都输入错误,它也不会继续问下去。
我觉得你想做的应该是这个:
import string
import re
r = re.compile(r'[a-zA-Z]+')
print "WELCOME FOR NAME VERIFICATION. TYPE ALPHABETS ONLY!"
x = raw_input("Your Name:")
while not r.match(x):
print "Come on,'", x,"' can't be your name"
x = raw_input("Your Name:")
if 5<=len(x)<=10:
print "Hi,", x, "!"
elif len(x)>10:
print "Mmm,Your name is too long!"
elif len(x)<5:
print "Alas, your name is too short!"
raw_input("Press 'Enter' to exit!")
另外,我不建议你用正则表达式来处理这个,试试:
while not x.isalpha():
2
如果你在用Python编程,其实不需要用到正则表达式,因为Python自带了一些库,里面有很多函数可以帮你解决问题。在这个关于字符串方法的页面上,你可以使用一个叫isalpha()
的函数:
这个函数会检查字符串中的所有字符,如果都是字母并且至少有一个字符,它就返回真;否则返回假。
我建议你在条件判断中用isalpha()
,而不是用x==r
。