将用户输入限制为字母表

时间:2012-01-10 07:49:15

标签: python

我是一名学习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的情况下完成?

3 个答案:

答案 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。