You need to enable JavaScript to run this app. 为何学生成绩判定代码进入else分支后始终输出F等级?
优惠活动
大模型
产品
解决方案
定价
更多

为何学生成绩判定代码进入else分支后始终输出F等级?

问题根因

固定输出F的核心原因是综合成绩计算环节多做了一步除以3的操作,具体逻辑偏差:

  • 你设定的成绩权重为作业25%、期中25%、期末50%,这套规则算出的结果本身就是满分100的百分制综合成绩,不需要额外做平均处理。
  • 你在所有成绩等级判定的表达式末尾,都给加权结果加了/3的运算,直接把本该是百分制的分数压缩到原数值的1/3,导致计算结果永远远低于你设置的各等级分数线阈值。

实际计算验证

取测试场景:作业80分、期中80分、期末100分
原代码进入else分支后的计算过程:

判定数值 = (0.2580 + 0.2580 + 0.5*100) / 3 = 90 / 3 = 30

哪怕作业、期中、期末全部拿满分,原代码算出的判定数值也仅为(0.25100 + 0.25100 + 0.5*100)/3 ≈33.3,永远达不到50分的F档触发线,自然无论输入多少期末成绩,都会输出F。

修复方法

删掉所有判定表达式末尾多余的/3即可,修复后的核心判定逻辑:

if (0.25 * x + 0.25 * y + 0.5 * z) < 50:
    print(w + ": F")
elif (0.25 * x + 0.25 * y + 0.5 * z) < 60:
    print(w + ": D")
elif (0.25 * x + 0.25 * y + 0.5 * z) < 70:
    print(w + ": C")
elif (0.25 * x + 0.25 * y + 0.5 * z) < 80:
    print(w + ": B")
else:
    print(w + ": A")

代码优化建议

当前代码每次等级判定都要重复计算一遍加权综合分,可在进入else分支后将加权结果存储为变量,减少重复运算:

else:
    z = int(input("Input Final Score:"))
    total_score = 0.25 * x + 0.25 * y + 0.5 * z
    if total_score < 50:
        print(w + ": F")
    elif total_score < 60:
        print(w + ": D")
    elif total_score < 70:
        print(w + ": C")
    elif total_score < 80:
        print(w + ": B")
    else:
        print(w + ": A")

内容的提问来源于stack exchange,提问作者doofenshmirtz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.01 16:45:07