2012-01-10 107 views
0

我是一名技术作家,学习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

请告诉我们,失败的情况。 – Marcin 2012-01-10 09:38:05

+0

另外,你是指字母书写系统中的字符(例如罗马字体或梵文字体),还是指所有书写系统中写字的字符(例如中文字符)? – Marcin 2012-01-10 09:40:14

+2

O'Reilly先生应该做什么?还是Leutheusser-Schnarrenberger夫人? – 2012-01-10 13:09:10

回答

1

如果你使用的是Python,你不需要正则表达式 - 这里面包含的函数库可以帮助你。从String methods此页面,您可以拨打isalpha()

返回true,如果字符串中的所有字符是字母,并至少有一个字符,否则为false。

我建议在if语句中使用isalpha()而不是x==r。要做到这一点

+0

是的,我试过isalpha()和True/False也是。然而,问题依然存在。我觉得我错过了一些东西。可能是在try-exception代码行中。他们首先不能正常工作。而且,我只是想在不使用任何/最少内置的函数的情况下执行此操作 - 这样我就可以掌握编程逻辑! – 2012-01-10 08:50:13

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。

+0

我采纳了你的建议如下: – 2012-01-10 09:04:49

+0

'如果5 <= len(x)<= 10'是Python中正确的链式比较。 – 2012-01-10 09:15:09

+0

我采纳了你的建议,如下所示:x = raw_input(“Your Name:”),如果不是x.isalpha():, Python显示为未定义的namefield。我也改变了'if 5 ...'的建议。这个代码对于任何第一个入口(比如数字)来说都很漂亮,但是在第二步中工作不正确。即它接受了错误的输入。 – 2012-01-10 09:18:30

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(): 
+1

正如一边:尝试'r = float(“NaN”); x = r; print(x == r)' – 2012-01-10 13:12:02

+0

嗨Shawabawa,是的,这是我想要的。而且,你的评论也是正确的。我感谢你的帮助!谢谢! – 2012-01-11 07:00:39

+0

@Shawabawa,我通过'而不是x.isalpha()'路线。感谢你的帮助。 – 2012-01-11 10:56:19