在大屏或电脑上体验更佳——动画和操作区域更宽敞。
输入

执行轨迹

执行轨迹逐条记录一次程序运行:程序计数器位于哪一行,每一步后变量是什么值。结合当前行和状态,就能按语句跟踪运行过程。

程序计数器像读菜谱时指着步骤的手指:执行一条,移向下一条,遇到循环就回到前面的条件。本课用箭头标记当前行,状态面板显示变量,控制台保存输出。

执行轨迹如何工作

顺序执行通常进入下一行。while 改变这个顺序:条件为真时进入循环体,执行完后回到条件,再次判断;条件为假时跳过循环体,进入后面的语句。

本课从 n 加到 1。先把累计值 total 设为零,只要 n > 0,就把 n 加入 total,再将 n 减一。滑块决定初始输入;五行代码不变,变化的是经过它们的值。

逐步演示

默认输入为 n = 3。

  1. 第 1 行:total = 0 创建 total,设为 0。
  2. 第 2 行:while n > 0 判断 3 > 0 为真,进入循环体。
  3. 第 3 行:total = total + n 使用当前值计算 0 + 3,再把 total 写为 3。
  4. 第 4 行:n = n - 1 把 n 改为 2,随后回到第 2 行。
  5. 第二轮:2 > 0 为真,total = 3 + 2 = 5,n 改为 1。
  6. 第三轮:1 > 0 为真,total = 5 + 1 = 6,n 改为 0。
  7. 第 2 行:0 > 0 为假,跳过循环体。
  8. 第 5 行:print(total) 输出 6,结束。

箭头经过第 1–4 行,三次回跳到第 2 行,最后在条件为假时进入第 5 行。回跳动画是普通步骤时长的 1.5 倍,让方向变化可见。状态面板闪烁刚改变的变量,轨迹表用语句执行前的值记录求值,例如 0 + 3 → 3 和 3 > 0 → true。

解释器执行了多少工作

对非负输入 n,本课的语句计数为:一次初始化、n + 1 次条件检查、2n 条循环体语句、一次 print,共 3n + 3 条。条件检查包含最后一次为假的判断。源码始终只有五行,增长的是执行轨迹。

输入循环体轮数执行语句数输出
n = 1161
n = 33126
n = 662121

源码是静态文本,轨迹是动态过程。实际解释器还有字节码、调用栈和优化机制,但必须保持这里的语句顺序与状态变化。函数调用和递归等后续课程都以这个模型为基础。

边界情况

  • n = 0:第一次判断 0 > 0 就为假,循环体不执行,输出 0。箭头从第 2 行进入第 5 行,说明判断发生在循环体之前。
  • n = 1:只执行一轮,加上 1、减到 0,再次判断后退出。
  • 滑块上限为 n = 6:更大的正数仍执行同样五行,只是重复更多次,total 更大。

常见错误

  • 漏掉 n = n - 1。 对正输入,n 无法降到 0,条件一直为真,循环不结束。
  • 把 while 当成 if。 if 的分支最多执行一次后继续;while 每轮都回到条件。
  • 用赋值后的值计算右侧。 total = total + n 先读旧值,再写结果。这里计算的是 0 + 3,不是 3 + 3。
  • 把程序计数器当成普通变量。 它记录执行位置,不属于本程序的用户数据,因此不显示在变量状态面板中。

本课的简化

真实 Python 解释器执行字节码并管理栈帧,不会真的沿源文件移动箭头。本图展示的是读代码和调试时使用的语义层:语句按控制流生效,每一步产生相应状态变化。