2016-08-10 10 views
-1

私はLearning Pythonを使って作業しており、現在ゲームを作成中です。何らかの理由で私のif/else文が正しく動作していません。私は私の入力を入力するために使用するものは何でも数ユーザー入力がIf/Elseステートメントで正しく応答しない

if door_choice == '1': 
    room_one() 
else: 
    print "I don't recognize that choice, try again!" 

if door_choice == '2': 
    room_two() 
else: 
    print "I don't recognize that choice, try again!" 

if door_choice == '3': 
    room_three() 
else: 
    print "I don't recognize that choice, try again!" 

が、私はまだ、たとえば、他の回答else文を受け取る:

You see 3 doors. 
You must choose either 1, 2 or 3. 
> 2 
I don't recognize that choice, try again! 
The second room is dark and smelly but you see a gold chest! 
Do you open the chest or just give up? 
I don't recognize that choice, try again! 

print文ここに私の現在のスクリプトの関連部分があります「私はその選択肢を認識していないので、もう一度やり直してください!指定した番号を入力すると表示されません。私は自分の入力に整数を追加しようとしましたが、私のドアの選択肢を文字列としてではなく、まだ運がないままにしました。

+0

質問自体に[mcve] **を入れてください**。 – jonrsharpe

答えて

1

あなたが1つのif-elif-elseブロックにそれらの別々のif-elseのブロックをチェーンする必要があります

if door_choice == '1': 
    room_one() 
elif door_choice == '2': 
    room_two() 
elif door_choice == '3': 
    room_three() 
else: 
    print "I don't recognize that choice, try again!" 
+0

パーフェクト!助けてくれてありがとう、それはもっと理にかなっていて、読むのがはるかにクリーンです。私が含めることができるエリフの数に注意を払うべき最大限はありますか? –

+0

私は最大値はわかりませんが、かなりの数の場合は、 'door_choice'の値を使ってアクセスする辞書を使うことを検討してください。 –

1

問題は、あなたのif文です。第三はない真のチェック場合はtrueを、無効な選択ではない場合、その後、第2のチェックプログラムは、偽のif door_choice == '1'に遭遇したので、次のelse文にジャンプし、プリント"I don't recognize that choice, try again!"最初は本当ではない代わりに、場合

if door_choice == '1': 
    room_one() 
elif door_choice == '2': 
    room_two() 
elif door_choice == '3': 
    room_three() 
else: 
    print "I don't recognize that choice, try again!" 
1

明らかに「他のたびに渡す」効果に加えて、あなたは例が多い場合のif/ELIF構造を保存するために、テーブルや関数ポインタを使用することができます。

room_funcs = [room_one,room_two,room_three] 
idx = int(door_choice)-1 
if 0 <= idx < len(room_funcs): 
    room_funcs[idx]() 
else: 
    print("I don't recognize that choice, try again!") 
+0

これは興味深いアプローチです。ありがとうございます。 –

+0

モーゼスが言っているように、数値入力を取り除きたいが、北、西、東を好む場合は、関数ポインタを辞書に入れてもほぼ同じです。 –

0
If door_choice == '1' 
    Room_one() 
elif door_choice == '2' 
    Room_two() 
elif door_choice == '3' 
    Room_three() 
else 
    Print "please input a value between 1 and 3 

あなたは、いくつかの悪い論理を持っていました。 1を入力した場合はそれ以外の場合はエラーが表示されますが、再度入力2を確認して希望の結果を得て、再度入力3を確認してもエラーが再度表示されます。

pythonでifまたはelifを使用すると、結果に到達する方法の1つです。 あなたが

+0

あなたのelifやその他の文では小文字が必要です –

+0

Ikrしかし、私のAndroidデバイスはそれらを自動的に大文字にすることにしました。私は気づいていませんでした:D – ProTheJoker

0

EDITより多くのケースを行う必要がある場合もスイッチがあります。elif文の任意の量によってチェーン1つのif文が、そこにある最大値について。ただし、ifにつきましては、elseとなります。

TutorialsPointはのelif /他/場合については偉大なページがあります。http://www.tutorialspoint.com/python/python_if_else.htm

「else文はオプションの文で、あれば、次のせいぜい1 else文があるかもしれません。」

私はあなたの押し込みが正しいとは思わない。 ifステートメントの後ろに、すべてのelseステートメントを4つのスペースでさらにインデントし、ifに変更します。最後のelseステートメントも削除してください。

私はあなたが何を意味するかを見せます。あなたが言う後

if door_choice == '1': 
    room_one() 
    if door_choice != 1 or 2 or 3: 
     print "I don't recognize that choice, try again!" 

if door_choice == '2': 
    room_two() 
    if door_choice != 1 or 2 or 3: 
     print "I don't recognize that choice, try again!" 

if door_choice == '3': 
    room_three() 
    if door_choice != 1 or 2 or 3: 
     print "I don't recognize that choice, try again!" 

また、あなたは、ユーザー入力を与えていない「私は、もう一度試してその選択を認識しません!」

+0

このコードは非効率ですが、最初に提案された。これは、少ない行数/文字で簡単に行うことができます。 –

関連する問題