我是一名学习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!")
我打算这个代码块做两件事。即,显示输入提示,直到用户仅将字母输入为“名称”。然后,如果发生这种情况,请处理该输入的长度并以编码方式显示消息。但是,我遇到了两个问题,即使经过多次尝试,我也无法解决。或者,即使正确的条目也被异常代码拒绝,或者也接受错误的条目并处理它们的长度。
请帮我调试我的代码。并且,是否可以在不使用reg exp的情况下完成?
答案 0 :(得分:1)
如果您正在使用Python,则不需要使用正则表达式 - 包含的库包含可能对您有帮助的函数。在String methods上的此页面,您可以致电isalpha()
:
如果字符串中的所有字符都是字母并且至少有一个字符,则返回true,否则返回false。
我建议您在if语句中使用isalpha()
而不是x==r
。
答案 1 :(得分: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 :(得分: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。