Python初学者ATM项目:Withdraw后余额无法持久化问题求助
解决取款/存款后余额无法持久化的问题
问题核心是你只计算了操作后的新余额,但没有把这个值写回balance列表对应的位置,导致每次重新验证PIN后,程序读取的还是初始余额。
修改方案
只需要在取款和存款操作完成后,将计算出的新余额更新到balance列表中即可:
- 取款成功后,执行
balance[pol] = difference - 存款完成后,执行
balance[pol] = sums
修改后的完整代码
pin = [123, 456, 789] balance = [50000, 2000, 500] name = ["name1", "name2", "name3"] def main(): while True: pin_input = input('Enter pin:') try: n = int(pin_input) except: break if n in pin: print('1 – Balance Inquiry') print('2 – Withdraw') print('3 – Deposit') print('X – Exit') choice = input('Enter your choice:') # 先判断退出选项,避免转换int报错 if choice.upper() == 'X': print('Thank you for banking with us!') break try: c = int(choice) except ValueError: print('Invalid choice, please enter a number or X') continue pol = pin.index(n) if c == 1: print(f'Hi {name[pol]}.') print(f'Your current balance is {balance[pol]} ') elif c == 2: print(f'Hi {name[pol]}.') print(f'Your current balance is {balance[pol]} ') withdraw = int(input('Enter amount to withdraw: ')) if withdraw > balance[pol]: print('Not enough amount') else: difference = balance[pol] - withdraw balance[pol] = difference # 更新余额到列表 print('Transaction Successful') print(f'Your current balance is {difference}') elif c == 3: print(f'Hi {name[pol]}.') print(f'Your current balance is {balance[pol]} ') deposit = int(input('Enter amount to deposit: ')) sums = deposit + balance[pol] balance[pol] = sums # 更新余额到列表 print('') print(f'Your current balance is {sums}') else: print('Invalid choice, please select 1, 2, 3 or X') main()
额外优化了两处细节:
- 先判断
X退出选项,避免把非数字的X强制转换为int时抛出异常 - 增加了输入无效选项时的错误提示,提升程序健壮性
内容的提问来源于stack exchange,提问作者raja
相关产品推荐
相关产品推荐

