Python指定作业平均分计算函数调试求助:代码无法正常运行
Python作业平均分计算函数修正方案
原需求(翻译自原注释)
该函数接收两个参数:完整的学生列表,以及一个整数(表示要计算平均分的作业编号,取值0、1、2或3)。你需要在函数声明中添加这两个参数。
函数将计算指定作业的平均分并返回该值。
原代码存在的问题
- 参数拼写错误:
assignement_number多处拼写错误,正确应为assignment_number - 编号校验逻辑错误:用
assignement_number != range(0,3)判断合法性完全错误,合法编号是0-3(包含),需判断是否在该区间内 - 错误覆盖参数:
assignement_number= students[0][1]把传入的作业编号替换成了第一个学生的成绩列表,彻底打乱逻辑 - 平均分计算逻辑混乱:循环中错误使用
sum(i[1][assignement_number])(单个成绩是数字,sum会报错),且未累加所有学生的对应成绩,也未做除法计算平均分 - 无返回值:函数末尾未返回计算后的平均分
正确计算逻辑(公式)
平均分 = 所有学生对应作业的成绩总和 ÷ 学生总人数
代码逻辑拆解:
- 累加每个学生的第N项作业成绩,得到总分
- 用总分除以学生数量,得到平均分
修正后的完整代码
def AverageAssignment(students, assignment_number): # 校验作业编号是否在0-3的合法范围内 if not (0 <= assignment_number <= 3): return -999 # 计算所有学生该作业的成绩总和 total_score = sum(student[1][assignment_number] for student in students) student_count = len(students) # 处理空学生列表的边界情况,避免除以0 if student_count == 0: return 0 # 可根据需求调整返回值,比如返回-999 return total_score / student_count # 测试示例 students = [('Jane',[70,80,90,100]),('xinrong',[60,50,30,40]),('sima',[100,70,30,100])] # 作业0平均分:(70+60+100)/3 ≈76.6667 print(AverageAssignment(students, 0)) # 作业3平均分:(100+40+100)/3 = 80 print(AverageAssignment(students, 3)) # 非法编号返回-999 print(AverageAssignment(students, 4))
内容的提问来源于stack exchange,提问作者user93000
相关产品推荐
相关产品推荐

