← 首页
00:00点开始
学情 用时 0′ 尝试 0 出错 0 归因 0
B 结构期 · 第七课
次数算不出来,就让条件说了算

前面所有循环都是先知道次数:for i in range(8)。
可要是一段线要长到"够长为止"呢?次数你根本算不出来。

开场 9 分钟怎么花: 回扣课21"多分支"(3′)→ 抛"要做几次不知道怎么办"(3′)→ 发手帖 + 预告作品《不知道要转几次》(3′)。
老师说 今天换个问法:不问"做几次",只问「还该继续吗?」
每做一遍之前问一次,答案是"该"就再做一遍——这就是 while。
第二十二种陷阱:忘了让条件变量往前走。 while 的条件写在开头,如果循环里没有把变量往"变假"的方向改, 条件永远成立——程序停不下来。这是 for 永远不会犯的错。

第一步 · 停不下来的陷阱 09′–23′ · 14 分钟 · 它怎么不结束了

陷阱换了(第二十二种)
条件永远成立,程序停不下来
老师说 这段代码想让线一段比一段长:10 → 20 → 40 → 80 → 160。
先猜:按运行会发生什么?猜完再按。

盯住 n:循环里没有任何一句改它。
条件 n <= 160 每遍都成立——所以它永远不结束。

老师纪律:别急着说"你忘了更新变量"。只问: 「第 2 圈开始时 n 是几?」——他会发现还是 10,永远走不出去。
页面有 8 秒超时兜底,会报"运行超时",正好当证据。

第二步 · 内存具象化 23′–37′ · 14 分钟 · 每圈开头问一次

老师说 while 是每圈开头先问一次:「还该继续吗?」
答案是"该"就做一遍;做完回到开头再问——直到答案变成"不该"。
所以循环里必须有一句让答案改变的话。
n(长度)
10
n <= 160 ?
成立
已经走了
0 段
为什么坚持手推:死循环的根源是"以为 n 会自己变"。 把 n 的每一遍写死,学生自己就能看见它没变。
休息 1
37′–47′ · 10 分钟 · 站起来动一动
老师说 留个问题:如果条件是 n >= 10,会发生什么?
回来第一件事验证它。

第三步 · 人肉电脑 47′–65′ · 18 分钟 · 不许按运行

老师说 关掉运行。标准骨架一共走 5 段。
在纸上写:这一遍 n 是几?条件成立吗?走完 n 变成几?
标准骨架:n = 10;while n <= 160: 画一段 → n = n * 2。
人肉电脑的落点:学生要能说出「第 5 遍之后 n 变成 320, 条件不成立了,循环才停」——说不出这句,就是没懂 while 的出口在哪。

第四步 · 自己搭 65′–85′ · 20 分钟 · 写你自己的 while

老师说 写一段你自己的 while 折线。要求三条:
① 用 while(不是 for)② 循环里有 n = n * 2 或 n = n + 10 ③ 条件能让它自然停下
巡场只问三句:条件是哪个变量?循环里谁在改它?它往哪个方向变?
看到 while True: 直接拦——课上不许写。
休息 2
85′–91′ · 6 分钟 · 伸个懒腰
老师说 回来改一个数:把 n = n * 2 改成 n = n * 3,看看要转几段。

第五步 · 改数试试 91′–105′ · 14 分钟 · 改倍数,段数怎么变

老师说 只改一个数:把 n = n * 2 改成 n = n * 3。
先猜会走几段,再运行。
这一步的收获:条件没变、只改了倍率, 段数就从 5 变成 4——while 的次数是算出来的,不是写出来的。

第六步 · 读码迁移 105′–120′ · 15 分钟 · 读出它转几次

老师说 最后 15 分钟不写新代码——读。看下面这段,说出它画几段、最后停在哪。
读码四步:① 条件是什么 → ② 循环里谁在改它 → ③ 每遍的值列出来 → ④ 第几遍条件变假。
  • 填手帖:本课三问——条件是什么 / 谁在改它 / 第几遍停
  • 家庭挑战:把《不知道要转几次》讲给爸妈听,说清 for 和 while 什么时候各用哪个
收尾话术(家长版): 「他今天学的不是'再来一种循环',是程序为什么停不下来。 您可以问他:while 里忘了改变量会怎样?他能答上来,就是真懂。」

海龟的画布

(摆好卡片,按运行)

对应的 Python 代码 实时同步

本课硬事实 老师自查