第 二 題
依據以下 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()
小題 (二)
思路引導 VIP
看到此題,應先辨識變數 x 為前面讀入的 3x3 二維串列(陣列)。接著拆解第 12 行的語法,特別關注 f-string 的格式化 f"{x:5d}" 以及字串的 .join() 函數,這兩個動作決定了輸出的排版樣貌。
小題 (一)
思路引導 VIP
解題時應逐行拆解程式邏輯:辨識變數初始化(x=[])、迴圈讀取輸入、型別轉換(map)、條件判斷(len(r)!=3)以及串列附加(append)。最後綜合上述步驟,點出其整體目的為「建立並驗證一個 3x3 的二維整數陣列」。
小題 (三)
思路引導 VIP
看到二維陣列(矩陣)搭配迴圈索引 i 與 n-1-i(此處為 2-i)的組合,應立刻聯想到矩陣的「副對角線」(反對角線)元素。接著確認 sum() 函數的作用,即可精準寫出該段程式碼的數學與邏輯意涵。
小題 (四)
思路引導 VIP
解答這類二維陣列的索引變換題,建議先寫出一個簡單的 3x3 座標矩陣。透過代入幾個點(例如左上角 (0,0) 對應到 (0,2),左下角 (2,0) 對應到 (0,0)),就能直觀看出整體的幾何變換是順時針旋轉 90 度。
小題 (五)
思路引導 VIP
看到迴圈與 print 函數,先判斷是進行資料輸出。接著分析 f"{x:5d}" 格式化字串的意義,即可推導出這段程式碼是用來整齊列印二維陣列(矩陣)。
小題 (六)
思路引導 VIP
作答時先觀察迴圈變數與內建函式,enumerate 用於同時取得索引與元素。接著看出 sum(r) 是計算總和,rs / len(r) 是計算平均,最後結合 print 敘述即可精確歸納出整體功能為「計算並輸出矩陣各列的總和與平均」。
小題 (七)
思路引導 VIP
看到 if __name__ == "__main__":,應立刻聯想到 Python 的程式執行進入點(Entry point)機制。思考當腳本被直接執行與被當作模組匯入時,__name__ 內建變數的差異,並精確說明此機制如何控制 main() 函式的執行時機與防範副作用。