2017-11-29 15 views
1

新しいpython(python-3)とstackoverflowの新機能です。現在edx.orgで学習し、次のエラーが発生しました。 なぜこのエラーメッセージが2回印刷されますか?

は、私は答え STRに対してユーザ入力 STRをチェックし、 またはFalse を返す関数を作成しました。

この機能をテストするとき、私はを作成しましたが、ループは3回目の失敗した試みで停止します。ただし、失敗した試行があるたびに、関数は一度だけ印刷する必要がある場合、エラーメッセージを2回印刷します。

Iを変数に関数の戻りブール値を格納するのではなく whileループ内かの状態に直接関数を呼び出してエラーを修正しました。しかし、エラーメッセージの印刷の背後にあるロジックを2回理解したいと思います。ここでは二回、エラーメッセージを出力し、元のコードは次のとおりです。

def letter_guess(letter, guess): 

    if len(guess) == 1 and guess.isalpha() and guess < letter: 
     print(guess,"is lower than the answer. Try again.\n") 
     return False 

    elif len(guess) == 1 and guess.isalpha() and guess > letter: 
     print(guess,"is higher than the answer. Try again.\n") 
     return False 

    elif len(guess) == 1 and guess.isalpha() and guess == letter: 
     print("Correct answer!") 
     return True 

    else: 
     print("Please only enter one alphabet for the letter. Try again.\n") 
     return False 

answer2 = "m" 
guess2 = input("Please enter a single alphabet : ")  

i = 0 

while i < 3: 


    if letter_guess(answer2, guess2): 
     break 

    elif letter_guess(answer2, guess2) == False and i == 2: 
     print("You have reached 3 guesses. Game over.") 
     break 

    else: 
     i += 1 
     guess2 = input("Please guess again : ") 

答えて

0

あなたは、同じ間違った推測で、elifの中で最初に関数を2回呼び出します。あなたは正しい呼び出しを1回だけ呼び出し、戻り値を格納するように修正しました。

私はそれをよりよく説明しようとします:関数は、その条件を評価するために最初のifによって常に呼び出されます。戻り値がfalseの場合、以前と同じ引数を指定してelif条件を評価するために再度呼び出されます。

+0

条件が満たされないとき、コードは 'if'と' elif'を通って実行されるので、 'else'で終わる前に2回実行されますか?もしそうなら、私は今理解する。ありがとうございました! –

1

あなたはwhileループ内input()を呼びたい:

# ... 
answer2 = "m" 
i = 0 
while i < 3: 
    guess2 = input("Please enter a single alphabet : ") 
    # ... 

そうでない場合、ユーザは自分の答えを変えるチャンスを持っていません、 guess2は決して変更されず、同じエラーメッセージが複数回表示されます。

+0

ちょっとAndrea、すでに 'while'ループの最後に' guess2'の新しい入力があります。 –

+0

@JoChoi:私の悪い、申し訳ありませんが、私はそれを逃した –