本页包含一个小型类 Python 解释器和五个简短练习。你运行代码,工具把输出与预期输出对比,测试未通过时还会给出可以思考的问题。
它的目的是培养你分析代码的习惯,而不只是运行代码。
怎么使用?
- **选择练习。**读一行说明,例如“程序应该输出 15。”
- 点按钮之前先预测输出。写下你认为会出现的内容。
- 按运行并测试。重置会回到第一个练习。
- 阅读结果。通过了,就试着解释为什么;没通过,就看“想一想”的问题,在文本框里修改代码再运行。
请用空格缩进。支持的子集列在代码框下方:+ - * / // % **、比较、and/or/not、print()、int()、str()、abs()、len()、min()、max()、if/elif/else、while、for … in range(…)、break 和 continue。
怎么看结果?
左边是你的输出,右边是预期输出,并有信息说明是否一致。下面显示已执行的步数,以及结束时各变量的值。
如果被安全上限停止,比较结果上方会出现警告。被停止的程序仍会显示上限之前已输出的内容,通常足以看出规律。
例子演示
打开1 到 5 的总和(有错误)。代码把 range(1, 5) 中的 n 加到 total 并输出。预期输出是 15。
运行后,输出是 10,测试未通过。看第一个提示:range(1, 5) 会产生哪些数?它产生 1、2、3、4,因为停止值不包含在内。
所以 total 是 1 + 2 + 3 + 4 = 10,不是 15。
把停止值改为 6 再运行。数是 1 到 5,总和 15,测试通过。
再打开翻倍直到超过 50。从 x = 1 开始,当 x <= 50 时翻倍。值依次是 2、4、8、16、32、64。
到 64 时条件为假,循环结束并输出 64。条件是在翻倍前检查的,所以最终值会超过 50。
然后试有错误的循环:while True。它会一直输出 0,工具会在上限处停止。题目要求你让它输出 0、1、2。
请修改循环,使 n 每轮增加,并在 n 到 3 时停止,然后运行。
有哪些假设和限制?
- 这是 Python 的子集。用 / 做除法时,整数结果不显示“.0”。
- 没有自定义函数、列表、字符串方法或导入。
- 程序上限 60 行,输出上限 200 行。
- 失控的循环在 5000 步或 300 毫秒时停止。
- 它不能查看或更改任何文件,也不发出网络请求。
- 只用于原创练习。它不是考试环境,也不会批改需要评分的课业。
哪些课程解释了这些结果?
关于循环,请读修正差一错误(off-by-one),它正好解释了上面 range(1, 5) 的错误。先预测的习惯在运行代码之前先说明预期结果中讲解,找出未测试的分支则说明一次测试通过并不能证明什么。
想了解数值如何经过函数,请看追踪返回值。完整路线见Python 过渡与执行。
如果你想让老师陪你检查循环和测试,请看线上一对一 Computer Science 补习。伪代码追踪训练是很好的搭档,更多工具见学习工具目录。