为何学生成绩判定代码进入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
相关产品推荐
相关产品推荐

