學生寫得出 for i in range(5),但一問「迴圈執行完之後 i 是多少」就靠猜。問題不在語法,而在他們從來沒有把執行過程寫下來。這一堂只做一件事:把追蹤表變成每次答題的第一步,讓迴圈由「背寫法」變成「看得見的流程」。
本堂目標 學生能夠:① 由 range 的三個參數講出迴圈的起始值、終止條件與執行次數;② 用追蹤表逐行記錄變數值,答出迴圈結束後每個變數的結果;③ 分辨 for 與 while 的使用時機,並寫出 while 的退出條件與最少一次的邊界測試。
01 先備知識(開課前 3 分鐘快檢)
以下任何一項未過關,本堂就會卡住,先補該項:
| 技能 |
快檢題 |
過關標準 |
| 變數與賦值 |
執行 x = 3 之後再 x = x + 2,x 是多少 |
5,賦值是覆蓋不是累加 |
| 比較運算 |
10 % 3 和 10 // 3 各是多少 |
1 與 3,一個取餘一個取整 |
| 縮排概念 |
Python 靠什麼界定哪幾行屬於迴圈 |
縮排層級,不是大括號 |
02 課堂流程(60 分鐘)
| 時間 |
環節 |
導師做什麼 |
學生做什麼 |
| 0–6 分 |
開場三問 |
給一個三行迴圈,問它印幾次、最後 i 是多少 |
先寫下答案,稍後對照 |
| 6–18 分 |
range 三段 |
start、stop、step 逐個改,學生報次數 |
口頭報次數再寫程式 |
| 18–32 分 |
追蹤表 |
示範逐行記錄 i、total、條件 |
同一段程式自己填一張表 |
| 32–44 分 |
while 與退出條件 |
把同一件事改成 while,示範條件何時變假 |
改寫並補一次邊界測試 |
| 44–56 分 |
真題三類 |
輸出題、填空題、除錯題各走一次 |
獨立做一題並自評 |
| 56–60 分 |
離場檢查 |
兩題收回即批,錯的標明跌在邊界還是狀態 |
獨立完成 |
03 講解腳本(照著說就可以)
第一幕:range 不是「做幾次」,是「由邊界行到邊界」
學生把 range(5) 讀成「做五次」,於是 range(1, 5) 也讀成五次;一改 step 就全錯。正確講法是三段:起點、終點(不含)、步長。黑板上寫 range(a, b, s),要求學生每次先講「由 a 開始,a + s 一路加,加到不小於 b 為止」,然後才數次數。再給三個對照:range(1, 6) 與 range(6) 輸出相同但邊界不同;range(5, 0, -1) 是倒數;range(0, 10, 3) 只行四次。次數一律用 (b – a + s – 1) // s 算,學生自己用算術核對,不靠感覺。
要學生做:把三個 range 的起點、終點、步長、次數寫成四格表,再跑一次核對。
第二幕:追蹤表:一行程式一行記錄,不許跳行
答「迴圈跑完 total 是多少」這類題,學生多數在腦裡跑,跑到第三圈就亂。做法固定成三欄:行號、這行之後各變數的值、判斷結果。示範時導師只讀程式碼、不講結果,由學生填表;填完才對答案。凡有 if 在迴圈內,條件成立與否都要寫入該行,因為漏寫條件就等於漏了一次分支。追蹤表另一個作用是把「印幾次」變成可數:表的行數就是輸出次數,學生不用再猜。
要學生做:為 total = 0 之後 for i in range(1, 6): total = total + i 填一張六行表,並寫出最後 total。
第三幕:while:先寫退出條件,再寫內容
while 的錯誤九成不是語法而是「永遠真」。教法是倒過來寫:先在紙上寫「我幾時要停」,寫成一個可測試的條件,再寫迴圈內容,最後才寫更新語句。更新語句必須在圈內而且會令條件趋向假,這一句要學生口頭指出來。之後補兩個邊界測試:條件一開始就假(執行零次)、條件第一次真(執行一次)。零次那一題最多人錯,因為他們假設迴圈至少行一次。
最後才比較:次數已知用 for,次數未知或要等某個狀態出現才用 while。
要學生做:用 while 寫出「一直讀入數字,直到輸入 0 為止」的骨架,並講出零次的情況何時發生。
04 必教題型與步驟
| 題型 |
例子 |
步驟 |
答案 |
| 輸出題 |
寫出程式跑完後的輸出 |
先填追蹤表,再抄表上印出的行 |
行數要等於表內有輸出的行數 |
| 填空題 |
補上 range 的參數 |
由次數反推 (b – a + s – 1) // s |
代回原式核對次數與邊界 |
| 除錯題 |
程式不停或結果錯 |
先找更新語句,再找縮排,最後找條件方向 |
改一個地方要講出為何會修好 |
| 狀態題 |
問迴圈結束後某變數的值 |
填到最後一行,抄變數欄 |
答案要跟表一致,不可另寫一個數 |
合理性檢查(一定要教):合理性檢查:全堂只有一個工具(追蹤表),因為學生缺的是流程記錄不是語法知識;每個 range 都要用算術核對次數,避免靠記憶;while 必教零次邊界,否則學生在真題的邊界測試上全失分;示範時導師不講結果,只讀程式碼,學生才被迫自己跑一次。
05 獨立練習三題
| 題目 |
答案 |
想觀察什麼 |
| 邊界四格 |
三個 range 寫出起點、終點、步長、次數 |
看有無把 range(5, 0, -1) 的次數算成六次 |
| 追蹤表 |
為含 if 的六行迴圈填表並寫最終輸出 |
看有無漏寫條件欄 |
| while 改寫 |
把 for 版本改成 while,並寫出零次情況 |
看更新語句是否在圈內 |
06 學生常見錯誤與糾正句
| 錯誤 |
學生通常這樣寫 |
導師這樣說 |
| range 終點當包含 |
range(1, 5) 當成行五次 |
「終點係『去到就停』,你自己數:1、2、3、4,第五次由邊度嚟?」 |
| 追蹤表跳行 |
只記 total 不記 i,答案對不上 |
「你冇記 i,咁第二次 total 加咗邊個數?補返嗰行。」 |
| while 沒有更新 |
條件永遠真,程式不停 |
「邊一句會令呢個條件有一日變假?圈內搵唔到就係死循環。」 |
| 假設迴圈至少行一次 |
while 條件一開始就假仍答「行一次」 |
「條件未入圈已經假,圈內邊一句有機會執行?答零次。」 |
07 家課建議(直接指到練習卷題號)
08 離場檢查(最後 5 分鐘)
| 題目 |
答案 |
判定 |
| range 三段 |
起點、終點(不含)、步長 |
漏一段=回到第一幕 |
| 追蹤表三欄 |
行號、變數值、判斷結果 |
講不出三欄=重講第二幕 |
| while 退出條件 |
先寫停的條件,再寫圈內更新 |
答「睇情況」=回到第三幕 |
09 導師常問
要學生背次數公式嗎?
不必背,但要會用算術核對;公式寫在黑板上,答題時自己代一次。
Python 以外的語言要教嗎?
DSE ICT 以概念為主,偽代碼同樣要練追蹤表,語法差異一分鐘講完就夠。
學生底子弱,先教 for 定 while?
先 for,因為次數已知、邊界清楚;while 等 for 穩了再加,否則兩個一齊亂。
立即免費搵導師導師登記 →
本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。