0

我正在编写一个程序,其中一部分需要输入名称。名称只能是字母和空格(例如 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

有人可以填写?????s 以使程序正常工作吗?

4

5 回答 5

4

试试isalpha()字符串的方法。

由于此人将输入带有空格的姓名,因此您有两种选择:

  1. 按空格分割输入(使用split()
  2. 利用string.letters

例如:

   >>> import string
   >>> string.letters
   'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

将其与 a 相结合' '以获得允许的字符列表。由于这是家庭作业,其余的由您决定。

于 2012-09-12T06:59:08.847 回答
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
于 2012-09-12T08:29:01.230 回答
0

您可能想研究正则表达式

^[A-Za-z ]*$

是一个正则表达式,仅匹配完全由 ASCII 字母和空格组成的字符串。

还允许您当前语言环境的字母:

^[^\W\d_]*$

这基本上是一组字母数字字符,包括重音字符(在当前语言环境中)减去数字和下划线。

于 2012-09-12T07:00:57.777 回答
0

使用正则表达式,例如[A-Za-z ]+

如果我使用 Tim 的表达方式,它会变成这样:

match = re.match(r'^[A-Za-z ]*$', name )
if match :
    print("Correct name");
else:
    print("Invalid chars");
于 2012-09-12T07:03:09.677 回答
-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
于 2012-09-12T07:00:59.630 回答