2014-04-27 34 views
-1
grid = 0 

if grid == 0: 
    grid == 1 
    print("grid 0") 

elif grid == 1: 
    print("grid 1") 
    grid == 2 

當首先if語句爲true時,第二個語句也會變爲true。 是否有聲明,跳過整個if結構,否則我將不得不拆分if函數,這將使if語句加倍。Python會留下多個if語句

+2

結構*是*跳過;只有一個測試將被挑選。 –

+0

什麼?無論條件是否成立,'elif'只會在'if'不成立的情況下運行。你真的試過這段代碼嗎? –

+0

我很抱歉代碼的質量不好,但這種行爲真的會覆蓋下一條if語句,否則我不會要求它。我試圖複製它與這個簡單的片段,但它不起作用。 – user1767754

回答

0

第二條語句將被忽略,因爲如果使用了elif而不是第二條語句。

1

首先,grid == 1不是更改值grid;它只是將它與1進行比較,獲得一個布爾值,然後立即拋棄它,而不使用它。要更改變量的值,需要使用賦值運算符=(與等號比較運算符==相反):例如grid = 1

此外,使用更多if -s它沒有什麼不好。事實上,我建議在嘗試「優化」它或使其更緊湊之前,首先儘可能以簡單和直接的邏輯工作。

另外,我想說修改一個變量的值,而您正在使用鏈條if-elif-else測試該變量的過程時,被認爲是不好的樣式,因爲它會讓您的代碼更加複雜且難以推理(對於自己和其他人)。

在任何情況下,如果第一個if「失敗」,任何後續elif旨意甚至不看,所以基本上你不得不在這種情況下,無論如何使用多個if秒。


作爲獎勵,讓你靈感(甚至開始閱讀像http://learnpythonthehardway.org),這裏是如何===的演示也可以一起使用:

# set `is_wet` to `True` if `precipitation` is "raining", otherwise `False 
is_wet = (precipitation == "raining") 
0
if condition_a: 
    statement_a 
elif condition_b: 
    statement_b: 
else: 
    default_statement 

只有其中一個條件將會激活。在的情況下:

if i > 1: 
    do_stuff 
elif i > 1000: 
    do_bigger_stuff 

如果i==2000,只有第一個語句將執行(do_stuff,不do_bigger_stuff

要知道在您的例子grid == 1不會將grid1,它只會評價False :)