我正在编写一个程序,其中一部分需要输入一个名称。 名称只能是alpha和空格(例如John Smith),它不能是John Smith1 如果输入了无效字符,我需要程序显示错误消息并重新解决问题。除了验证,我得到了一切。我猜它是这样的?
name = str(input("What is the customers name? "))
while True:
if ??????????????????? :
print("You have entered an invalid character. Enter only name."
name = str(input("What is the customers name? "))
else:
break
有人可以填写?????
以使该计划有效吗?
答案 0 :(得分:3)
尝试isalpha()
字符串方法。
由于此人将使用空格输入名称,因此您有两种选择:
split()
)string.letters
例如:
>>> import string
>>> string.letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
将其与' '
相结合,以获取允许的字符列表。由于这是家庭作业,其余部分取决于你。
答案 1 :(得分:1)
您可以使用replace
字符串方法删除空格,然后使用isalpha()
方法。
一个例子:
>>> def get_name():
... name = raw_input('name: ') # use a simple "input" in python3
... if not name.replace(' ', '').isalpha():
... print('Bad name!!!')
... else:
... print('Good name!')
...
>>> get_name()
name: My name
Good name!
>>> get_name()
name: Bad Nam3
Bad name!!!
>>> get_name()
name: Jon Skeet
Good name!
请注意,这也适用于python3中的非ascii字母:
#python3
>>> get_name()
name: Accented è
Good name!
>>> get_name()
name: Bad Nam3
Bad name!!!
正则表达式对于这个简单的任务来说太复杂了。
另外,因为使用[A-Za-z ]+
或类似名称不会将名称与非ASCII字母匹配。
使用\w
包含数字。
如果您不想匹配非ASCII字母(例如'è'),那么您可以尝试这样的事情:
>>> def get_name():
... name = raw_input('name: ') #input in python3
... try:
... name.encode('ascii')
... except UnicodeDecodeError:
... print('Bad name!!!')
... return
... if not name.replace(' ', '').isalpha():
... print('Bad name!!!')
... else:
... print('Good name!')
...
>>> get_name()
name: Accented è
Bad name!!!
>>> get_name()
name: The nam3
Bad name!!!
>>> get_name()
name: Guido Van Rossum
Good name!
最后,另一种检查方法是:
>>> import string
>>> def good_name(name):
... return not set(name).difference(string.letters + ' ')
...
>>> good_name('Guivo Van Rossum')
True
>>> good_name('Bad Nam3')
False
你可以这样使用它:
name = raw_input('name: ') #input in python3
if good_name(name):
#stuff for valid names
else:
#stuff for invalid names
答案 2 :(得分:0)
您可能需要查看regular expressions:
^[A-Za-z ]*$
是一个正则表达式,它只匹配字符串,如果它们完全由ASCII字母和空格组成。
还要允许当前语言环境的字母:
^[^\W\d_]*$
基本上是一组字母数字字符,包括重音字符(在当前语言环境中)减去数字和下划线。
答案 3 :(得分:0)
使用正则表达式,例如[A-Za-z ]+
如果我使用Tim的表达式,它会转化为这样的东西:
match = re.match(r'^[A-Za-z ]*$', name )
if match :
print("Correct name");
else:
print("Invalid chars");
答案 4 :(得分:-1)
要检查字符串是否为alpha我通常使用此字符串。希望这可以帮到你。
import re
def is_alpha_space(name):
name_nospace = ''.join((name.split()))
if re.search(r"\W", name_nospace) or len(name_nospace) < 1:
return False
return True
name = "Mark Zumkoff"
print(is_alpha_space(name)) # True
name = "Mark Zumkoff@"
print(is_alpha_space(name)) # False
name = " "
print(is_alpha_space(name)) # False