Python学生成绩平均计算逻辑异常问题求助
问题排查:平均成绩计算异常的原因及修复
核心问题根源
你遇到的5040.0这种离谱的平均成绩,几乎可以肯定是成绩输入没转成数值类型导致的。举个例子:如果期中成绩输入的是"50"、期末是"40",直接用字符串做加法的话,Python会把它们拼接成"5040",再转成浮点数就变成了5040.0——这完全不是你要的数值相加逻辑。
典型错误代码片段
你的代码大概率存在类似下面的问题(未做类型转换):
students = [] for _ in range(5): name = input("学生姓名:") mid_grade = input("期中成绩:") end_grade = input("期末成绩:") # 错误:字符串相加是拼接,不是数值求和 avg = (mid_grade + end_grade) / 2 students.append({"name": name, "avg": avg}) # 排序输出 students.sort(key=lambda x: x["avg"], reverse=True) for s in students: print(f"{s['name']} 平均成绩:{s['avg']}")
修复方法
只需要在获取成绩后,把输入的字符串转成int或者float类型,再进行计算:
students = [] for _ in range(5): name = input("学生姓名:") # 把输入转成整数(如果需要支持小数就用float) mid_grade = int(input("期中成绩:")) end_grade = int(input("期末成绩:")) # 正确计算平均分 avg = (mid_grade + end_grade) / 2 students.append({"name": name, "avg": avg}) # 按平均分降序排序 students.sort(key=lambda x: x["avg"], reverse=True) # 格式化输出 print("\n学生平均成绩排名(从高到低):") for rank, student in enumerate(students, 1): print(f"{rank}. {student['name']}: {student['avg']:.1f}")
额外排查方向
如果已经做了类型转换但还是有问题,检查这几点:
- 是不是把除法写成了乘法,或者公式写错(比如写成
mid_grade + end_grade * 2) - 输入成绩时是不是手滑多打了数字(比如把50输成5000)
- 存储成绩的变量有没有被其他代码意外篡改
内容的提问来源于stack exchange,提问作者Billy Joel
相关产品推荐
相关产品推荐

