2016-11-06 7 views
-1

Pythonが正しく、このコードを評価しない理由だから、私は理解していない:Pythonやオペレータ

def makes10(a, b): 
    if (a or b == 10) or (a + b == 10): 
    return True 
    else: 
    return False 

予想通り、次が解釈されている間:

def makes10(a, b): 
    if a == 10 or b == 10 or (a + b == 10): 
    return True 
    else: 
    return False 

彼らは私には同じように見えます、明らかに(aまたはb == 10)は(a == 10)または(b == 10)として解釈されませんでした。誰かがなぜこれが起こるか説明してもらえますか?

Correct

Incorrect

+0

それは優先順位から来るでしょう。 ==演算子は、演算子よりも優先されます。だから、あなたは評価がaか(b == 10)か(a + b == 10) –

答えて

0

私は完全にはよく分からないが、最初の文が動作していないので、それはあるかもしれませんか?したがって、かっこの必要はないかもしれません。

+0

私がすでに私の答えを見つけたということになります。どうやらPythonはそれらを一緒に読むことができないので、 "if 10 in(a、b)"あるいは各変数を1つずつ比較する必要があります。 – Dorkymon

+0

@DorkymonこれはPythonがそれらを一緒に読むことができないこととは関係ありません。文「a or b == 10」では、 '=='が 'or'より優先されるので、その文が意味することは' 'aが真であるか、b == 10 ''であるということです。これは、この構文がどのように機能するかという単純な規則です。 – sobek