调用deposit方法后check_balance方法余额未更新,寻求修复方案
问题原因与修复方案
核心问题点
- 变量作用域混乱:全局
balance和display_menu内的局部balance冲突,deposit更新的是局部变量,但check_balance读取的是全局初始值0。 - 递归调用未传递状态:每次调用
display_menu都会重新初始化局部balance=0,更新后的余额无法保留。 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
相关产品推荐
相关产品推荐

