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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:54:03