zyDE 11.14.1字典遍历任务技术咨询:作业平均分计算等问题
计算每项作业的平均分
针对你的任务2,这里提供直接的实现思路和代码:
核心思路
student_grades是一个字典,每个值对应一名学生的5项作业分数列表。要计算每项作业的平均分,需要按作业位置收集所有学生的分数,再对每组分数求平均值。
代码实现
# student_grades contains scores (out of 100) for 5 assignments student_grades = { 'Andrew': [56, 79, 90, 22, 50], 'Nisreen': [88, 62, 68, 75, 78], 'Alan': [95, 88, 92, 85, 85], 'Chang': [76, 88, 85, 82, 90], 'Tricia': [99, 92, 95, 89, 99] } # 方法1:分步计算 assignment_averages = [] # zip(*...) 会把所有学生的分数列表按作业位置转置,生成每个作业的分数集合 for assignment_scores in zip(*student_grades.values()): average = sum(assignment_scores) / len(assignment_scores) assignment_averages.append(average) # 输出每项作业的平均分(保留两位小数) for idx, avg in enumerate(assignment_averages, start=1): print(f"第{idx}项作业平均分: {avg:.2f}") # 方法2:用列表推导式简化写法 assignment_averages_short = [sum(scores)/len(scores) for scores in zip(*student_grades.values())] print("简化写法的结果:", assignment_averages_short)
代码解释
zip(*student_grades.values()):student_grades.values()获取所有学生的分数列表,*操作符将这些列表解包,zip函数会把每个列表的对应位置元素打包成元组(比如第一个元组是所有学生的第1项作业分数)。sum(assignment_scores)/len(assignment_scores):对每个作业的分数集合求和,再除以学生人数得到平均分。enumerate(..., start=1):让作业序号从1开始,更符合日常计数习惯。
运行代码后,你会得到5项作业各自的平均分结果。
内容的提问来源于stack exchange,提问作者pbrickner2022
相关产品推荐
相关产品推荐

