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
相关产品推荐
相关产品推荐

