No Code AI(肉寇)AI自動化兩日精通|實體6小時+線上6小時
|

以 fChart 馭 Python:迴圈結構

   

作者:Ted Lee

接續著本 fChart 系列前文《以 fChart 馭 Python:練 fChart 了沒?》,我們將針對圖1 的「10 大項目之 4」的 26 個實例(可從此處下載),從原始問題描述到以流程圖表達解法,再對照流程圖寫出 Python 語法程式的過程詳細說明整個的問題解決(problem solving)過程。

圖 1:10 大項目之 4

原始問題

我們試圖把會安老師編排的範例一一還原到初始的問題形式來帶領讀者們思考:

問題 — 流程圖 —> 解法

一連串的問題解決奇幻之旅。筆者再次強調,「解決問題」是編程訓練的終極目的,而「流程圖」乃為邏輯表達之母(積木拼圖不是)。

前測

1. (for)01.前測_顯示5次大家好:說大家好五次。
2. (while)06.前測_遞減累加指定範圍的和:計算 i + (i – 1) + … + min 之和。

後測

18. 18.後測_顯示5次大家好:題目和前測的第 1 題相同。
26. 跳出迴圈_顯示1至5:顯示 5 次的計數。

迴圈(loops)的流程圖與其對應的 Python 語法

絕大部份程式語言支援的重複結構不外乎以下三種:

  1. 前測型:條件成立才會進入迴圈執行,也就是所謂的 while 迴圈(while loop)。
  2. 後測型:先執行迴圈區塊後才決定要不要繼續重複下去,例如:C 語言的 do while 或 其他語言的 repeat until。
  3. 固定次數型:1 和 2 這兩型通常用在重複的次數是根據條件決定,而不是固定的。所以,若事前已清楚要重複執行的次數,就使用本型來處理。也就是所謂的 for 迴圈(for loop)。

值得注意的是,1 可以完全模擬並取代 2 和 3。所以,後文只著墨在「未知迴圈執行次數使用 1;已知則使用 3」、只使用前測判斷。
強烈建議初學者以此規則學習,較容易理解與運用迴圈的技巧!
緊接著,我們再來細談「不定次數的 while 迴圈」和「固定次數的 for 迴圈」。

不固定次數的 while 迴圈

請觀察圖 2 和圖 3 上方流程圖中用紅框框選的結構,它們就是完全一模一樣。

所以,到底迴圈會執行只次要回到題目的需求來看。以圖 2 和 3 而言,它們都是要解 1 + 2 + 3 + … + 10 的和,很明顯的需要做十次累加的動作,因此,就用 for 迴圈吧。

其中,我們會用一個迴圈控制變數(counting variable)來計次。在未達到累計的目標時,就不斷地重複執行要重複的指令。一旦達標後迴圈的任務就宣告結束了。

Python 的 while 迴圈語法規則如下,初學者易犯的語法錯誤(syntax error)如注意事項 1 和 2,尤其是 1,年輕世代的朋友常常會把半形「:」打成全形「:」。

while (判斷條件):#注意 1:小寫的「 :」表下一行開始為迴圈區塊(block)

要重複執行的指令區塊 # 注意 2:區塊內皆需內縮 4 個空白(space),而且要一致對齊

圖 2:while 迴圈的流程圖與 Python 語法

 

固定次數的 for 迴圈

如前所述。Python 的for迴圈語法規則如下。請留意注意事項1中,迴圈控制變數i會從1跑到上限n,但在Python中要用「(n + 1)」來表達──不包括n+1。

for i in range(1, n + 1):#注意 1:小寫的「:」表下一行開始為迴圈區塊;i = 1~n

要重複執行的指令區塊 #注意 2:區塊內皆需內縮 4 個空白,而且要一致對齊

圖 3:for 迴圈的流程圖與 Python 語法

流程圖與 Python 語法對轉

1. 01.前測_顯示5次大家好:在 Code Editor 中一一將流程圖轉換到 Python 程式碼後以「01.前測_顯示5次大家好.py」存檔,我們就能看到如圖 4 所對應的執行結果。

圖 4:重複打招呼五次

2. 06.前測_遞減累加指定範圍的和:在 Code Editor 中一一將流程圖轉換到 Python 程式碼後以「06.前測_遞減累加指定範圍的和.py」存檔,我們就能看到如圖 5 所對應的執行結果。

圖 5:計算 i + (i – 1) + … + min 之和

後測
18. 後測_顯示5次大家好:如圖 6 所示,後測是先執行迴圈區塊一次後再判斷是否要繼續重複。而只要在進入前測之前先讓判斷條件滿足(a = 1),它的執行效果就和後測相同。

圖 6:後測和前測可互轉

26. 跳出迴圈_顯示1至5:因為 1 == 1 為恆真,造成程式陷入無窮迴圈(infinite loop),故設定 i > 5 為跳離的條件 。

圖 7 :在無窮迴圈中設定跳離條件

(作者為本刊專欄作家,本文同步表於作者部落格,原文連結;責任編輯:謝涵如)

Ted Lee

訂閱MakerPRO知識充電報

與40000位開發者一同掌握科技創新的技術資訊!

Author: Ted Lee

從工程師轉任中學教師,又為了捍衛教育理念,投身成為 STEAM 教育工作者,自稱「無可救藥的人文教育理想主義者」的李俊德(Ted Lee)。

Share This Post On
468 ad

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *