You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 13:37:28