2022年10月31日 星期一

[fChart, Python, 資料結構] 以 fChart 馭 Python:陣列(array)(9/11)

 以 fChart 馭 Python:

陣列(array)


Oct. 31, 2022
[1]

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

圖 1:10 大項目之 8

陣列使用三部曲

陣列是什麼?如果我們用「鞋盒」來比擬「變數」,那麼數十雙的鞋子就得準備數十個鞋盒來放置鞋子,這時就有添加「鞋櫃」的必要了──陣列就像這個放鞋子的鞋櫃,它特別適合拿來儲存大量的資料以待後續處理。在圖 2 的邏輯示意圖中,我們建立了一個叫 list 的陣列,list 中的位置從 0 開始往下遞增一號。而每個位置中儲存的資料稱之為元素(element)

圖 2:陣列的邏輯圖示

程式設計中為什麼要使用陣列 [2]?我們以當紅炸子機人工智慧 AI 的影像處理(image processing)技術來說明要將一張張高解析度照片載入(load)到 CPU P 圖之前,需事前先將存放在大容量外部儲存媒體(external storage)中的原始圖片檔載入到記憶體(memory)內。因此,P 圖程式才能將這些影像資料透過數學計算處理。也就是說,在開始處理相片的像素(pixel)內含(https://reurl.cc/91EgvV)之前,程式中需要有一個對應的機制來暫時存放這些待運算的影像資料。而對比於數學矩陣的陣列結構就正好符於所需了(圖 1)。

 
圖 1:照片內部的像素資料

陣列使用有三個基本動作,我們將之稱為陣列使用的三部曲(本文使用「Code Editor」來介紹  Python 中陣列的使用語法)。詳細分述如下:
  1. 建立(create):依照圖 3 的選項操作建立一個名叫 list 的陣列,它的初始內容是空的(第 1 行)。註:第 2-3 行指定它的初始值。
    Python 語法:陣列名稱 = [初值 1, 初值 2, ...]
  2. :依照圖 4 的選項操作,在第 3 和 5 行,使用指定運算子(operator) = 在 list 的編號 1 和 2 位置存入新值 10 和字串 Joe Chen。
    Python 語法:陣列名稱[位置] = 指定值
  3. :取出 list 陣列中位置 0、1 和倒數第 1 和 2 個元素內容。
    Python 語法:陣列名稱[位置]

圖 3:建立陣列

圖 4:將元素存至陣列

圖 5:取用陣列元素

原始問題

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

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

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

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

1. 08-01.輸入與顯示一維陣列元素:將由鍵盤輸入的三個數字儲存至陣列後印出其內容
2. 08-
02.更改與取出陣列元素值:存取陣列中的元素
3. 08-03.在運算式中使用陣列元素:使用陣列完成溫度度量轉換計算。以變數實現的版本請參考拙著《以 fChart 馭 Python:運算子與運算式(https://reurl.cc/EXn8r1)》

流程圖與 Python 語法對轉

1. 08-01.輸入與顯示一維陣列元素:根據流程圖將 Python 程式轉換妥後以「08-01.輸入與顯示一維陣列元素」存檔執行後就能看到如圖 6 所對應的執行結果。

圖 6:將鍵盤輸入的值存到陣列中後印出其內容

2. 08-02.更改與取出陣列元素值根據流程圖將 Python 程式轉換妥後以「08-02.更改與取出陣列元素值.py」存檔執行後就能看到如圖 7 所對應的執行結果。

圖 7:存取陣列元素

3. 08-03.在運算式中使用陣列元素根據流程圖將 Python 程式轉換妥後以「08-03.在運算式中使用陣列元素.py」存檔執行後就能看到如圖 6 所對應的執行結果。


圖 8:使用陣列來實現溫度度量單位轉換