Python编程练习:is_better_than_avg未按预期返回False排查
问题根因
- 核心错误在
is_better_than_avg函数的逻辑:你传入的pos是目标学生的下标,但函数内部用for pos in students遍历学生列表,直接覆盖了传入的pos参数,且遍历第一次就会直接返回结果,等于不管你传入什么下标,永远都是拿列表第一个学生(kosma)的平均分和全校平均分对比,所以第二个测试用例传入下标6也会返回和第一个用例相同的True。 - 代码未定义计算单个学生平均分的
avg函数,直接运行会报错,需要补全。 - 原有逻辑还存在性能问题:循环中反复调用
school_avg计算全校平均分,每次都会遍历所有学生,存在大量重复计算。
修复代码
# 补全单个学生平均分计算函数 def avg(student_dict): grades = student_dict["grades"] return sum(grades) / len(grades) # 修复后的核心校验函数 def is_better_than_avg(students, pos): # 仅计算一次全校平均分 school_total_avg = school_avg(students) # 直接取下标对应的目标学生 target_student = students[pos] # 对比返回结果 return avg(target_student) > school_total_avg
修复后效果
两个测试用例均会符合预期:
- 校验下标0的学生返回
True,测试通过 - 校验下标6的学生返回
False,测试通过
内容的提问来源于stack exchange,提问作者GrainsGames
相关产品推荐
相关产品推荐

