2022年7月20日 星期三

[fChart, Python] 以 fChart 馭 Python:迴圈和條件(6/11)

以 fChart 馭 Python:

迴圈和條件(6/11)

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

July 20, 2022
[1]

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

圖 1:10 大項目之 5

原始問題

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

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

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

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

1. 01.猜數字遊戲:人和電腦玩。玩家輸入一數字來猜電腦的底牌,兩者相同就猜中答案;否則就繼續猜到中為止
2. 02.因數分解:計算正整數的所有因數(factor)。註:因數的概念在 108 新課綱是排在國小數學高年級階段教授(https://reurl.cc/2D8q2X) 。
3. 03.質數判斷計算某一正整數是否為質數註:質數(prime)的概念在 108 新課綱是排在國小數學高年級階段教授(https://reurl.cc/2D8q2X) 。
4. 04.開根號計算某一正整數平方根(square root)註:根號根式的概念在 108 新課綱是排在國中數學階段教授(https://reurl.cc/2D8q2X) 。

流程圖與 Python 語法對轉

1. 01.猜數字遊戲:電腦先隨機產生底牌 target,再由鍵盤輸入要猜的數字 guess。如果底牌大,則顯示數字太大;如果底牌小,則顯示數字太小;如果底牌和猜的數字一樣,則顯示猜中數字。其中,因為此遊戲可以重複玩,所以,我們將要判斷大小的程式碼置於 while 迴圈中。而此迴圈使用「旗標(flag)」技巧,只會在玩家猜中電腦底牌時舉旗(True),致使迴圈跳出,讓遊戲結束。
將 Python 程式轉換妥後以「01.猜數字遊戲.py」存檔執行後就能看到如圖 1 所對應的執行結果。

圖 1:猜數字、比大小

2. 02.因數分解:根據數學定義,若正整數 b 可以被正整數 a 整除(餘數為零),則 a 是 b 的因數。因此,我們很容易用暴力法(brute force)來思考:給一整數 n,從 1, 2, ..., n 全部掃一遍,如果能將 n 整除者即為 n 的因數。
將 Python 程式轉換妥後以「02.因數分解.py」存檔執行後就能看到如圖 2 所對應的執行結果。


圖 2:求正整數 n 的所有因數

3. 03.質數判斷:根據數學定義,質數為 1 及 本身為其因數的正整數。因此,我們很容易用暴力法來思考:給一整數 n,從 1, 2, ..., n 全部掃一遍,如果 2~(n - 1) 中沒有任何一數可以整除 n 者,n 即為質數。
將 Python 程式轉換妥後以「03.質數判斷.py」存檔執行後就能看到如圖 3 所對應的執行結果。


圖 3:判斷 n 是否為質數

4. 04.開根號:本問題需採用數值方法(numeric method)去逼近答案,有興趣研究其演算方法的讀者請自行參考 https://reurl.cc/M0YgGk
將 Python 程式轉換妥後以「04.開根號.py」存檔執行後就能看到如圖 4 所對應的執行結果。


圖 4:以數值方法計算平方根

沒有留言: