2016-04-10 4 views
0

私は現在、オンラインコースでPython 2.7を教えていますが、ブール演算子には少し問題があります。コンテキストは非常にシンプルです - 閉鎖されたテキストベースのアドベンチャーゲーム(実行には30秒かかる)。なぜPython(2.7)またはブール演算子がTrueを間違って返すのですか?

さまざまなユーザー入力を可能にするif文を追加しました。しかし、入力が「gobbledigook」または「right」の場合は、elifという文があります。 bear_room()関数がまだ呼び出されています。 OR機能を誤って使用していますか? 謝罪これはすでにどこかで答えられている場合、ブール論理のチェック私は私の現在の思考を確認したので、あまり役に立たなかった!それは論理ORブール値ではない - - それはどちらかそれをだ

choice = raw_input()  
if choice == "left" or "Left" or "LEFT": 
      bear_room() 

答えて

2

は、あなたはちょうどあなたがor演算子を誤解しているif choice.lower() == 'left'

+0

これは素晴らしいことです。私は一日中このようにしてきました。私がこのような単純な構文を見逃したとは信じられません。ありがとう! – rtob

+0

問題ありません。もう1つの答えは、より深く、なぜこれが起こるかを説明します。つまり、あなたの他の 'または'は実際にはTrueと評価されます – Pythonista

0

を使用するように条件を簡素化することができ、if choice == "left" or choice == "Left" ...

を使用する必要があります。しかしTrueまたはFalse。一方、あなたの表現は、種類をミックス - それを打破してみましょう:

  • choice == "left"はブール
  • 'Left'ある文字列です。 or演算子は文字列を処理できないため、ブール値に変換しようとします。それは空だかどうかをチェックすることによって、そうする - 「左」の任意の空でない文字列がTrueに変換され、空の文字列はFalse
  • に変換されます -

上記と同じ文字列からブール変換した後、あなたの表現

if choice == "left" or True or True: 
      bear_room() 

なぜ入力によってbear_roomが実行されるのかはっきりしています。あなたのケースを適切に処理するには、次のいずれかを行うことができます。

if choice == 'left' or choice == 'Left' or choice == 'LEFT': 
    bear_room() 
if choice.lower() == 'left': # convert all letters to lower case 
    bear_room() 
if choice in ['left', 'Left', 'LEFT']: # check choice is in the list of valid options 
    bear_room() 
+0

ありがとうございます。私は今それを逃したために挫折しました! – rtob

関連する問題