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

调用deposit方法后check_balance方法余额未更新,寻求修复方案

问题原因与修复方案

核心问题点

  1. 变量作用域混乱:全局balance和display_menu内的局部balance冲突,deposit更新的是局部变量,但check_balance读取的是全局初始值0。
  2. 递归调用未传递状态:每次调用display_menu都会重新初始化局部balance=0,更新后的余额无法保留。
  3. check_balance未接收当前余额:该函数硬依赖全局变量,无法获取实际操作的局部余额。

修复后的代码

def display_menu(balance=0):
    print('1.Check Balance \n2.Deposit \n3.Withdraw \n4.Exit')
    choice = int(input('Please make a choice: '))
    if choice == 1:
        check_balance(balance)
        display_menu(balance)
    elif choice == 2:
        balance = deposit(balance)
        display_menu(balance)
    elif choice == 3:
        balance = withdraw(balance)
        display_menu(balance)
    elif choice == 4:
        print('Thank you have a good day')
        
def deposit(balance):
    deposit_amount = float(input('Please enter the amount you wish to deposit: '))
    balance += deposit_amount
    print(f'The updated balance is: {balance:.2f}')
    return balance 

def withdraw(balance):
    withdraw_amount = float(input('Please enter the amount you wish to withdraw: '))
    if withdraw_amount > balance:
        print('Insufficient funds')
        return balance
    balance -= withdraw_amount
    print(f'The updated balance is: {balance:.2f}')
    return balance
      
def check_balance(balance):
    print(f'Balance is: {balance:.2f}')
       
display_menu()

关键修改说明

  • 去掉全局balance,将balance作为display_menu的参数,默认初始值为0,递归调用时传递更新后的余额,保证状态持续。
  • 修改check_balance,让它接收balance参数,直接使用传入的当前余额,不再依赖全局变量。
  • 补充withdraw函数的实现(原代码缺失,会导致调用时报错),完善取款逻辑。
  • 移除display_menu内多余的局部balance=0初始化和无意义的choice == ' '判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:56:06