学生写得出 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 团队编写;题目与流程为原创,并非任何学校或出版社的教材。