0

私はプログラムを書いていますが、その一部には名前の入力が必要です。名前には英字とスペースのみを使用できます (例: John Smith) John Smith は使用できません1 無効な文字が入力された場合、エラー メッセージを表示して質問をし直すプログラムが必要です。私は検証以外のすべてを持っています。ひょっとして、こんな感じでしょうか。

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()文字列の方法を試してください。

人はスペースを含む名前を入力するため、次の 2 つのオプションがあります。

  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

You might want to look into regular expressions:

^[A-Za-z ]*$

is a regex that only matches strings if they consist entirely of ASCII letters and spaces.

To also allow letters of your current locale:

^[^\W\d_]*$

which is basically the set of alphanumeric characters including accented characters (in the current locale) minus digits and underscore.

于 2012-09-12T07:00:57.777 に答える
0

Use Regular Expressions, something like [A-Za-z ]+

It would translate into something like this, if I use Tim's expression:

match = re.match(r'^[A-Za-z ]*$', name )
if match :
    print("Correct name");
else:
    print("Invalid chars");
于 2012-09-12T07:03:09.677 に答える
-1

To Check the string for alpha I generally use this one. Hope this can help you.

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 に答える