DSE ICT|Python 程式基礎:十節備課指引(變數、迴圈、函數、除錯)
- 2026-11-05
學生看得明範例,但一開新檔就寫不出來,因為他們把程式當成「要背的語法」而不是「一步步的指令」。本課只做一件事:用 1 至 10 求和這條題,把變數、迴圈、函數三層依次加上去,令學生同一題由三行寫到十行,並且每次改動都能講出原因。
本堂目標 學生能夠:(1) 用變數儲存並更新一個累加值,講出每一行執行後變數的值;(2) 用 for 迴圈配合 range 完成重複運算,並正確設定起點與終點;(3) 把重複邏輯包成函數,傳入參數並取回結果,並用一個測試值驗證。
01 先備知識(開課前 3 分鐘快檢)
以下任何一項未過關,本堂就會卡住,先補該項:
| 技能 | 快檢題 | 過關標準 |
|---|---|---|
| 輸入輸出 | print 與 input 分別做甚麼? | 輸出到螢幕/由鍵盤取字串 |
| 資料類型 | input 取回的數字為何要轉換? | input 回傳字串,要 int() 轉整數 |
| 縮排 | Python 用甚麼表示同一組指令? | 縮排,通常是四個空格 |
02 課堂流程(45 分鐘)
| 時間 | 環節 | 導師做什麼 | 學生做什麼 |
|---|---|---|---|
| 0-6 分鐘 | 先讀一段錯的程式 | 投影一段跑錯的求和程式,叫學生找錯 | 學生指出至少一個錯處 |
| 6-14 分鐘 | 變數是一格一格的盒 | 用 total = total + i 逐格示範,寫出每輪的值 | 學生手寫三輪的 total 值 |
| 14-24 分鐘 | for 與 range | 講 range(1, 11) 為何是 1 到 10,起點包含、終點不包含 | 學生改寫成 1 至 100 並核對 5050 |
| 24-32 分鐘 | 包成函數 | def total_to(n) 加 return,強調 return 與 print 的分別 | 學生把求和包成函數並呼叫一次 |
| 32-40 分鐘 | 測試與除錯 | 用 1、10、100 三個輸入測試,其中一個故意失敗 | 學生找出失敗的那個並修正 |
| 40-45 分鐘 | 離場檢查 | 收回三題,只讀答案 | 獨立作答 |
03 講解腳本(照著說就可以)
第一幕:由一段錯的程式開場
不要由語法開始。投影一段五行的求和程式,裡面有三個錯:total 未初始化、range 寫成 range(1, 10)、縮排少一格。叫學生兩人一組找錯,再把他們的發現寫回黑板。
這樣做的目的是令學生知道:程式設計大部分時間是找錯,而不是由零開始寫。找錯能力一旦建立,他們就不再怕空白檔案。
這樣做的目的是令學生知道:程式設計大部分時間是找錯,而不是由零開始寫。找錯能力一旦建立,他們就不再怕空白檔案。
學生做:找出三個錯處,並講出每個錯會導致甚麼後果。
第二幕:變數:一格一格的盒
在黑板上畫一個方格寫 total,然後逐輪更新:第 1 輪 total 由 0 變 1,第 2 輪由 1 變 3,第 3 輪由 3 變 6。要求學生自己寫出第 10 輪的結果,答案是 55。
學生最常犯的錯是把 total = total + i 讀成數學等式。要講清楚:右邊先算,再放回左邊的格。這個「先算後放」的講法,比講 assignment operator 有效得多。
學生最常犯的錯是把 total = total + i 讀成數學等式。要講清楚:右邊先算,再放回左邊的格。這個「先算後放」的講法,比講 assignment operator 有效得多。
學生做:填一張十行表,寫出每輪 i 與 total 的值。
第三幕:for 與 range:起點包含、終點不包含
range(1, 11) 產生 1 到 10 十個數,這是學生最容易失分的地方,因為他們會寫 range(1, 10) 而少了 10。用一行 print(list(range(1, 11))) 即場示範,把 10 個數印出來,比任何解釋都清楚。
接着把題目由 1 至 10 改成 1 至 100,答案 5050,讓學生自己按一次。同一條題目換一個數,學生就知道公式不是重點,流程才是。
接着把題目由 1 至 10 改成 1 至 100,答案 5050,讓學生自己按一次。同一條題目換一個數,學生就知道公式不是重點,流程才是。
學生做:改寫成 1 至 100,並解釋為何要寫 101。
第四幕:包成函數:參數入、結果出
把求和邏輯包成 def total_to(n),裡面用 range(1, n + 1),最後 return total。要強調兩點:n + 1 是因為終點不包含;return 是把結果交出去,不是印出來。
示範 print(total_to(10)) 與 x = total_to(10) 的分別:後者可以再運算,前者只是顯示。學生明白這一點之後,寫後面的題目就不會把函數寫成一大段 print。
示範 print(total_to(10)) 與 x = total_to(10) 的分別:後者可以再運算,前者只是顯示。學生明白這一點之後,寫後面的題目就不會把函數寫成一大段 print。
學生做:把函數改寫成可計算 1 至 n,並用 n = 10 驗證得到 55。
第五幕:測試與除錯:故意讓它失敗
給三個測試值:1、10、100,答案應該是 1、55、5050。然後把函數改成 range(1, n) 再跑一次,n = 10 會得到 45,正好少了 10。叫學生找出差額並解釋原因。
這個「故意失敗」的做法,令學生看見測試的價值:如果只測 n = 1,錯的程式也會通過。這一節通常是整堂最安靜、最專注的十分鐘。
這個「故意失敗」的做法,令學生看見測試的價值:如果只測 n = 1,錯的程式也會通過。這一節通常是整堂最安靜、最專注的十分鐘。
學生做:找出 45 與 55 的差,並用一句話寫出原因。
04 必教題型與步驟
| 題型 | 例子 | 步驟 | 答案 |
|---|---|---|---|
| 填空 | 給程式缺一行,補上正確語句 | 先想資料流,再想語法 | 縮排與變數名都正確 |
| 追蹤 | 給程式與輸入,寫出輸出 | 逐行寫變數值,不要心算 | 每一行都寫,包括沒變的 |
| 改錯 | 程式中有一個邏輯錯 | 先用小輸入測,再定位 | 指出行號與原因 |
| 撰寫 | 由題目描述寫一個函數 | 定義輸入、處理、輸出三段 | 有 return,有測試值 |
合理性檢查(一定要教):合理性檢查:(1) 1 至 10 的和是 55,1 至 100 是 5050,這兩個數要背下來當檢查點;(2) 若程式跑出 45,即是少加了一次,通常是 range 終點寫錯;(3) 若跑出無限次輸出,即是迴圈變數沒有更新;(4) 若出現 TypeError,先查 input 是否未轉 int;(5) 每個函數至少要用兩個不同輸入測過,才算完成。
05 獨立練習三題
| 題目 | 答案 | 想觀察什麼 |
|---|---|---|
| 追蹤 | 寫出 1 至 10 求和程式每輪的 total | 核對第 1、2、10 輪 |
| 改錯 | 把 range(1, 10) 改成正確版本並解釋 | 核對是否講出終點不包含 |
| 撰寫 | 寫 total_to(n) 並用 n = 100 驗證 | 核對回傳 5050 |
06 學生常見錯誤與糾正句
| 錯誤 | 學生通常這樣寫 | 導師這樣說 |
|---|---|---|
| total 未初始化 | 直接寫 total = total + i | 「total 第一輪仲未存在,你要先俾佢一個 0。」 |
| range 終點寫錯 | 寫 range(1, 10) 少了 10 | 「你嗰個答案少咗 10,range 終點唔包,所以要寫 11。」 |
| print 當 return | 函數裡只有 print,外層取不到值 | 「print 係顯示,return 係交貨,你要邊樣?」 |
| 縮排不一致 | 同一組指令一半四格一半兩格 | 「呢兩行睇落一樣,但 Python 當佢哋唔同組,對齊佢。」 |
07 家課建議(直接指到練習卷題號)
08 離場檢查(最後 5 分鐘)
| 題目 | 答案 | 判定 |
|---|---|---|
| 變數更新 | 先算右邊,再放左邊 | 講不出就重做第二節 |
| range 邊界 | 起點包含、終點不包含 | 邊界錯就重做第三節 |
| return 與 print | return 交結果,print 只顯示 | 混淆就重做第四節 |
09 導師常問
要背語法嗎?
不用背全部,只需記住賦值、for、def、return 四種句式的樣子。
用哪個版本?
Python 3 寫法即可,考試不要求特定版本,但 input 一定要轉型。
寫不出來怎樣辦?
先用中文寫三個步驟:輸入、處理、輸出,再逐句翻成程式。
本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。


