Python 3.9成绩判定程序未通过隐藏测试,请求逻辑排查修正
代码问题排查与修正
需求回顾
需开发Python程序,接收论文成绩(papers)和常规考试成绩(test)两个实数,二者各占最终平均分50%,判定学生三类情况:
- 通过(Passed):最终平均分≥6;
- 可参加替代考试:替换常规考试为满分(10分)后,最终平均分≥6;
- 不及格(Failed):当前平均分<6,且替换后仍<6。
原代码问题分析
papers = float(input()) test = float(input()) avg = (papers + test) / 2 sub_test = 10 if avg >= 6: print("passed") elif test or papers or avg < 0: if test == 0: avg = (sub_test + papers) / 2 print( "Perhaps with the substitutive test") elif papers == 0 or avg < 6: avg = avg print( "failed")
原代码存在多处逻辑错误,导致无法通过测试:
- 条件分支逻辑偏离需求:
elif test or papers or avg < 0完全不符合判定逻辑,该条件会在test/papers非零、或平均分小于0时触发,和需求的三类情况判定无关。 - 替代考试判定限制错误:错误地将
test == 0作为触发替代考试判断的前提,需求中无此限制,只要替换常规考试为满分后的平均分≥6,就符合替代考试条件。 - 不及格判定逻辑混乱:最后的
elif papers == 0 or avg < 6没有正确判断替换后的平均分是否仍低于6,无法覆盖所有不及格场景。
修正后的代码
papers = float(input()) test = float(input()) current_avg = (papers + test) / 2 substitute_avg = (papers + 10) / 2 # 替换常规考试为满分后的平均分 if current_avg >= 6: print("Passed") elif substitute_avg >= 6: print("Perhaps with the substitutive test") else: print("Failed")
逻辑说明
- 先计算当前平均分和替换后的平均分两个核心值;
- 优先判断当前平均分是否≥6,满足则输出
Passed; - 若当前不通过,判断替换后的平均分是否≥6,满足则输出替代考试提示;
- 若上述两个条件都不满足,输出
Failed。
这个逻辑完全贴合需求,能正确覆盖所有测试场景。
内容的提问来源于stack exchange,提问作者rdg123
相关产品推荐
相关产品推荐

