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

CS50p Refuel习题集:test_fuel.py本地测试通过但check50失败求助

CS50p Refuel习题集:test_fuel.py无法通过check50的问题排查

test_fuel.py中的关键错误

  • test_convert函数的语法错误:第一个断言语句误用了单等号=(赋值操作),正确的比较操作应该用双等号==:
    # 错误写法
    assert convert("1/2") = 50
    # 正确写法
    assert convert("1/2") == 50
    
  • test_gauge函数缺少断言逻辑:当前代码仅做了函数调用与值的比较,但未添加assert关键字,导致这些测试实际上没有验证任何结果——pytest会默认标记这类无断言的测试为通过,但check50会检测测试的有效性。正确写法需补充assert:
    # 错误写法
    gauge(50) == "50%"
    gauge(1) == "E"
    gauge(99) == "F"
    # 正确写法
    assert gauge(50) == "50%"
    assert gauge(1) == "E"
    assert gauge(99) == "F"
    

fuel.py中不符合测试要求的问题

convert函数内部包含while True循环和input调用,违反了函数的单一职责原则:convert应该仅接收传入的字符串参数并返回计算结果,而非自行获取用户输入。check50的测试会直接传入参数调用convert,此时函数内部的input会打断测试流程,导致测试无法正常完成。同时,原代码用int()截断小数的方式不符合习题集要求的四舍五入规则。修改后的convert函数示例:

def convert(fraction):
    numerator, denominator = fraction.split("/")
    denominator = int(denominator)
    numerator = int(numerator)
    
    if denominator == 0:
        raise ZeroDivisionError
    if numerator > denominator:
        raise ValueError
    
    percent = round(numerator / denominator * 100)
    return percent

总结

修复test_fuel.py的断言错误,调整convert函数为纯函数(移除循环和输入逻辑),并修正百分比计算的四舍五入规则,即可通过check50的测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:05:18