您可以使用字符串的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!
注意这也与非ASCII的字母python3:
#python3
>>> get_name()
name: Accented è
Good name!
>>> get_name()
name: Bad Nam3
Bad name!!!
正则表达式是为这个简单的任务太复杂了。 也因为使用[A-Za-z ]+
或类似的不会匹配非ASCII字母的名称。 并使用\w
包含数字。
如果你不想匹配的非ASCII字符(如“E”),那么你可以尝试这样的事:
>>> 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
的Tim O'Reilly不会高兴。毛泽东也不会。 –
@TimPietzcker我认为这将是一个提出任务的老师的问题。 –
我会在示例代码中的if结构上使用while循环。 – Alex