Python银行小游戏条件判断失效问题求助(存款/取款异常)
银行小游戏死循环问题分析与修复方案
问题现象
实现了包含3个模块与主文件bank.py的简易银行小游戏,支持存款、取款功能,但存在以下异常:
- 钱包余额为0时选择存款选项(2),会陷入输入死循环
- 银行余额为0时选择取款选项(3),同样会陷入输入死循环
错误原因
主程序拦截逻辑错误
主文件bank.py中,判断钱包无钱的条件为money.wallet_balance < 0,判断银行无钱的条件为money.bank_balance < 0。但余额为0时并不满足<0的条件,导致无法拦截用户的无效操作,用户仍会进入存款/取款函数。存款/取款函数循环未处理余额为0的场景
进入bank_deposit.py或bank_withdraw.py后,当余额为0时,用户输入任何正数都会触发else分支提示余额不足,但循环不会终止,会持续要求用户输入,最终陷入死循环。
修复方案
核心修复:修正主程序的拦截条件
将bank.py中判断余额不足的条件从<0改为<=0,直接在主菜单层面拦截无效操作,避免进入后续函数。
双重保险:函数内增加余额检查
在存款、取款函数开头增加余额为0的判断,若余额为0则直接提示并终止函数,防止意外进入循环。
修改后的代码
money.py(无修改)
bank_balance = 500.00*100 wallet_balance = 500.00*100
bank_deposit.py(中文提示+余额检查)
import money def bank_deposit(): # 新增:钱包余额为0时直接提示并退出 if money.wallet_balance <= 0: print("你钱包里一分钱都没有,没法存款!") return while True: try: deposit = float(input("请输入存款金额:")) if deposit <= money.wallet_balance/100 and deposit > 0: print(f"已存入${deposit}!") break elif deposit == 0: print("不能存0美元!") continue elif deposit < 0: print("你怎么能存负数金额的钱?别闹了,重新输入!") continue else: print(f"你口袋里的钱不够!你只有${round(money.wallet_balance/100, 2)}。") continue except ValueError: print("输入必须是有效的数字!") money.bank_balance += deposit*100 money.wallet_balance -= deposit*100 print(f"银行账户余额:${round(money.bank_balance/100, 2)}") print(f"你现在口袋里有${round(money.wallet_balance/100, 2)}。")
bank_withdraw.py(中文提示+余额检查)
import money def bank_withdraw(): # 新增:银行余额为0时直接提示并退出 if money.bank_balance <= 0: print("你的银行账户是空的,没法取款!") return while True: try: withdraw = float(input("请输入取款金额:")) if withdraw <= money.bank_balance/100 and withdraw > 0: print(f"已取出${withdraw}!") break elif withdraw == 0: print("不能取0美元!") continue elif withdraw < 0: print("你怎么能取负数金额的钱?别闹了,重新输入!") continue else: print(f"你的银行账户里钱不够!你只有${round(money.bank_balance/100, 2)}") continue except ValueError: print("输入必须是有效的数字!") money.wallet_balance += withdraw*100 money.bank_balance -= withdraw*100 print(f"银行账户余额:${round(money.bank_balance/100, 2)}") print(f"你现在口袋里有${round(money.wallet_balance/100, 2)}。")
bank.py(中文提示+修正拦截条件)
import money, bank_deposit, bank_withdraw print("欢迎来到银行。请坐。我能为您做点什么?\n") print("1. 我想查询余额。") print("2. 我想存款。") print("3. 我想取款。") print("4. 我改变主意了(离开)。") leave_bank = False while True: try: while True: banker_ans = int(input("\n选择一个选项(1/2/3/4):")) if banker_ans == 1: print(f"您的银行账户当前有${round(money.bank_balance/100, 2)}。") print(f"您的钱包里有${round(money.wallet_balance/100, 2)}。") print("\n还有其他我能帮您的吗?") continue # 修改条件:从 <0 改为 <=0 if banker_ans == 2 and money.wallet_balance <= 0: print("\n抱歉,您没有钱可以存款。") continue if banker_ans == 2: bank_deposit.bank_deposit() print("\n还有其他我能帮您的吗?") continue # 修改条件:从 <0 改为 <=0 if banker_ans == 3 and money.bank_balance <= 0: print("\n抱歉,您的银行账户是空的。") continue if banker_ans == 3: bank_withdraw.bank_withdraw() print("\n还有其他我能帮您的吗?") continue if banker_ans == 4: print("感谢您的光临,欢迎再次回来!") leave_bank = True break else: print("请输入1到4之间的数字,然后按回车键。") continue if leave_bank: break except ValueError: print("请先输入数字,然后再按回车键。")
内容的提问来源于stack exchange,提问作者Lorak
相关产品推荐
相关产品推荐

