CS50 Python作业3 Fuel Gauge仅单测试项失败求助
CS50 Python作业3 Fuel Gauge:2/3输入结果不符合预期问题排查
问题概述
在CS50 Python作业3的Fuel Gauge任务中,仅当输入2/3时测试未通过:本地运行和check50检测均输出66%,但预期结果应为67%;其余分数输入的测试均正常通过,调整print语句格式无法解决问题。
核心原因
问题出在数值取整方式上:如果代码采用直接截断小数部分的取整逻辑(比如用int()转换浮点数),2/3计算得到的66.666...会被截断为66,而题目要求将百分比四舍五入到最近的整数,而非截断。
常见错误代码示例
如果你的代码类似以下写法,就会触发该问题:
fraction = input().strip() num, den = fraction.split('/') percent = (int(num) / int(den)) * 100 print(f"{int(percent)}%")
这里int(percent)直接截断了小数部分,导致66.666...被处理为66,不符合四舍五入要求。
解决方案
方案1:使用round()函数实现四舍五入
直接用Python内置的round()函数对计算结果进行四舍五入:
fraction = input().strip() num, den = fraction.split('/') num = int(num) den = int(den) percent = round((num / den) * 100) print(f"{percent}%")
round(66.666...)会返回67,完全符合预期。
方案2:用整数运算避免浮点精度问题(更稳妥)
如果担心极端分数场景下的浮点数精度误差,可以用纯整数运算实现四舍五入:
fraction = input().strip() num, den = fraction.split('/') num = int(num) den = int(den) # 公式逻辑:(分子*100 + 分母//2) // 分母,等价于四舍五入 percent = (num * 100 + den // 2) // den print(f"{percent}%")
针对2/3的计算:2*100=200,3//2=1,200+1=201,201//3=67,正好得到正确结果。
验证
修改后测试以下场景:
- 输入
1/2→ 输出50% - 输入
1/3→ 输出33% - 输入
2/3→ 输出67% - 输入
99/100→ 输出99%
所有结果均符合题目要求。
内容的提问来源于stack exchange,提问作者RedHorseMane
相关产品推荐
相关产品推荐

