2016-03-22 4 views
0

問題は2つのint、aおよびbが与えられた場合、それらが10の場合はTrue、またはその合計が10の場合、Trueを返します。整数を評価する際に "または"を使用する

なぜ、(9,9)と(8,3)を入力するとTrueを返すのですか?

私は以来、別の解決策(下記)を使用して問題を解決しましたが、第1の解決策が機能しない理由を理解するのに苦労しています。

ありがとうございました。

def makes10(a, b):           

    if a or b == 10: 
     return True 

    if a + b == 10: 
     return True 

    else: 
     return False 

def makes10(a, b): 

    if a == 10: 
     return True 

    if b == 10: 
     return True 

    if a + b == 10: 
     return True 

    else: 
     return False 
+3

'aまたはb == 10 'は'(a!= 0)または(b == 10) 'を意味します。あなたが望む構成は 'a == 10 or b == 10'です。それはあなたの間違いを理解するのに十分ですか? – zwol

+0

[this](http://stackoverflow.com/questions/15112125/how-do-i-test-one-variable-against-multiple-values)の重複 – timgeb

+0

ああ、はい。 @ timgeb:それは私が選んだものよりはるかに優れた複製です。この質問のバリエーションは何度も尋ねられています。ありがとう! –

答えて

3

a or b == 10は、aがtrue、つまりゼロでないためtrueを返します。

1

このため:

if a or b == 10: 

temp = (a or b) 
if (temp == 10): 

の等価として実行されることはできような単一の固定値に対してNOTテスト複数の値。それぞれを個別にテストする必要があります(例:もし持っていたら

if (a == 10) or (b == 10): 

ステートメントはうまくいきました。ドキュメントを読む:https://docs.python.org/3/reference/expressions.html#operator-precedence

+2

私は 'a'がTrueと評価し、 'b'は評価されません。 –

+0

はい。 'または'はまだ '=='よりも優先度が高いので、個々の 'a'や' b'値ではなく '10'に対して' or'の結果をテストしています。 –

1
a or b == 10 

これがTrueに評価aがTrue

に評価されるあなたはそれがないと思う何をしません

(a == 10) or (b == 10) 
1
if a or b == 10: 

を記述する必要があります。

if a == 10 or b == 10: 
+0

"0"以外の数字は、あなたが書いた場合にTrueを返します:もし:... –

+0

@GavMacはい。そのとおりです。 「真実」と「虚偽」という言葉を参照してください。 – Carcigenicate

+0

ありがとうCarcigenicate! –

1
a or b == 10 

は、これが最初のブール式のコンテキストで評価すると、これが本当であれば、全体の式がある:あなたが最も可能性が高いたい

if (a) or (b == 10): 

:それは次のように評価されますただ真実。 falseの場合は、b == 10と評価されます。 a == 10 or b == 10とは異なります。

代わりに、あなただけの

if 10 in [a, b]: 

これはまた、あなたが達成したい何だろうと言うでしょう。

関連する問題