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

CS50P:check50检测无输出但手动测试正常的问题求助

CS50P可乐机任务check50检测失败问题排查与修复

问题现象

手动测试输入两枚25美分硬币时,能正常输出Change Owed: 0,但使用check50自动检测时,出现错误提示:

:( coke terminates at 50 cents expected "Change Owed: 0...", not ""

代码问题分析

  • due变量未更新:每次插入有效硬币计算剩余金额后,代码仅打印了剩余金额,但未更新due变量的值。导致下一次循环仍会打印初始的Amount Due: 50,与任务要求的动态更新剩余应付款不符,check50检测时会判定输出异常。
  • 非法硬币处理错误:输入非5/10/25美分的硬币时,代码直接break终止程序,不符合任务要求——应忽略非法输入,继续提示用户插入正确硬币。
  • 冗余条件判断:单独判断result == 10的分支完全多余,会导致逻辑混乱,比如当用户累计插入40美分后,剩余10美分,此时直接输出找零并终止,不符合正常流程(应继续接受硬币直到金额足够)。

修复后的代码

due = 50

while due > 0:
    print(f"Amount Due: {due}")
    coin = int(input("Insert Coin: "))
    
    if coin in [5, 10, 25]:
        due -= coin

# 循环结束后统一计算并输出找零
change = abs(due)
print(f"Change Owed: {change}")

修复说明

  • 动态更新due变量:每次插入有效硬币后,用due -= coin直接更新剩余应付款,确保循环中打印的金额始终正确。
  • 修正非法输入处理:输入非法硬币时不做终止操作,循环会继续执行,重新提示用户插入正确硬币。
  • 简化逻辑结构:循环仅负责收集足够的硬币,循环结束后统一计算找零,避免冗余的条件判断,逻辑更清晰易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:31:17