考试编程:能得分的 Python 答案
如何在考试中写出真正能拿满分的 Python 代码——结构、边界情况和压力下的时间管理。
考试评卷员不会花二十分钟用调试器逐行运行你的代码。他们读一遍,也许读两遍,然后对照评分标准检查。一个忽视评分标准的可运行解决方案仍可能失分,而一个稍微粗糙但符合每个检查点的答案反而能得更高分。为考试写 Python 是一项与写实际项目不同的技能,值得单独练习。
读评分标准要在读两遍题目之前
大多数编程考试——AP CS A 风格的自由作答题、大学期中考、编程训练营评估——都会公布部分加分规则。一条典型的评分标准是这样的:"正确的循环结构 1 分,正确的返回值 1 分,处理空列表情况 1 分。" 如果你写了一个密集的单行代码,虽然答案正确但跳过了显式循环,有些评卷员即使输出正确也会扣分。
开始写代码前,找出评卷员可能单独检查的部分:
- 函数签名与所要求的完全匹配(名称、参数顺序、返回类型)
- 递归时的基础情况和递归情况
- 循环边界(差一错误是单个最常见的失分点)
- 边界情况:空输入、单元素输入、负数、重复值
先写成注释。# handle empty list,# base case: n == 0。这只花十秒钟,但能保证你不会忘记评卷员要专门检查的情况。
组织代码使部分加分可见
比较两个"写一个函数返回列表中第二大的数"的答案:
def second_largest(nums):
return sorted(nums)[-2]
def second_largest(nums):
if len(nums) < 2:
return None
largest = second = float('-inf')
for n in nums:
if n > largest:
second = largest
largest = n
elif n > second and n != largest:
second = n
return second
第一个对格式良好的输入是正确的,但在列表少于两个元素时会崩溃,在 [5, 5, 3] 这样的重复值上给出错答案(返回 5,根据规格可能是错的)。第二个更长,但每一条评分标准——边界情况、正确逻辑、正确返回——都是显式的,占据各自的行供评卷员打勾。在计时考试中,第二版本几乎总是得分更高,尽管打字花的时间更长。
不要过早优化,但也别留下明显的 bug
考试题很少考 Big-O 知识,除非题目直接说明。如果题目说"写一个查找重复值的函数",O(n²) 的嵌套循环就很好,除非题目指定大型输入或要求高效解决方案。花考试时间转换为基于集合的 O(n) 方案(题目没要求的情况下)是你拿不回来的时间。
不过有些错误无论如何都会扣分:
- 不一致地用
==而不是is,导致逻辑 bug(在 Python 考试中罕见但在比较密集的题目中出现) - 迭代列表时改变它——
for x in lst: lst.remove(x)是经典的考试陷阱,会产生无声的错误输出 - 忘记
return改为打印——许多自动评分器检查返回值,不检查标准输出 range()差一错误——range(len(nums))vsrange(len(nums) - 1)值得每次都仔细检查
提交前手工追踪代码
在纸质考试和大多数在线编程考试中,你无法运行代码。挑一个小例子逐行追踪,记下变量值。这在两分钟内能捕捉约 80% 的逻辑错误,是你用剩余时间能做的最高价值的事。
对递归函数,至少追踪两层深度并显式写出基础情况被触发。评卷员经常单独给一分用来证明基础情况正确终止,与递归情况正确的那一分分开。
管理时间像管理资源,而不是事后才想
如果一个自由作答部分跨三个子问题值 9 分,大约平均分配时间,如果卡住超过预算就往下走——一个半完成但几乎正确的 (b) 部分得分比完美的 (a) 和空白的 (c) 的原始分数多。即使无法完成逻辑,也要写一个有正确签名的存根函数和 pass 或猜测;仅有正确的签名有时就值一分。
关于在考试室外写干净、可测试的 Python,以及在这些题目中频繁出现的数据结构,请查看 Korra Studio 上相关的 Python 和计算机科学段落。
本文由人工智能协助撰写,经 Michal Pilch(CISSP)审核并发布,Korra Studio。
这是来自 Korra Studio 知识库的笔记之一——该平台将每个主题与一对一指导相结合。
免费开始arrow_forward