和35歲劉阿姨一塊兒自測 Python 流程控制基本功

0、忽然降臨的困惑

流程控制語句、布爾值、布爾值操做符都屬於 python 的基礎功。大好週末我寫這篇筆記,不是爲了整理這些基礎知識點,而是記錄幾個令我忽然迷惑的代碼段。——代碼自己很簡單,但即使已經掌握了基礎功,陡然看到其中某個代碼段,編程初學者仍是容易困惑!python

你,要不要隨我一塊兒讀徹底文,檢查下本身是否緊緊掌握了 python 的流程控制語句?如今開始吧。編程

一、流程控制語句之 if 分支控制

1.1 開胃小菜:幾段簡單的代碼

運行下面代碼段,將打印什麼呢?學習

代碼段 A測試

if 1 + 2 == 3 :
    print('1')
else:
    print('2')

代碼段 Bcode

if 1 + 3 == 3 :
    print('1')
else:
    print('2')

上述 python 代碼簡單,且寫法都很常見。A 的結果是 1B 的結果是 2。你答對了吧?class

1.2 見證奇蹟:抽象一下

接下來見證奇蹟的時刻……再抽象一下,把上述語句中的布爾值的算式改爲布爾值。下面兩段運行代碼後,將打印什麼呢?基礎

代碼段 C循環

if True:
    print('1')
else:
    print('2')

代碼段 D語法

if False:
    print('1')
else:
    print('2')

你是堅決果斷、脫口而出的說出正確答案的嗎?C 的結果是 1D 的結果是2。此次你依然都答對了嗎?總結

1.3 原則:多理解,少死記硬背

個人真實狀況是,前兩天作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 這個分支控制,還有 whilefor 兩個循環控制,在循環控制語句中,會有怎樣的規律呢?

打鐵要趁熱,不能停,咱們繼續檢查本身的基礎功是否牢靠,而後梳理一下吧!——認知心理學有個結論是,知識點之間的聯想對照,具有很是好的學習效果。

二、流程控制語句之 while 與 for 循環控制

2.1 上菜:讀代碼,自測基礎功

代碼段 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

2.2 整理總結:基於理解,整理加深印象

結合以前用《自學是門手藝》學 python 基礎功的印象,——若是印象很淡,說明本身的複習間隔過久,最好能調整下使之符合記憶曲線;整理時,最好當即翻到書中對應章節複習;再結合前面自測代碼,有多種代碼實現,如今我能夠試着總結:

  • forwhile 循環控制語句中,else 並不是必備部分。
  • while 的循環體,僅在條件爲 True 時觸發,條件一直爲 True 就一直執行;條件爲 False 或條件變成 False 時該部分才執行完畢。
  • for 的循環體,條件部分一般用於控制循環的次數或範圍,並不能使用布爾值。
  • 循環控制語句有時包含else 部分,該 else 屬於 while 整個循環控制的一部分。一般,else是當循環部分執行完畢後才觸發。例外狀況是,若是循環部分包含 break 語句並被觸發,將跳出整個循環控制,即不執行 else 部分的代碼。

3. 簡短總結

對我我的而言,forwhile 循環控制語句,自測與複習都很輕鬆,暫時沒有發現什麼疑慮。最初令我迷惑的分支控制語句: if False 的條件爲False,不爲真,故該分支將不被執行。——若是流程控制語句中包含布爾運算,那麼僅在條件爲真時才觸發對應語句塊。

你和我一塊兒讀到這裏,是否檢測到本身哪些地方存有困惑?若有,不妨參考個人作法,試試代碼的不一樣寫法,當即運行它,發現和總結規律吧!最後劉阿姨再叮囑兩句:多理解,少死記硬背,遵循記憶曲線,及時複習,用概括整理的方式鞏固加深影響喲~

相關文章
相關標籤/搜索