2016-03-22 138 views
0

的問題「或」「鑑於2個整數,a和b,返回真,如果一個,如果他們是10或者如果它們的總和爲10。」使用的評估整數

在第一次測試,爲什麼進入(9,9)和(8,3)返回True?

我一直在使用一個不同的解決方案,因爲解決了這個問題(進一步下文),但我在努力理解爲什麼第一個解決方案不起作用,因爲既不整數10也不等於10時,加在一起!

感謝您的幫助。

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'裝置'(一個!= 0)或(b == 10)'。你想要的構造是'a == 10或者b == 10'。這足以讓你理解你的錯誤嗎? – zwol

+0

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

+0

啊,是。 @timgeb:這比我選擇的複製品好得多。這個問題的變化已經被問過太多次了。謝謝! –

回答

3

它說a or b == 10,因爲a是真的,即不爲零,它返回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'值。 –

1
a or b == 10 

此值爲True爲a值爲True

您必須編寫

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

這並不做什麼,你認爲它。它將被評價爲:

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

您很可能希望:

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

所以除了「0」以外的任何數字都會返回True,如果你寫道:如果:... –

+0

@GavMac是的。這是正確的。查找術語「truthy」和「falsey」。 – Carcigenicate

+0

感謝Carcigenicate! –

1
a or b == 10 

在布爾表達式的情況下這將首先評估,如果是這樣的話整個表達式只是如此。如果它是假的,那麼它將評估b == 10。它不同於a == 10 or b == 10

或者,你只是說

if 10 in [a, b]: 

這也將做你想要完成的任務。