如何使用Python实现简易账户管理系统,支持开户及存取款合规校验
Python简易账户管理系统修改方案
以下是针对你遇到的两个卡点的完整修复代码,已覆盖所有需求:
# 读取账户数据 data = {} with open("account.txt", "r", encoding="utf-8") as f: print("Which account do you want to use?") for line in f: line = line.strip() if not line: continue acc_info = line.split(", ") account_number = int(acc_info[0]) name = acc_info[1] balance = float(acc_info[2]) data[account_number] = [name, balance] print(f" [{account_number}] {name}") print(" [+] Create new account") print(" [0] End") # 修复输入识别问题:先保留字符串格式判断 input_first = input(" Your input: ").strip() current_acc = None if input_first == '0': print("Thank you and see you again") exit() elif input_first == '+': # 实现新账户创建逻辑 new_acc_num = max(data.keys()) + 1 if data else 1 new_name = input("请输入账户持有人姓名:").strip() # 校验初始余额合法性 while True: init_balance_input = input("请输入初始余额:").strip() try: init_balance = float(init_balance_input) if init_balance < 0: print("错误:初始余额不能为负数,请重新输入") continue break except ValueError: print("错误:请输入有效的数字金额") # 写入新账户到文件 with open("account.txt", "a", encoding="utf-8") as f: f.write(f"\n{new_acc_num}, {new_name}, {init_balance}") # 更新内存数据 data[new_acc_num] = [new_name, init_balance] print(f"新账户创建成功,账号为:{new_acc_num}") current_acc = new_acc_num else: # 尝试转为账号数字 try: input_acc = int(input_first) if input_acc not in data: print("错误:输入的账号不存在") exit() current_acc = input_acc except ValueError: print("错误:输入内容不合法") exit() # 账户操作逻辑 while True: acc_info = data[current_acc] name = acc_info[0] current_balance = acc_info[1] print(f"\n当前账户:{name} 余额:{current_balance:.2f} $") print("[1] Deposit\n[2] Withdraw\n[0] 返回上一级") execution = input(" Your Input: ").strip() if execution == '0': break try: execution = int(execution) except ValueError: print("错误:请输入有效的操作编号") continue if execution == 1: # 存款逻辑加负金额校验 deposit_input = input(" Your deposit: ").strip() try: deposit = float(deposit_input) except ValueError: print("错误:请输入有效的金额数字") continue if deposit < 0: print("错误:存款金额不能为负数") continue new_balance = current_balance + deposit data[current_acc][1] = new_balance print(f"存款成功,当前余额为:{new_balance:.2f} $") elif execution == 2: # 取款逻辑加负金额和透支校验 payout_input = input(" Your pay out: ").strip() try: payout = float(payout_input) except ValueError: print("错误:请输入有效的金额数字") continue if payout < 0: print("错误:取款金额不能为负数") continue if payout > current_balance: print("错误:账户余额不足,不允许透支") continue new_balance = current_balance - payout data[current_acc][1] = new_balance print(f"取款成功,当前余额为:{new_balance:.2f} $") else: print("错误:不存在的操作编号") continue # 全量写入文件避免全局替换的错误问题 with open("account.txt", "w", encoding="utf-8") as f: lines = [] for acc_num, info in data.items(): lines.append(f"{acc_num}, {info[0]}, {info[1]}") f.write("\n".join(lines))
主要修改点说明
- 输入逻辑调整:不再直接将首输入转为int,先判断是否为
+或0,其余内容再尝试转为账号,解决+输入识别问题 - 新增三层金额校验:存款金额不能为负、取款金额不能为负、取款金额不能超过当前余额,触发任意条件直接拦截操作
- 修复原文件写入隐患:原全局替换余额的逻辑存在多账户同余额时批量误改的问题,改为全量重写账户数据,保证修改准确性
- 补全新账户创建逻辑:自动取最大账号+1作为新账号,同时校验初始余额不能为负
内容的提问来源于stack exchange,提问作者virat
相关产品推荐
相关产品推荐

