2016-04-08 16 views
0

文字列を1000から9999までの間で検証しようとしています。これを実行しようとすると、検証されていないと返されます。ユーザーが文字列として入力した4桁の数字を実際に読み取ることができるように、この問題を修正する方法が不思議です。私は理由のために文字列としてそれを持っており、それは私のコードの他の部分のために正常に動作します。それはちょうど私が特に苦労しているものです。文字列内の数字が最大と最小の間に収まる

def choiceTwo(digitCode): 

    max = 9999 
    min = 1000 

    digitCode = [int(num) for num in digitCode] 
    for x in digitCode: 

     if x > max: 
      return True 

     if x < min: 
      return False 

def main(): 

    digitCode = str(input("Please enter a 4 digit code: ")) 

    if choiceTwo(digitCode) is True: 
      print("Number is verified!") 

    else: 
      print("ERROR not a valid ") 

答えて

0

4桁のコードの各数字がこれらの2つの値の間にあるかどうかを確認してください。しかし、それぞれの数字は0-9の範囲にあるため、これは当てはまりません。最初の条件がif x > maxの場合は、数値が9999より大きいかどうかを確認してからTrueを返します。この範囲の数値を調べるには、演算子を使用して条件を入れ子にする必要があります。

2つの変数minmaxは、Pythonに組み込まれており、機能を無効にしているので、名前を付けないでください。あなたの条件を組み合わせることもできます。あなたは包括的であることを受け入れられる値のあなたの範囲を希望していない場合は、単にあなただけのif (expression)をしますやっているので、あなたの場合は元の状態で余分なis Trueをドロップすることができ99991000

を除外するために、以下の条件に<==の取りそれが真実価値か「真実」かを評価する。

私はwhileループを追加しました。これは、実際に長さが4になるまで4桁のコードを入力するようにユーザーに促し、他の関数のエラーを防ぎ入力を検証するために有効な数字です。

あなたが実際にも、何もNoneを返さないだろうとがあなたの場合の条件に真でないとして評価されることを返すので、else: return Falseを必要としませんが、私はオリジナルに近いそれを維持するために、これを残しました。あなたはminとmaxをglobal(またはmain())関数のどちらかに宣言することができます。簡略化したい場合はif _min <= int(digitCode) <= _maxを使います。

def choiceTwo(digitCode): 

    _max = 9999 
    _min = 1000 

    if _min <= digitCode <= _max: 
     return True 
    else: 
     return False 

def main(): 

    digitCode = input("Please enter a 4 digit code: ") 
    while not (digitCode.isdigit() and len(digitCode) == 4): 
     digitCode = input("Please enter a 4 digit code: ") 

    if choiceTwo(int(digitCode)): 
     print("Number is verified!") 

    else: 
     print("ERROR not a valid ") 
main() 
0

それはまっすぐにあなたのif文でこれを行うには、おそらく簡単です:

if int(digitCode) < int(max) and int(digitCode) > int(min): 
    print("Number is verified!") 
else: 
    print("ERROR not a valid ") 

編集:あなたは、それらを使用することを述べたので、私はdigitCode、最大、および最小の両方がすべての整数だったことを確認しましたコード内の他の場所にある文字列。

編集2:また、関数内でステートメントをダブルチェックします。 xがmaxとminの間にある場合はどうなりますか(現在x> maxの場合のみTrueを返します)。

関連する問題