2017-03-20 24 views
0

私のコードでは、ユーザが数字を入力し、数字を入力するまでループを繰り返していることを確認するためにユーザ入力を検証する必要があります。Python-ユーザ入力の検証

マイコード:

user_input=input("Enter a number: ") 
while user_input != int: 
    user_input=input("Error: Enter a number: ") 

マイ出力:

番号を入力します。d

エラー:番号を入力します。番号を入力します:5

エラーfは

エラー:番号を入力してください:5

エラー:番号を入力してください:3

なぜ数字が入力できないのですか?

+0

'user_input.isnumeric()'がほしいかもしれません。 –

答えて

0

回答

は、私は以下のコードの一部が容易に理解される方法であなたの問題を解決すると思います。

user_input = input("Enter a number: ") 
while not user_input.isnumeric(): 
    user_input = input("Error: Enter a number: ") 

説明

あなたが持っているコードがあるためwhile user_input != intで動作しませんでした。

input関数を呼び出して、ユーザーが入力を提供すると、その入力は常に文字列です。

>>> num = input('Enter a number: ') # 5, as a string 
>>> num 
'5' 

numが数字であるかどうかを確認することです。したがって、文字列が数字を表すかどうかを確認するには、str.isdigit()str.isdecimal()、およびstr.isnumeric()のメソッドを使用できます。詳しくはhereをご覧ください。

次のアプローチが実行可能であると誤解するのは簡単ですが、すぐに乱雑になる可能性があります。

while not isinstance(user_input, int): 

は、あなたが文字列になります input関数の呼び出しの結果として受け取る入力を忘れないでください。したがって、上記のコードは常にTrueになります。これはあなたが望むものではありません。しかし、 user_inputintに変更すると、上記のコードが動作する可能性があります。

>>> num = input('Enter a number: ') # 5, as a string 
>>> num 
'5' 
>>> int(num) 
5 
>>> isinstance(num, int) 
True 

しかしnumは何か他のものだった場合、インタープリタはエラーをスローしていました。

>>> num = input('Enter a number: ') # 'A' 
>>> int(num) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: 'A' 

これはバック文字列は、いくつかの数を表しているかどうかを確認するために、文字列のメソッドを使用することを含む答え、に私たちをもたらします。最もフレキシブルなので、str.isnumeric()メソッドを使用することにしました。

これがあなたの質問に答えることを願っています。ハッピーコーディング!