限制用户输入为字母

2 投票
3 回答
13152 浏览
提问于 2025-04-17 09:54

我是一名技术写作者,正在学习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

撰写回答