执行轨迹
执行轨迹逐条记录一次程序运行:程序计数器位于哪一行,每一步后变量是什么值。结合当前行和状态,就能按语句跟踪运行过程。
程序计数器像读菜谱时指着步骤的手指:执行一条,移向下一条,遇到循环就回到前面的条件。本课用箭头标记当前行,状态面板显示变量,控制台保存输出。
执行轨迹如何工作
顺序执行通常进入下一行。while 改变这个顺序:条件为真时进入循环体,执行完后回到条件,再次判断;条件为假时跳过循环体,进入后面的语句。
本课从 n 加到 1。先把累计值 total 设为零,只要 n > 0,就把 n 加入 total,再将 n 减一。滑块决定初始输入;五行代码不变,变化的是经过它们的值。
逐步演示
默认输入为 n = 3。
- 第 1 行:
total = 0创建total,设为 0。 - 第 2 行:
while n > 0判断3 > 0为真,进入循环体。 - 第 3 行:
total = total + n使用当前值计算0 + 3,再把total写为 3。 - 第 4 行:
n = n - 1把n改为 2,随后回到第 2 行。 - 第二轮:
2 > 0为真,total = 3 + 2 = 5,n改为 1。 - 第三轮:
1 > 0为真,total = 5 + 1 = 6,n改为 0。 - 第 2 行:
0 > 0为假,跳过循环体。 - 第 5 行:
print(total)输出 6,结束。
箭头经过第 1–4 行,三次回跳到第 2 行,最后在条件为假时进入第 5 行。回跳动画是普通步骤时长的 1.5 倍,让方向变化可见。状态面板闪烁刚改变的变量,轨迹表用语句执行前的值记录求值,例如 0 + 3 → 3 和 3 > 0 → true。
解释器执行了多少工作
对非负输入 n,本课的语句计数为:一次初始化、n + 1 次条件检查、2n 条循环体语句、一次 print,共 3n + 3 条。条件检查包含最后一次为假的判断。源码始终只有五行,增长的是执行轨迹。
| 输入 | 循环体轮数 | 执行语句数 | 输出 |
|---|---|---|---|
n = 1 | 1 | 6 | 1 |
n = 3 | 3 | 12 | 6 |
n = 6 | 6 | 21 | 21 |
源码是静态文本,轨迹是动态过程。实际解释器还有字节码、调用栈和优化机制,但必须保持这里的语句顺序与状态变化。函数调用和递归等后续课程都以这个模型为基础。
边界情况
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 解释器执行字节码并管理栈帧,不会真的沿源文件移动箭头。本图展示的是读代码和调试时使用的语义层:语句按控制流生效,每一步产生相应状态变化。