免費開始練習
普考申論題 114年 [資訊處理] 程式設計概要

第 二 題

📖 題組:
依據以下 Python 程式碼,回答下列問題: 1 def main(): 2 x = [] 3 for _ in range(3): 4 r = list(map(int, input().split())) 5 if len(r) != 3: 6 print("輸入不合法!") 7 return 8 x.append(r) 9 10 print("運算前資料:") 11 for r in x: 12 print("".join(f"{x:5d}" for x in r)) 13 14 sdm = sum(x[i][2 - i] for i in range(3)) 15 print(f"sdm: {sdm}") 16 17 y = [[0] * 3 for _ in range(3)] 18 for i in range(3): 19 for j in range(3): 20 y[j][2 - i] = x[i][j] 21 22 print("運算後資料:") 23 for r in y: 24 print("".join(f"{x:5d}" for x in r)) 25 26 for i, r in enumerate(y): 27 rs = sum(r) 28 ra = rs / len(r) 29 print(f"R{i}: rs= {rs}, ra= {ra}") 30 31 if __name__ == "__main__": 32 main()
📝 此題為申論題,共 7 小題

小題 (二)

10~12 行程式碼功能(3 分)

思路引導 VIP

看到此題,應先辨識變數 x 為前面讀入的 3x3 二維串列(陣列)。接著拆解第 12 行的語法,特別關注 f-string 的格式化 f"{x:5d}" 以及字串的 .join() 函數,這兩個動作決定了輸出的排版樣貌。

🤖
AI 詳解
AI 專屬家教

【破題】 這段程式碼的主要功能是「以固定寬度的整齊矩陣格式,印出運算前的二維陣列(串列)原始資料」。 【論述】

小題 (一)

2~8 行程式碼功能(4 分)

思路引導 VIP

解題時應逐行拆解程式邏輯:辨識變數初始化(x=[])、迴圈讀取輸入、型別轉換(map)、條件判斷(len(r)!=3)以及串列附加(append)。最後綜合上述步驟,點出其整體目的為「建立並驗證一個 3x3 的二維整數陣列」。

🤖
AI 詳解
AI 專屬家教

這段程式碼的功能為讀取並建立一個 3x3 的二維整數陣列(矩陣),同時具備輸入資料格式的防呆驗證。 具體運作流程包含: (1) 第 2 行初始化一個空串列 x,作為儲存二維陣列的容器。

小題 (三)

14~15 行程式碼功能(4 分)

思路引導 VIP

看到二維陣列(矩陣)搭配迴圈索引 in-1-i(此處為 2-i)的組合,應立刻聯想到矩陣的「副對角線」(反對角線)元素。接著確認 sum() 函數的作用,即可精準寫出該段程式碼的數學與邏輯意涵。

🤖
AI 詳解
AI 專屬家教

第 14~15 行程式碼的主要功能為:計算並輸出 3x3 二維陣列(矩陣)x 的副對角線(Secondary Diagonal / Anti-diagonal)元素總和。 詳細說明如下:

  1. 元素走訪:在 sum(x[i][2 - i] for i in range(3)) 中,隨著迴圈變數 i 依序為 0、1、2,程式會分別存取陣列中的 x[0][2](右上)、x[1][1](正中)、x[2][0](左下)三個位置,這正好構成矩陣的副對角線。

小題 (四)

17~20 行程式碼功能(4 分)

思路引導 VIP

解答這類二維陣列的索引變換題,建議先寫出一個簡單的 3x3 座標矩陣。透過代入幾個點(例如左上角 (0,0) 對應到 (0,2),左下角 (2,0) 對應到 (0,0)),就能直觀看出整體的幾何變換是順時針旋轉 90 度。

🤖
AI 詳解
AI 專屬家教

此段程式碼的功能為將 3x3 的二維陣列(矩陣)x 順時針旋轉 90 度,並將結果儲存至新的二維陣列 y。 詳細動作如下: (1) 第 17 行:利用串列生成式(List Comprehension)建立一個 3x3 且元素初始值皆為 0 的二維陣列 y 作為接收空間。

小題 (五)

22~24 行程式碼功能(3 分)

思路引導 VIP

看到迴圈與 print 函數,先判斷是進行資料輸出。接著分析 f"{x:5d}" 格式化字串的意義,即可推導出這段程式碼是用來整齊列印二維陣列(矩陣)。

🤖
AI 詳解
AI 專屬家教

這段程式碼的功能為:格式化輸出運算後的二維陣列(矩陣)y 的內容。 具體步驟與功能說明: (1) 第22行:在螢幕上印出提示字串「運算後資料:」。

小題 (六)

26~29 行程式碼功能(4 分)

思路引導 VIP

作答時先觀察迴圈變數與內建函式,enumerate 用於同時取得索引與元素。接著看出 sum(r) 是計算總和,rs / len(r) 是計算平均,最後結合 print 敘述即可精確歸納出整體功能為「計算並輸出矩陣各列的總和與平均」。

🤖
AI 詳解
AI 專屬家教

這段程式碼的功能為計算並輸出二維陣列(矩陣) y 每一列(row)的資料總和與平均值。 具體說明如下: (1) 第 26 行:利用 enumerate(y) 逐列走訪矩陣 y,取得列索引 i 與該列的一維陣列資料 r

小題 (七)

31~32 行程式碼功能(3 分)

思路引導 VIP

看到 if __name__ == "__main__":,應立刻聯想到 Python 的程式執行進入點(Entry point)機制。思考當腳本被直接執行與被當作模組匯入時,__name__ 內建變數的差異,並精確說明此機制如何控制 main() 函式的執行時機與防範副作用。

🤖
AI 詳解
AI 專屬家教

第 31~32 行程式碼為 Python 慣用的執行進入點(Entry point)判斷機制,其功能包含:(1) 判斷執行模式:當該程式檔案被「直接執行」時,系統會將內建變數 __name__ 設為 "__main__",此時條件成立並呼叫 main() 函式開始執行。(2) 防止匯入副作用:若該檔案是被其他程式作為模組「匯入 (import)」時,__name__ 會等於模組名稱,條件不成立,故不會自動執行 main()。 實務應用為使程式碼既能作為獨立腳本單獨執行,又能安全地提供函式供其他程式引用,避免匯入時產生預期外的執行結果,提升程式碼的重用性與模組化能力。