2017-06-07 9 views
0

私はちょうどPythonを学び始めて、基本的なwhileループを作ろうとしましたが、実行したとき、elif文を実行しません。つまり、userguessが== "tiger"の場合、 "ほぼ"は印刷されません。 これはどんな説明でも分かるはずです。あなたがifブロックに到達する前に、あなたが二回raw_inputを呼んでいるので、感謝なぜ私のwhileループの仕事でelifを失う?

animal = "lion" 
userguess = raw_input("guess an animal: ") 

while userguess != animal: 
    userguess = raw_input("guess an animal: ") 
    if userguess == animal: 
    print("you got it") 
    break 
    elif userguess == "tiger": 
    print("almost, try again: ") 
    else: 
    print("try again: ") 
+0

代わりに何をしますか? – deceze

+0

コードは "lion"で期待通りに機能しますか? –

+6

最初に入力を2回お願いしていますか? – Lafexlos

答えて

5

はそれです。したがって、ユーザーはチェックが行われる前に2匹の動物を入れなければなりません。

guess an animal: tiger 
guess an animal: tiger 
almost, try again: 
guess an animal: 

は、ユーザーが一度だけ推測する必要がループの最後に二raw_inputを移動したい場合。

animal = "lion" 
userguess = raw_input("guess an animal: ") 

while userguess != animal: 
    if userguess == animal: 
    print("you got it") 
    break 
    elif userguess == "tiger": 
    print("almost, try again: ") 
    else: 
    print("try again: ") 
    userguess = raw_input("guess an animal: ") 

あるいは、それは第二raw_inputコールを残し、ダミー値を持つ最初の呼び出しを置き換えます。

animal = "lion" 
userguess = None 

while userguess != animal: 
    userguess = raw_input("guess an animal: ") 
    if userguess == animal: 
    print("you got it") 
    break 
    elif userguess == "tiger": 
    print("almost, try again: ") 
    else: 
    print("try again: ") 

whileループの条件付きで、初期割り当てを完全に削除することもできます。つまり、animalが "lion"である場合、ブロックの最後に達する前に常にbreakが存在するため、条件は決してトリガーされません。彼らは、ユーザーが自分の最初の試行で「ライオン」を推測しても印刷されます、「あなたはそれを得た」ことを確認するため

animal = "lion" 

while True: 
    userguess = raw_input("guess an animal: ") 
    if userguess == animal: 
    print("you got it") 
    break 
    elif userguess == "tiger": 
    print("almost, try again: ") 
    else: 
    print("try again: ") 

第二と第三の方法は、最初に好ましいかもしれません。

+0

素晴らしい返信、それを書く時間をとっていただきありがとうございます! – mike

関連する問題