2014-02-16 82 views
0

可以請你給我爲什麼這個代碼解釋:多,如果條件

if (x and y) and z > 0: 
    return True 

是不一樣的:

if (x and y) > 0 < z: 
    return True 

基本上,爲什麼不能我連鎖幾個變量,如:

if var1 and var2 and var3 and var4 > 0: 
    do_this 

我在做什麼錯?

- 編輯 - 我想我只是想知道我怎麼能縮短條件不寫:

if var1 > 0 and var2 > 0 and var3 > 0 

特別是如果條件是一個漫長的,如:

if var1 > (pow(x, 3)/2.5*pow(y,0.5)+x*y) 

如果不可能重寫每個變量的條件,想象一下如果我有10個變量。 還是有沒有更好的方式,我沒有看到這可以用於這樣的情況?感謝您的回答!

回答

5

這不是做你想象一下:

if (x and y) > 0 < z: return True 

上述求值(x and y)第一,如果兩者都truthy然後y返回,所以現在我們有:

if y > 0 < z: return True 

是哪個相同:

if y > 0 and 0 < z 

顯然,上面的不一樣其他表達式:

if (x and y) and z > 0: return True 
if y and z > 0: 
if z > 0: 

底線:(x and y) > 0絕對不是做你想象!你的意思是必須這樣寫:

if x > 0 and y > 0 and z > 0: return True 
+0

感謝您的解釋!有什麼方法可以縮短表情嗎?不重寫x> 0和y> 0且z> 0?所以它會檢查每個列出的變量是否> 0? – metabuddy

+0

@metacore沒有一個用於一次比較多個值的通用解決方案。特別是對於這種情況,我答案的最後一行中的表達式是表達條件的最簡單方式 –