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


