2016-09-19 9 views
1

私は次の2つのコードブロックが同じ方法で評価されることを期待していますが、そうではないようです。たとえば、次のようになります。複数の条件を持つ条件文はどのように評価されますか?

if True or False and False: 
    print('True')                
else:                   
    print('False') 

Trueが出力されます。しかしこれで:

if (True or False) and False: 
    print('True') 
else:                   
    print('False') 

偽が表示されます。 、(True or False) and False = True and False = False置換によって

  • True or False = True
  • True and False = False

:ここでは、ロジックの私の内訳です。

どうしてですか?

答えて

3

operator precedenceのためです。 Python 2.xおよび3.xのドキュメントでは、and演算子はor演算子よりも高い優先順位を持ちます。あなたの表現に意味

enter image description here

:また、ブール真理値表を見てい表現で

if True or False and False: 

を、False and Falseがあるため優先のグループにまとめています。それは左から右に評価されています、今

if True or (False and False): 

:それは、Pythonのようにそれを評価を意味します。最初の条件はTrueなので、短絡して2番目の条件をスキップし、True 'True'と評価します。 (第一面がtrueの場合、この短絡は、それ真である必要があるため。)

を今すぐあなたの第二の例では:

if (True or False) and False: 

これはTrue or FalseTrueを与える、最初に評価することができます。次にTrue and FalseFalseで、「False」と表示されます。

>>> print(True or False) 
True 
>>> print(True and False) 
False 
+0

これは、短絡とは関係ありません。非短絡評価は同じ結果をもたらしたであろう。 – user2357112

+0

あなたはまだ優先順位については何も言っていません。あなたの答えの論理によって、「偽と真実または真」は「偽」になります。 – user2357112

+0

@ user2357112正しい情報を含めるように答えを更新しました。間違いや批判を指摘してくれてありがとう、非常に感謝! – Li357

1

(True or False)Trueに評価されます。したがって、(True or False) and FalseTrue and Falseと評価され、Falseと評価されます。

この答えは非常によくブール評価のためのルールを説明します:最初の文True or False and FalseこれはTrueと評価さ

True or (False and False) 

と論理的に等価であるので、操作のhttps://stackoverflow.com/a/16069560/1470749

1

標準受注は、orand優先します。

2番目のステートメントは、これはFalseと評価さ

(True or False) and False 

です。

関連する問題