学习前提
理解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不是数字,不能直接参与大小比较;边界测试能发现把>=写成>造成的错误。