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

Python银行小游戏条件判断失效问题求助(存款/取款异常)

银行小游戏死循环问题分析与修复方案

问题现象

实现了包含3个模块与主文件bank.py的简易银行小游戏,支持存款、取款功能,但存在以下异常:

  • 钱包余额为0时选择存款选项(2),会陷入输入死循环
  • 银行余额为0时选择取款选项(3),同样会陷入输入死循环

错误原因

  1. 主程序拦截逻辑错误
    主文件bank.py中,判断钱包无钱的条件为money.wallet_balance < 0,判断银行无钱的条件为money.bank_balance < 0。但余额为0时并不满足<0的条件,导致无法拦截用户的无效操作,用户仍会进入存款/取款函数。

  2. 存款/取款函数循环未处理余额为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:15:01