學生識開檔,但一問「為何用字典不用兩個列表」就靜了。這一堂用五個學生的分數檔,把鍵值查找、逐行讀檔與統計一次串起來,並用字數統計說明字典為何是查找的首選。
本堂目標 學生能夠:①把五行「姓名,分數」讀入字典,算出平均 66.4 分、最高 91 分(Cara)、最低 45 分;②計出及格率 80 百分比,並講出逐行讀檔時何時用 strip 與 split;③用字典做字頻統計,講出同一句六個字之中 to 與 be 各出現兩次,並解釋字典查找為何比逐個列表搜尋快。
01 先備知識(開課前 3 分鐘快檢)
以下任何一項未過關,本堂就會卡住,先補該項:
| 技能 |
快檢題 |
過關標準 |
| 基本輸入輸出 |
print 與 input 的分別是甚麼? |
一個輸出、一個等輸入 |
| 列表 |
列表用哪個括號? |
方括號,索引由零開始 |
| 迴圈 |
for 迴圈逐個取元素,用甚麼語句? |
for 變數 in 列表 |
02 課堂流程(45 分鐘)
| 時間 |
環節 |
導師做什麼 |
學生做什麼 |
| 0–5 分鐘 |
先備快檢 |
抽問三條先備題,把字典寫法寫在黑板上 |
口頭答,錯的抄一次 |
| 5–17 分鐘 |
第一幕:鍵值取代兩個列表 |
用五個姓名與分數建立字典,求平均 66.4 |
跟做一次,自己加一個學生 |
| 17–30 分鐘 |
第二幕:逐行讀檔 |
讀六行檔,跳過標題行,得 46 位元組 |
自己寫讀檔三行,印出每行 |
| 30–40 分鐘 |
第三幕:統計與例外 |
計及格率 80 百分比,處理檔案不存在 |
自己改成 try 版本 |
| 40–43 分鐘 |
一句總結 |
要學生講出字典在查找上的優勢 |
口頭答,導師只糾正用詞 |
| 43–45 分鐘 |
離場檢查 |
派三條問題,收回點錯處 |
獨立完成,不翻書 |
03 講解腳本(照著說就可以)
第一幕:第一幕:一個鍵換一個值,不用記位置
兩個平行列表要記住姓名在第幾個、分數在第幾個,一插入就全亂;字典用姓名做鍵,直接取分數。
5 個學生總分 332,平均 66.4;最高 Cara 的 91 分,最低 Dan 的 45 分,用 max 與 min 加 key 參數即可。
查找次數的分別:平行列表最壞要逐個比 5 次,字典平均 1 次,因為鍵會經雜湊直接定位。
一句記法:要按名字找東西,用字典;要按次序處理,用列表。
要求學生複述:字典靠鍵定位,不靠位置。
第二幕:第二幕:檔案是一行一行字串
open 之後,每一行都是字串,連換行符都仍在,所以先 strip 再 split。
六行檔案第一行是標題 name,mark,要跳過或用 next 讀走;剩 5 行資料,每行拆成姓名與分數兩格。
這個小檔案共 46 位元組,等於每行字數加一個換行符;檔案大小的算法在考卷常以位元組為單位問。
最重要一句:用 with open 開檔,離開區塊自動關檔,不會忘記 close。
要求學生複述:每行是字串、先 strip、用 with 開檔。
第三幕:第三幕:統計與出錯都是資料的一部分
及格線 50 分,用條件式數一數,5 人中有 4 人及格,即 80 百分比。
字頻統計同理:把句子 split 成 6 個字,逐個用 get 累加,to 與 be 各 2 次,其餘各 1 次,字典共 4 個鍵。
真實檔案會缺欄位或不是數字,所以要用 try 包住轉換,並在 except 記錄行號,而不是讓程式整個停。
答題要寫出「檢查、轉換、統計、輸出」四步,閱卷員看的是步驟而不是美觀。
要求學生複述:先檢查再轉換,錯的行要記錄不要靜靜跳過。
04 必教題型與步驟
| 題型 |
例子 |
步驟 |
答案 |
| 建立字典 |
5 個姓名與分數 |
逐對寫入,或由兩個列表 zip |
字典有 5 個鍵 |
| 逐行讀檔 |
六行文字檔,首行標題 |
with open、strip、split、跳標題 |
讀到 5 筆資料 |
| 統計計算 |
分數清單 |
sum 除個數得平均,條件計數得及格率 |
平均 66.4,及格率 80 百分比 |
| 例外處理 |
檔案不存在或欄位不是數字 |
try except 包住 open 與 int |
程式繼續,並印出行號 |
合理性檢查(一定要教):三個回讀:①平均 66.4 一定在最低 45 與最高 91 之間,超出就是加錯人;②及格率不可能大於一百,4 除 5 得 80 百分比;③字頻統計的鍵數 4 一定少於字數 6,若相等就代表每個字只出現一次或計法有誤。
05 獨立練習三題
| 題目 |
答案 |
想觀察什麼 |
| 五個分數 60、70、80、90、100,平均多少? |
80 |
看有無除錯個數 |
| 文字檔有七行,首行標題,資料有幾筆? |
6 筆 |
看有無跳過標題 |
| 字典查找為何比列表快? |
用鍵經雜湊直接定位,不用逐個比較 |
看有無講出鍵而不是位置 |
06 學生常見錯誤與糾正句
| 錯誤 |
學生通常這樣寫 |
導師這樣說 |
| 忘記 strip |
分數格變成 ’72\n’,int 轉換失敗 |
每行先 strip 再 split,換行符不是資料。 |
| 列表與字典混淆 |
用索引取姓名,插入一筆就全錯位 |
要用名字找,就用字典做鍵。 |
| 平均除錯個數 |
總分 332 除 6 得 55.3 |
資料只有 5 筆,標題行不是學生。 |
| 例外當成錯誤 |
程式一遇壞行就停 |
用 try except 記錄行號,其餘繼續處理。 |
07 家課建議(直接指到練習卷題號)
08 離場檢查(最後 5 分鐘)
| 題目 |
答案 |
判定 |
| 5 個學生的總分是 332,平均多少 |
66.4 分 |
錯:除以 6 |
| 讀檔時為何要先 strip |
去掉行尾換行符,否則轉數字失敗 |
錯:答成為了美觀 |
| 字典查找靠甚麼定位 |
鍵,經雜湊直接找 |
錯:答成靠索引次序 |
09 導師常問
這一章適合哪一年級?
中四 ICT 程式部分,中五重溫選修單元時可作起點。
45 分鐘夠不夠講讀檔與例外?
夠,因為兩者用同一個小檔案示範,只寫一次完整程式。
有無配套練習?
本章練習三題,答案在頁內;家課接 Python 程式設計入門那章。
立即免費搵導師導師登記 →
本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。