流程控制語句、布爾值、布爾值操做符都屬於 python
的基礎功。大好週末我寫這篇筆記,不是爲了整理這些基礎知識點,而是記錄幾個令我忽然迷惑的代碼段。——代碼自己很簡單,但即使已經掌握了基礎功,陡然看到其中某個代碼段,編程初學者仍是容易困惑!python
你,要不要隨我一塊兒讀徹底文,檢查下本身是否緊緊掌握了 python
的流程控制語句?如今開始吧。編程
運行下面代碼段,將打印什麼呢?學習
代碼段 A測試
if 1 + 2 == 3 :
print('1')
else:
print('2')
複製代碼
代碼段 Bspa
if 1 + 3 == 3 :
print('1')
else:
print('2')
複製代碼
上述 python
代碼簡單,且寫法都很常見。A
的結果是 1
,B
的結果是 2
。你答對了吧?code
接下來見證奇蹟的時刻……再抽象一下,把上述語句中的布爾值的算式改爲布爾值。下面兩段運行代碼後,將打印什麼呢?string
代碼段 Cclass
if True:
print('1')
else:
print('2')
複製代碼
代碼段 D基礎
if False:
print('1')
else:
print('2')
複製代碼
你是堅決果斷、脫口而出的說出正確答案的嗎?C
的結果是 1
,D
的結果是2
。此次你依然都答對了嗎?循環
個人真實狀況是,前兩天作xue.cn的答題挑戰時,看到代碼段 D
這種代碼,忽然思惟打結。你會不會也遇到過明明早就掌握,但忽然對某個知識點又理解無能的返祖狀況?
我知道這是常見現象,因此沒有焦慮感。我苦思冥想,嘗試用理解而非死記硬背來完全掌握這個知識點。
我是這樣理解的。代碼段 D
首個分支是 False
,其它分支被放到 else
,其它分支至關於首個分支的補集,即 not False
也就是 True
,因而代碼段 D
等同於:
代碼段 E
if False:
print('1')
elif True:
print('2')
複製代碼
如法炮製,代碼段 C
等同於:
代碼段 F
if True:
print('1')
elif False:
print('2')
複製代碼
從中可發現: if
分支控制語句,只會觸發 條件爲 True
的那個分支,條件爲 False
的語句不會觸發。
原本,這篇筆記整理到這裏彷佛也能收尾。但我當即聯想到:流程控制語句,除了 if
這個分支控制,還有 while
和 for
兩個循環控制,在循環控制語句中,會有怎樣的規律呢?
打鐵要趁熱,不能停,咱們繼續檢查本身的基礎功是否牢靠,而後梳理一下吧!——認知心理學有個結論是,知識點之間的聯想對照,具有很是好的學習效果。
代碼段 G:
while False:
print('1')
break # 測試代碼,加這句是爲了用於跳出循環,避免無限循環
else:
print('2')
複製代碼
代碼段 H:
while True:
print('1')
break # 測試代碼,加這句是爲了用於跳出循環,避免無限循環
else:
print('2')
複製代碼
代碼段 I:
a = 1
while a < 4:
print(a)
a = a + 1
else:
print('haha')
複製代碼
代碼段 G
的結果爲 2
,代碼段 H
的結果爲 1
。代碼段 I
的結果爲 1 2 3 haha
。
如今再看看 for
循環。
代碼段 J:
for True:
print(‘1’)
else:
print('2')
複製代碼
代碼段 K:
for i in range(4):
print(i)
else:
print('aha')
複製代碼
代碼段 J
將報錯,提示語法錯誤。代碼段 K
結果爲 0 1 2 3 aha
結合以前用《自學是門手藝》學 python 基礎功的印象,——若是印象很淡,說明本身的複習間隔過久,最好能調整下使之符合記憶曲線;整理時,最好當即翻到書中對應章節複習;再結合前面自測代碼,有多種代碼實現,如今我能夠試着總結:
for
和 while
循環控制語句中,else
並不是必備部分。while
的循環體,僅在條件爲 True
時觸發,條件一直爲 True
就一直執行;條件爲 False
或條件變成 False
時該部分才執行完畢。for
的循環體,條件部分一般用於控制循環的次數或範圍,並不能使用布爾值。else
部分,該 else
屬於 while
整個循環控制的一部分。一般,else
是當循環部分執行完畢後才觸發。例外狀況是,若是循環部分包含 break
語句並被觸發,將跳出整個循環控制,即不執行 else
部分的代碼。對我我的而言,for
和 while
循環控制語句,自測與複習都很輕鬆,暫時沒有發現什麼疑慮。最初令我迷惑的分支控制語句: if False
的條件爲False
,不爲真,故該分支將不被執行。——若是流程控制語句中包含布爾運算,那麼僅在條件爲真時才觸發對應語句塊。
你和我一塊兒讀到這裏,是否檢測到本身哪些地方存有困惑?若有,不妨參考個人作法,試試代碼的不一樣寫法,當即運行它,發現和總結規律吧!最後劉阿姨再叮囑兩句:多理解,少死記硬背,遵循記憶曲線,及時複習,用概括整理的方式鞏固加深影響喲~