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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:35:31