Python While循环未回到起始:CS50可乐机程序故障排查
问题分析与修复
你的代码核心问题有两个:
- 硬币输入仅执行一次:
coin = int(input("Insert coin: "))放在循环外部,导致循环只会反复使用第一次输入的硬币值计算,无法接收新的投入,自然没法正常循环。 - 逻辑顺序完全混乱:在
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
相关产品推荐
相关产品推荐

