2022年8月13日 星期六

[fChart, Python] 以 fChart 馭 Python:巢狀迴圈(7/11)

 以 fChart 馭 Python:

巢狀迴圈(7/11)

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

Aug. 13, 2022
[1]

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

圖 1:10 大項目之 6

原始問題

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

問題 --- 流程圖 ---> 解法

一連串的問題解決奇幻之旅。筆者再次強調,

「解決問題」是編程訓練的終極目的,而「流程圖」乃為邏輯表達之母(積木拼圖湊答案不是)。

1. 01.使用巢狀迴圈顯示值:發講義給三桌,每桌有五個人──也可以想像成分針每走 60 格(60 分)後時針才走 1 格(1 小時)。
2. 02.九九乘法表:印出一整張完整的九九乘法表。註:十十乘法表的概念在 108 新課綱是排在國小數學低年級階段教授(https://reurl.cc/2D8q2X) 
3. 03.數字三角形:輸出一個以有序數列(sequence)填滿的直角三角形(right triangle)註:數列直角三角形的概念在 108 新課綱是排在國中數學階段教授(https://reurl.cc/2D8q2X) 。
4. 04.數字倒三角形輸出一個以有序數列填滿的倒直角三角形註:數列和直角三角形的概念在 108 新課綱是排在國中數學階段教授(https://reurl.cc/2D8q2X) 。
5. 05.星號正三角形輸出一個以 * 填滿的正三角形(equilateral triangle)註:正三角形的概念在 108 新課綱是排在國中數學階段教授(https://reurl.cc/2D8q2X) 。

流程圖與 Python 語法對轉

1. 01.使用巢狀迴圈顯示值用迴圈控制變數 i 來控制外層(outer)迴圈從 1、2 一直跑到 3,而每個 i 值切換前,用迴圈控制變數 j 來控制內層(inner)

迴圈從 1、2 一直跑到 5。這兩層完整圖示整理於圖 2。因此,兩層的迴圈共執行 i × j = 3 × 5 = 15 次。

圖 2:i 與 j 的變化情形

將 Python 程式轉換妥後以「06-01.使用巢狀迴圈顯示值.py」存檔執行後就能看到如圖 3 所對應的執行結果。

圖 3:兩層迴圈套疊

2. 02.九九乘法表:觀察下列九九乘法的輸出結果,紅字用 i 來控制,它會從 1 跑到 9。在每個 i 時,讓 j 也從 1 跑到 9。概念上是每次固定一個 i 值,然後把 j 掃一遍即為所得。

1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9

2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18

3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27

4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36

5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45

6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54

7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63

8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72

9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81


將 Python 程式轉換妥後以「06-02.九九乘法表.py」存檔執行後就能看到如圖 4 所對應的執行結果。

圖 4:印出九九乘法表

3. 03.數字三角形:i 由上到下,每次固定一個值時,讓 j 由左到右掃一次
將 Python 程式轉換妥後以「06-03.數字三角形.py」存檔執行後就能看到如圖 5 所對應的執行結果。


圖 5:以有序數列填滿的直角三角形

4. 04.數字倒三角形i 由上到下,每次固定一個值時,讓 j 由左到右掃一次。
將 Python 程式轉換妥後以「06-04.數字倒三角形.py」存檔執行後就能看到如圖 6 所對應的執行結果。


圖 6:以有序數列填滿的倒直角三角形

5. 05.星號正三角形:因為輸出的圖形為對稱,所以在圖 7 中我們只考慮左半邊(右半以淺色 * 表示)。
i 的控制仍是由上到下掃瞄,但 j 改成由右到左掃瞄
觀察圖 7 中左半深色 * 出現的位置:
  • i = 1, j = 9 時畫 1 顆 *
  • i = 2, j = 8 時畫 3 顆 *
  • i = 3, j = 7 時畫 5 顆 *

從以上的觀察,我們可以再套一層迴圈,用變數 k 來控制,k = 1, 3, 5, 7, ..., 17

圖 7:問題解析

將 Python 程式轉換妥後以「06-05.星號正三角形.py」存檔執行後就能看到如圖 8 所對應的執行結果。

圖 8:以 * 填滿一正三角形

沒有留言: