学习前提

理解Python变量、整数、字符串和print。

本课完成后你能做什么

把业务规则变成互斥分支,并正确处理空数据与边界值。

先理解机制

if/elif按顺序选择第一个成立的分支。评分等级应从高门槛向低门槛判断,否则优秀分数可能先进入普通分支。比较运算产生布尔值;and、or会短路,但它们也可能返回原操作数,不要假设所有逻辑表达式最终都是bool。

for遍历可迭代对象中的值,range的结束值不包含在内。需要索引和元素时使用enumerate,通常比手动维护索引更清晰。continue跳过当前轮余下工作,break结束当前循环,不会自动终止外层循环或整个程序。

累计量需要初始化并在每轮保持明确含义。下面total始终是已接受分数之和,count是有效项数;平均值只有count大于0时才计算。把无数据定义为None,而不是用0冒充平均分,可以避免误解。

while适合终止条件由状态决定的过程,但必须保证状态朝结束方向变化。初学阶段先限制测试数据规模,发现卡住时检查条件与更新,而不是在循环中随意加入break让它“看起来能结束”。

可运行示例

使用Python 3.11或更新版本,将代码保存为独立练习目录中的lesson.py,在该目录执行 python3 lesson.py;Windows也可使用 py lesson.py。示例只使用标准库。

scores = [0, 60, 90, 100, -1, 101]
total = 0
count = 0
for score in scores:
    if not 0 <= score <= 100:
        continue
    total += score
    count += 1
average = total / count if count else None
print(total, count, average)
for position, score in enumerate(scores[:3], start=1):
    print(position, score)

推演与验证

预期250、4、62.5,随后三行位置从1开始。清空scores后平均值为None;把全部分数设为0,平均值应为0.0。两种情况不能用同一“没有成绩”判断混淆。

常见错误与边界

示例假定元素是数字;若来自文件,需要先检查类型或转换。遍历列表时删除元素会改变位置并可能漏项,应构造筛选后的新列表。

动手练习

增加等级函数:None为未评分,90及以上A、60及以上B,其余C。测试59、60、89、90。

参考解法与理由

先处理None,再按90和60递减比较。None不是数字,不能直接参与大小比较;边界测试能发现把>=写成>造成的错误。

进一步阅读