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

CS50P Problem Set3:Fuel.py程序测试未通过,请求排查问题

问题排查与修复方案

1. 输入100/100、99/100未输出F

  • 原代码中输出F的条件percent>98逻辑上虽等价于≥99,但存在歧义;更关键的是get_fuel函数用字符串比较x和y的大小,可能引发隐性逻辑错误(比如字符串"10"<="3"会被判定为True)。修复时需明确条件为percent>=99,同时修正数值比较逻辑。

2. 输入10/3时未拒绝输入

  • 原代码直接用字符串比较x<=y,字符串按ASCII字符顺序对比,导致"10"<="3"被误判为合法。正确做法是先将x、y转为整数,再比较大小。

3. 输入5-10时未拒绝输入

  • 原代码的try-except包裹了整个while循环,输入不含"/"的内容触发ValueError后,会直接退出循环而非重新提示。需将try-except移至循环内部,捕获单次输入的异常后继续循环。

修正后的完整代码

def main():
    a, b = get_fuel()
    percent = round(a / b * 100)
    if percent <= 1:
        print("E")
    elif percent >= 99:
        print("F")
    else:
        print(f"{percent}%")


def get_fuel():
    while True:
        try:
            fuel = input("Fraction: ")
            x_str, y_str = fuel.split("/")
            # 转换为整数,非整数输入会触发ValueError
            x = int(x_str)
            y = int(y_str)
            # 校验除数为0或分子大于分母的情况
            if y == 0 or x > y:
                continue
            return x, y
        except (ValueError, ZeroDivisionError):
            # 捕获异常后继续循环,重新提示输入
            continue


main()

代码说明

  • get_fuel函数优化:
    • 把异常捕获逻辑放到循环内部,确保输入错误后持续提示用户。
    • 先将输入转为整数,自动过滤非整数输入;再校验y是否为0、x是否大于y,符合题目拒绝条件。
  • main函数条件修正:
    • 将输出F的条件改为percent>=99,明确匹配题目要求的≥99%输出F,消除逻辑歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 06:04:58