2016-04-16 23 views
2

私は自分のコンピュータプログラミングクラスのpygameに関する課題を完了しようとしています。私はこの種のことに特に精通していないので、私の質問をするときに間違いを犯すと私は言い訳をする。whileループが終了しないのはなぜですか?

私は教科書のソースコードをいくつか修正しようとしていますが、ブロック内のブロックの移動速度と位置更新の遅延をユーザーが設定できるようにしています。プログラムの始めには、ユーザーがあらかじめ決められた設定の間で選択できるように設計された、または独自のループを作成するwhileループがあります。私はシェルでプログラムを実行しようとしたとき

choice = "" 
while choice != "E" or "e" or "Elect" or "elect" or "ELECT" or "C" or "c" or "Create" or "create" or "CREATE" : 
    choice = input("Would you like to elect a speed setting for the vectors, or create your own? (Type 'E' for elect or 'C' for create) ") 

は、「e」を入力すると、それは再び私にwhileループのための入力文を与えました。なぜ私の入力に「選択」が設定されていないのですか?

+0

は選択ではありません( "E"、 "E"、 "選ぶ" ...)にいる間 '試してみてください:' – mshsayem

+1

はさらに良いことに、あなたの入力をキャストします( "e"、 "elect"、 "c"、 "create") ' – idjaw

答えて

1

てみてください確認することができます:あなたが持っている

問題はchoice != "E" or "e" or ...(choice != "E") or ("e") or (...)を意味している理由

choice = "" 
while choice.lower() not in ("e", "elect", "c", "create"): 
    choice = input("Would you like to elect a speed setting for the vectors,, create your own? (Type 'E' for elect, 'C' for create) ") 

を。 "e"は、None,0,Falseでないので、Trueと評価されます。または空のシーケンスです。あなたの条件は常に真です。

+0

これを簡略化するには 'lower'を使用します。 – Pythonista

+0

@Slayer申し分なく、完了 – totoro

+2

質問のコードがうまくいかない理由を説明すると便利だと思います – Prof

1

あなたの他のorの評価をTrueにします。だから、条件は終了するつもりはないwhile choice != 'E' or Trueに分解されます。あなたは繰り返しif choice != 'string'を使用する必要がある、またはできれあなただけwhile choice not in list_of_bad_strings

+0

ああ、私はそれを理解していると思います。 もし選択すれば! 'string'またはchoice!= 'string'またはchoice!= 'string' .... 右? –

2

if choice != "E" or "e"は、if (choice != "E") or ("e")に明示的に変換できます。つまり、choice != "E"がtrueまたはfalseであるかどうかにかかわらず、式全体は常にTrueを返します。"e"は空の文字列ではないため、常にTrueと評価されます。

あなたの代わりに何をすべき
>>> if True or "e": 
...  print("entered") 
entered 

>>> if False or "e": 
...  print("entered") 
entered 

は次のとおりです。

while choice.lower() not in ("e", "elect", "c", "create"): 
関連する問題