您可以使用字符串的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