2022年9月11日 星期日

[fChart, Python] 以 fChart 馭 Python:函數(functions)(8/11)

以 fChart 馭 Python:
函數(functions)(8/11)


Sep. 11, 2022
[1]

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

圖 1:10 大項目之 7

在 fChart 中使用函數(functions)

我們以攝氏轉華氏的「溫度轉換」問題(https://reurl.cc/NR2xZx)來說明如何在 fChart 中使用 [2] 函數。
首先,我們先回顧未使用函數解溫度轉換問題的流程圖(圖 2),設定好參數值後直接代入公式計算。

圖 2:未使用函數解溫度轉換問題

然後,我們再比較使用函數來解此問題的兩大步驟。在圖 3(a) 的主程式(main program)中(07-03.呼叫溫度轉換函數.fpp),直接用這個黑盒子把溫度轉換的方式包起來。所以,整個程式的邏輯就變的精簡扼要(concise)了:輸入要轉換的攝氏溫度值 C 給溫度轉換函數 c2f()(溫度轉換函數.fpp),圖 3(b) 。該函數會自動和圖 2 一樣,自動套用攝氏轉華氏的轉換公式。最後,將轉好的對應華氏溫度印出。

(a) 函數呼叫主程式
 
(b) 函數定義 c2f()
圖 3:使用函數解溫度轉換問題


圖 3(a) 對應的 Python 函數呼叫語法為:
c2f(參數)
另一方面,圖 3(b) 對應的 Python 函數定義語法如下。讀者們要特別留意,第二行的 F... 和 第三行的 r... 均要按四個空白鍵(space)和第一行的 c... 對齊。這個方式稱為縮排(identation),表示 : 後以下各行的指令是包在 c2f() 中而形一個函數定義的獨立區塊(blocks)。此外,# 符號後頭的文字皆為程式註解(comments),不用輸入。
def c2f(參數):   #自訂函數 c2f()    
      F = 溫度轉換公式計算
      return F   #傳回轉換後的溫度值
註:函數的 fChart 流程圖繪製方式請有興趣的讀者們自行觀看陳會安老師錄製的這段影片(https://reurl.cc/2maQrX)

原始問題

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

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

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

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

1. 03.呼叫溫度轉換函數:將攝氏溫度轉換成對應的華氏溫度註:「溫標」的概念在 108 新課綱是排在國中理化階段教授(https://reurl.cc/O46Ovr) 。
2. 07-01.呼叫Triangle:印出一數字排列的直角三角形
3. 07-02.呼叫BMI函數:計算 BMI 指數(https://reurl.cc/KQEO9M) 健康指數
4. 07-04.呼叫階層函數Factorial:計算 n! = 1 × 2 × 3 × ...  × (n-1) × n 的結果(整數連乘積)
5. 07-05.呼叫printMsg和sum2Ten函數:定義一個訊息輸出與連續累加求和函數
6. 07-06.呼叫和顯示BMI值:承 2 和 5,留給讀者們自行練習

流程圖與 Python 語法對轉

1. 07-03.呼叫溫度轉換函數:如前述,將 Python 程式轉換妥後以「07-03.呼叫溫度轉換函數.py」存檔執行後就能看到如圖 4 所對應的執行結果。

圖 4:溫度轉換函數

2. 07-01.呼叫Triangle:請讀者們自行和 https://reurl.cc/kE98kn 的未函數化版本對照。
將 Python 程式轉換妥後以「07-01.呼叫Triangle.py」存檔執行後就能看到如圖 5 所對應的執行結果。

圖 5:數字直角三角形排列函數

3. 07-02.呼叫BMI函數:請讀者們自行和 https://reurl.cc/kE98kn 的未函數化版本對照。
將 Python 程式轉換妥後以「07-02.呼叫BMI函數.py」存檔執行後就能看到如圖 6 所對應的執行結果。


圖 6:BMI 計算函數

4. 07-04.呼叫階層函數Factorial:和累加求和的概念相同,從下列推理過程我們可輕鬆的規納出只要使用一個固定數的迴圈,再建立一個乘積累計變數去累計歷次的乘積結果即為所求。

1! = 1
2! = 1 × 2 = 1! × 2 
3! = 1 × 2 × 3= 2! × 3
n! = (n-1)! × n

將 Python 程式轉換妥後以「07-04.呼叫階層函數Factorial.py」存檔執行後就能看到如圖 7 所對應的執行結果。


圖 7:階層計算函數

5. 07-05.呼叫printMsg和sum2Ten函數請讀者們自行和 https://reurl.cc/jGabAM 的未函數化的連續累計求和版本對照。
將 Python 程式轉換妥後以「07-05.呼叫printMsg和sum2Ten函數.py」存檔執行後就能看到如圖 8 所對應的執行結果。

圖 8:訊息輸出與連加求和函數


6. 07-06.呼叫和顯示BMI值承 2 和 5,留給讀者們自行練習。
  1. 六種授權條款
  2. 定義(define)呼叫(call)

沒有留言: