私はコーディング全体に不慣れです...だからここに行きます。単純な数推測ゲームを書こうとしているだけでなく、入力の検証も行います。整数のみが入力として受け入れられるようにします。数字を整数に変換できるように、アルファベット文字を取り除く方法を理解しました。フロート番号を入力すると問題が発生します。浮動小数点数を整数に変換することはできません。どんな助けでも大歓迎です。私が言ったように、私はこのコーディングの3日目くらいなので、私の小さな知識を理解するようにしてください。前もって感謝します。
これが私のメインプログラムの関数です。
def validateInput():
while True:
global userGuess
userGuess = input("Please enter a number from 1 to 100. ")
if userGuess.isalpha() == False:
userGuess = int(userGuess)
print(type(userGuess), "at 'isalpha() == False'")
break
Elif userGuess.isalpha() == True:
print("Please enter whole numbers only, no words.")
print(type(userGuess), "at 'isalpha() == True'")
return userGuess
4.3(または任意のfloat)を入力として使用した場合に発生するエラーは次のとおりです。
Traceback (most recent call last):
File "C:\\*******.py\line 58, in <module>
validateInput()
File "C:\\*******.py\line 28, in validateInput
userGuess = int(userGuess)
ValueError: invalid literal for int() with base 10: '4.3'
実際には、int()
関数は整数文字列または浮動小数点を予期しますが、浮動小数点文字列は予期しません。フロート文字列が指定されている場合は、最初にfloat
に変換してから、次のようにint
に変換する必要があります。
int(float(userGuess))
文字列操作と型キャストを使用できます。
int(userGuess.split('.')[0])
まず、なぜfloat文字列を整数に変換したいのですか? _4.7
_を、ユーザーが_4
_を推測したことを意味するものとして扱いますか?または_5
_?または、合法だが自動的に無効な推測ですか?または、実際には値_4.7
_(この場合、整数はまったく必要ありません)ですか?または…?
第二に、これにアプローチする方法が間違っています。 userGuess.isalpha()
は、推測が完全に文字で行われていることを通知するだけです。つまり、少なくとも1つの非文字があるため、たとえば_"Hello!"
_を数値として扱うことになります。
文字列が有効な整数であるかどうかを知りたい場合は、文字列でint
を呼び出し、try
/except
を使用して、そうでない場合を処理します。
_def validateInput():
while True:
global userGuess
userGuess = input("Please enter a number from 1 to 100. ")
try:
userGuess = int(userGuess)
print(type(userGuess), "after int succeeeded")
break
except ValueError:
print("Please enter whole numbers only, no words.")
print(type(userGuess), "after int failed")
return userGuess
_
他の種類の失敗とは異なる方法で実際の単語を処理する場合、たとえば、より具体的なエラーメッセージを出力できる場合は、isalpha
句内のexcept
を確認できます。
別のエラーを出すことができるようにそれがfloatであるかどうかのチェックを処理したい場合は、try
句内で同じこと(except
を呼び出してfloat(userGuess)
)を実行します。または、floatを切り捨てる場合は、そのint(userGuess)
をint(float(userGuess))
に変更します。
try
パーツ内でも、他のチェックが必要になる場合があります。たとえば、_-23
_または_178
_と入力した場合はどうなりますか?これらは整数ですが、1から100までの数値ではありません。
明らかに、各テストは別のコード行であるため、必要な検証が多いほど、必要なコードも多くなります。したがって、検証をループオーバー入力とは別の関数に移動して、読みやすくすることを検討することをお勧めします。
isalpha
を使用して出力をスクリーニングしないでください。 [〜#〜] eafp [〜#〜] -変換して、その例外を処理します。 ValueError
は、それを処理してユーザーに入力を修正するように指示できるという点で、まさにあなたが望むものです。または、奇妙な理由で、入力を「4.3」から「4」にサイレントに修正する必要があります。
def validateInput():
while True:
global userGuess
userGuess = input("Please enter a number from 1 to 100. ")
try:
int(userGuess)
return userGuess # you shouldn't really keep this string...
except ValueError as e:
print("Please enter whole numbers only, no words.")