中三 ICT|Python 程式設計入門 備課指引(導師用)|變數、input 轉換、range 界線與乾跑
- 2026-11-11
學生寫得出一行 print,卻講不出為甚麼 total 會變成 55;不是語法問題,是腦裡沒有「每圈改一次」的畫面。這一堂用一張乾跑表,把迴圈由咒語變成可追蹤的步驟。
本堂目標 學生能夠:① 講出變數是名字貼在值上、a = a + 1 是先算右邊再貼回左邊;② 用 range(1, 11) 算出 1 至 10 的總和 55,並講出為何不是 11 個數;③ 用乾跑表逐圈寫出 i 與 total 的值,找出 off-by-one 與忘記 int() 兩類錯誤。
01 先備知識(開課前 3 分鐘快檢)
以下任何一項未過關,本堂就會卡住,先補該項:
| 技能 | 快檢題 | 過關標準 |
|---|---|---|
| 整數與平均 | 1 加到 10 是多少?平均又是多少? | 55;平均 5.5 |
| 英文關鍵字 | for 與 while 分別暗示甚麼? | for 逐個取值;while 條件成立就繼續 |
| 賦值方向 | a = 3 與 3 = a 哪個合法? | 前者合法,等號是把右邊的值放進左邊的名字 |
02 課堂流程(45 分鐘)
| 時間 | 環節 | 導師做什麼 | 學生做什麼 |
|---|---|---|---|
| 0–5 分 | 先估後算 | 問「total = 0 之後跑十圈加 i,total 最後是多少」,先寫下估計 | 多數估 10 或 100,暴露未追值 |
| 5–13 分 | 變數是貼紙 | 示範 a = 1;a = a + 1,強調右邊先算,再貼回左邊 | 寫出 a 兩次的值 |
| 13–26 分 | range 的上下界 | 寫 range(1, 11) 與 range(10),列出兩者產生的數,指出右邊界不包 | 列出兩組數字 |
| 26–34 分 | 乾跑表 | 黑板畫 i 與 total 兩欄,逐圈填到第十圈,得出 55 | 自己填三圈 |
| 34–41 分 | 兩類錯誤 | 示範忘記 int() 與 range(1, 10) 的後果,各改一次 | 講出兩個錯誤的分別 |
| 41–45 分 | 離場檢查 | 收三條答案,即場標正確/半對/錯 | 交出三條答案 |
03 講解腳本(照著說就可以)
第一幕:第一幕:等號不是相等,是貼上去
「a = 1,然後 a = a + 1,a 變成 2。為甚麼?因為等號右邊先算,1 加 1 等於 2,再把 2 貼到名字 a 上。所以 a = a + 1 不是矛盾,是『拿舊值算新值』。學生最常問這句是否寫錯,一問就知他未建立這個畫面。 total = 0;total = total + i 同理:每一圈都用上一圈的 total 加今圈的 i,再貼回去。程式不是一次過算完,是一圈一圈把值改掉,所以要追值就要逐圈抄。」
右邊先算,再貼回左邊;每圈都改一次。
第二幕:第二幕:range 的右邊界永遠不包
「range(1, 11) 產生 1 至 10,共十個數;range(10) 產生 0 至 9,也是十個。兩種寫法都數十次,但起點不同。學生寫 range(1, 10) 就只得九個數,總和會變成 45,少了 10。這個錯叫 off-by-one。要驗證很簡單:把 list(range(1, 11)) 印出來數一數,或者用公式 首項加末項乘項數除二 核對:(1 + 10) × 10 ÷ 2 等於 55。算出來的答案與程式不同,就一定是界線或圈數出錯。」
range(1, 11) 是 1 到 10;右邊界不包,這是 off-by-one 的來源。
第三幕:第三幕:乾跑表是最快的除錯工具
「程式不對,多數不是電腦壞,是你心裡跑的版本同電腦跑的不同。乾跑表只有幾欄:圈數、i、total、輸出。第一圈 i 是 1、total 由 0 變 1;第二圈 i 是 2、total 變 3;第三圈 total 變 6。一直填到第十圈,total 是 55。填到第三圈你就會發現模式:total 每圈加 i。若程式印出 45,看表就知道少跑一圈,回去查 range。除錯不是不停改,是先確定每一圈應該是幾多。」
逐圈抄 i 與 total,錯在第幾圈一眼看得出。
04 必教題型與步驟
| 題型 | 例子 | 步驟 | 答案 |
|---|---|---|---|
| 輸出預測題 | total = 0;for i in range(1, 6):total = total + i;print(total) 印出甚麼? | ① 列出 range 產生的數 ② 逐圈加總 ③ 用公式核對 | 15(1+2+3+4+5),公式 (1+5)×5÷2 也是 15 |
| 找錯題 | n = input(“請輸入數字:”);print(n + 1) 為甚麼報錯? | ① 看 input 的回傳型別 ② 指出是字串 ③ 加 int() 轉換 ④ 補一句錯誤處理 | input 回傳字串,字串不能加整數;改為 int(input(…)) |
| 乾跑表題 | x = 3;while x > 0:print(x);x = x – 1 會印出甚麼? | ① 寫條件 ② 逐圈列 x ③ 指出何時停 | 3、2、1;當 x 變 0,條件 0 > 0 為假,迴圈停 |
| 寫程式題 | 寫一段程式讀入五個分數,印出平均。 | ① 用迴圈讀五次 ② 每次 int() 轉換並累加 ③ 除以 5 ④ 用 round 控制小數位 | total = 0;for i in range(5):total = total + int(input());print(round(total / 5, 2)) |
合理性檢查(一定要教):合理性檢查:1 加到 10 是 55,不是 45(45 是 1 到 9);1 加到 100 是 5050;平均 55 除以 10 是 5.5,答 55 就是忘了除;range(1, 11) 是十個數,答十一個就是把右邊界當包含;7 // 2 是 3、7 % 2 是 1,兩個一起寫才對得上。任何總和大過圈數乘最大值的結果,都代表多跑了圈。
05 獨立練習三題
| 題目 | 答案 | 想觀察什麼 |
|---|---|---|
| total = 0;for i in range(1, 101):total += i 之後 total 是多少? | 5050 | 是否用 (1+100)×100÷2 核對 |
| 為甚麼 print(“5” + 1) 會報錯,print(int(“5”) + 1) 不會? | 前者是字串加整數,型別不符;後者先轉成整數 | 是否能講出型別而不是只說「要加 int」 |
| 把 while 迴圈寫成永遠不會停的版本,再改回正常。 | 條件永遠為真(例如 x = x + 1 而條件是 x > 0);改為 x = x – 1 | 是否講出「條件最終要變假」 |
06 學生常見錯誤與糾正句
| 錯誤 | 學生通常這樣寫 | 導師這樣說 |
|---|---|---|
| 忘記 int() 轉換 | 「n = input();print(n + 1)」 | 「input 給你的是文字,不是數字。文字加一會報錯。先 int() 轉成整數,題目才跑得通。」 |
| range 界線 off-by-one | 「range(1, 10) 就是 1 到 10。」 | 「右邊界不包。range(1, 10) 只得九個數,總和 45。要十個就寫 range(1, 11)。」 |
| 縮排不一致 | 「迴圈體有些行縮兩個空格、有些四個。」 | 「Python 用縮排決定哪幾行在圈內。同一層要對齊,否則電腦會當你寫了兩件事。」 |
| 把 = 當成相等 | 「if x = 5:」 | 「單等號是賦值,比較要用兩個等號。這一行電腦會直接報語法錯誤。」 |
07 家課建議(直接指到練習卷題號)
- 本章練習:乾跑 1 加到 10 的迴圈,填滿十圈 Python 入門章節 練習第 1 題
- 本章練習:改寫平均程式,改為讀入任意數量 Python 入門章節 練習第 2 題
- 延伸:用公式核對 1 加到 100 的總和 5050 Python 入門章節 練習第 3 題的數據欄
08 離場檢查(最後 5 分鐘)
| 題目 | 答案 | 判定 |
|---|---|---|
| range(1, 11) 產生幾個數? | 十個,1 至 10 | 答錯=下堂重教第二幕 |
| 1 加到 10 的總和是多少? | 55 | 答錯=下堂重教第三幕 |
| input() 回傳甚麼型別? | 字串(str),要運算先 int() 或 float() | 答錯=下堂重教第一幕 |
09 導師常問
學生應該先學 for 還是 while?
先用 for,因為圈數明確、容易乾跑;while 留到講「未知圈數」時再引入,兩者分工才清楚。
要背語法嗎?
只需記 print、input、int、range、if、for 六個字的用法;其餘靠查,重點是追值與除錯的能力。
為甚麼一定要寫乾跑表?
因為考試與實習都會出現「程式跑得通但答案錯」,只有逐圈追值才找得出是界線、型別還是縮排問題。
本頁為 TutorZone 導師備課指引,內容由 TutorZone 團隊編寫;題目與流程為原創,並非任何學校或出版社的教材。


