2022年6月26日 星期日

[fChart, Python] 以 fChart 馭 Python:迴圈結構(5/11)

以 fChart 馭 Python:

迴圈結構(5/11)

Line:ted2016.kpvs
Email:Lct4246@gmail.com
FBhttp://gg.gg/TedLeeFB/
Bloghttp://gg.gg/TedLeeBlog/

June 26, 2022
88x31.png[1]

接續著本 fChart 系列前文《以 fChart 馭 Python:練 fChart 了沒?(1/11)》(https://reurl.cc/oeDGN3),我們將針對圖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 :在無窮迴圈中設定跳離條件

沒有留言: