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

Python While循环未回到起始:CS50可乐机程序故障排查

问题分析与修复

你的代码核心问题有两个:

  1. 硬币输入仅执行一次:coin = int(input("Insert coin: "))放在循环外部,导致循环只会反复使用第一次输入的硬币值计算,无法接收新的投入,自然没法正常循环。
  2. 逻辑顺序完全混乱:在while循环里先修改剩余金额,再判断硬币和剩余金额的关系,搞反了判断逻辑,导致错误触发分支。

修正后的代码

def main():
    machine()

def machine():
    amount_due = 50
    print("Total amount:", amount_due)
    
    while amount_due > 0:
        coin = int(input("Insert coin: "))
        amount_due -= coin
        
        if amount_due < 0:
            print(f"Change due: {abs(amount_due)}")
            break
        elif amount_due == 0:
            print("Thank you for your money!")
            break
        else:
            print(f"Amount due: {amount_due}")

main()

关键修改说明

  • 将硬币输入语句移到while循环内部,保证每次循环都能接收新的硬币投入。
  • 循环条件改为amount_due > 0,只要未付清金额就继续循环。
  • 先扣除硬币金额,再根据剩余金额的状态执行对应逻辑:
    • 剩余金额为负:计算并输出找零,随后退出循环
    • 剩余金额为0:直接提示感谢并退出
    • 剩余金额仍为正:提示当前还需支付的金额,继续循环

这样就能完全匹配你的需求:循环收取硬币,金额不足时显示剩余应付款,金额足够时输出找零或感谢提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:42:53