Python计算学生平均成绩时最高分及姓名无法显示问题排查
学生课程平均分计算功能修复
现存逻辑错误
totalgrade函数返回值固定为初始定义的0,没有返回实际计算得到的学生平均成绩,主函数无法获取学生真实得分- 主函数遍历学生时没有存储每个学生的成绩和对应姓名,循环结束后只会保留最后一个学生的计算结果,前一个学生的数据直接丢失
- 最高分对比逻辑位置错误,写在了学生遍历循环外部,且直接将整个姓名元组赋值给最高分姓名字段,无法匹配到单个最高分学生
- 函数调用参数不匹配:
highestgrade定义时需要传入成绩、姓名两个参数,主函数调用时没有传任何参数,会直接触发运行报错 - 计算逻辑矛盾:代码注释标注编程作业占比50%,实际计算时按60%取值;
average函数return语句后定义的三个权重变量永远不会执行,属于无效代码;totalgrade内的while循环没有设置退出条件,属于冗余逻辑
修正后完整代码
def main(): names = ("Rebecca", "Jennifer") Welcome() student_records = [] for name in names: avg = totalgrade(name) student_records.append((name, avg)) highestgrade(student_records) def Welcome(): print("Hello, this program will calculate the average grade\n") def average(totalgrade, num): return totalgrade / num def totalgrade(name): print("Please enter your grades for the following assignments:", name) db = int(input("What was your discussion board grade?\n")) q = int(input("What was your quiz grade?\n")) pa = int(input("What was your program assignment grade?\n")) # 按权重计算折算后总分,三类作业满分均为100,总权重100% total_weighted_score = (db/100)*15 + (q/100)*25 + (pa/100)*60 grade_average = total_weighted_score print(f"Total number of points: {db+q+pa} out of 300") print(f"Your grade average for this course is: {grade_average:.2f}%\n") return grade_average def highestgrade(student_records): top_name, top_score = max(student_records, key=lambda x: x[1]) print(f"The student with the highest grade of {top_score:.2f}% is: {top_name}") if __name__ == "__main__": main()
调整说明
- 主函数中新增列表存储所有学生的(姓名,平均分)记录,避免循环覆盖导致数据丢失
- 修正
totalgrade返回值,直接返回计算得到的加权平均分,移除无效死循环、永远不会执行的冗余变量定义 - 调整
highestgrade参数逻辑,直接传入所有学生记录,通过max函数取最高分对应的学生信息 - 统一成绩计算逻辑,输出格式和原需求保持一致
内容的提问来源于stack exchange,提问作者ww25
相关产品推荐
相关产品推荐

