-4

ユーザーが数字を入力したかどうかを確認する関数を作成しようとしています。ユーザーが数字を入力すると、私のプログラムはエラーメッセージを出力し、ユーザーが文字列を入力すると、私のプログラムはプログラムを続行する必要があります。これどうやってするの?

私はこれまでにこれを思いつきました:

 #Checks user input

def CheckInput():
    while True:
        try:
            city=input("Enter name of city: ")
            return city
        except ValueError:
            print ("letters only no numbers")

この機能は使えないようです。助けてください。

4

4 に答える 4

2

文字列に数字を含む応答を除外しようとしています。与えられた答えは、正規表現を使用してそれを行います。

それがあなたが望むすべてなら、仕事は終わりました。ただし、Ad€x¢® や john@example.com などの都市名も使用できます。

あなたがどれだけ選択的になりたいか、そしてこのコードスニペットを修正したいだけなのか、それともお金ではないものを拒否したい次の問題を解決できるように答えがあなたに与えたテクニックを学びたいのかによって異なります。量、たとえば)、正規表現を書いてみてください。これにより、照合する文字を定義できます。入力文字列に文字 [^a-zA-Z] 以外の文字が含まれているかどうかをテストする単純なものを作成できます ([ ] 内の ^ は、リストされているクラスにない任意の文字を意味します)。その RE が一致する場合は、文字列を拒否できます。

それでは、「文字のみ」という厳格なルールで十分かどうかを検討してください。欠陥のあるルール (数字が許可されていない) を別のルールに置き換えましたか? 都市名としての「LA」はどうですか?それとも「ロサンゼルス」?スペースとピリオドを許可する必要があるかもしれません。ハイフンはどうですか?スペース、ピリオド、ハイフンを含む [^a-zA-Z .-] を試してください。バックスラッシュは、"az" のハイフンとは異なり、そのハイフンを文字どおりに扱うように RE エンジンに指示します。

ここでの正規表現の記述に関する詳細: http://docs.python.org/3/howto/regex.html#regex-howto

Python での Re モジュールの使用に関する詳細: http://docs.python.org/3/library/re.html#module-re

于 2013-10-17T09:41:45.707 に答える
1
val = input("Enter name of city:")
try:
    int( val )
except ValueError:
    return val
else:
    print("No numbers please")

編集:入力に数字がまったく存在してはならないという言及を見ました。このバージョンは、入力の任意の場所で数字をチェックします。

import re

val = input("Enter name of city:")

if re.search( r'\d', val ) is not None:
    print("No numbers please")
else:
    return val
于 2013-10-17T08:59:30.200 に答える