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

银行ATM模拟代码运行异常:余额显示/姓名存储等问题求助

ATM模拟代码问题修复

问题现象

  • 输入B、D或W时,循环显示0.0而非输入的初始余额
  • 姓名无法传入printMenu(n),输出仅显示空白;若执行Name=printMenu(n),会打印输入的姓名但同时输出“none”
  • 取款、存款功能逻辑完全错误

问题根源

  • 主程序中用户输入姓名和余额后,立即用Name = ""、Balance = 0.0覆盖了初始值,导致后续操作使用的是0余额
  • printMenu函数无返回值,赋值给变量会得到None;且调用时传入的是被覆盖后的空字符串,所以显示空白
  • withdraw函数缩进错误,余额修改代码在return之后永远不会执行,且取款逻辑逻辑颠倒
  • 主循环中各命令逻辑错误:
    • B命令错误执行Balance = Balance + Amount,未正确显示当前余额
    • W命令使用了不存在的withdrawl变量,逻辑混乱
    • D命令错误执行Deposit = Deposit + Balance,未正确更新余额

修复后的完整代码

# april 8th, 2023
# bank atm

def printMenu(n):
    print("*" * 40)
    print("welcome", n, "to the bank")
    print("W for the WITHDRAWAL, B for balance, D for deposit, Q for quit")
    print("*" * 40)

def getTransaction():
    retval = input("what would you like to do: ").strip().upper()
    return retval

def formatCurrency(amt):
    return "${:,.2f}".format(amt)

def withdraw(bal, amt):
    # 判断余额是否足够取款
    if bal >= amt:
        return bal - amt
    else:
        print("Insufficient balance!")
        return bal

# main program
Name = input("name on your bank account: ")
Balance = float(input("your current balance: "))

# 移除覆盖初始值的错误代码
Amount = 0.0
Command = ""

printMenu(Name)
Command = getTransaction()

while Command != "Q":
    if Command == "B":
        # 显示当前余额,使用格式化函数
        print("Current Balance:", formatCurrency(Balance))
    elif Command == "W":
        try:
            Amount = float(input("Enter withdrawal amount: "))
            Balance = withdraw(Balance, Amount)
            print("Withdrawal successful! New balance:", formatCurrency(Balance))
        except ValueError:
            print("Invalid amount! Please enter a number.")
    elif Command == "D":
        try:
            Amount = float(input("Enter deposit amount: "))
            if Amount > 0:
                Balance += Amount
                print("Deposit successful! New balance:", formatCurrency(Balance))
            else:
                print("Deposit amount must be positive!")
        except ValueError:
            print("Invalid amount! Please enter a number.")
    else:
        print("Invalid command! Please enter W/B/D/Q.")

    printMenu(Name)
    Command = getTransaction()

print("thank you for your transactions.")

修复说明

  • 保留用户输入的初始姓名和余额,移除覆盖变量的错误代码
  • 修正printMenu的调用方式,直接传入用户输入的Name,无需赋值(函数无返回值)
  • 修复withdraw函数的缩进和逻辑:判断余额是否足够,返回更新后的余额或原余额(取款失败时)
  • 优化getTransaction函数,自动将输入转为大写并去除空格,提升容错性
  • 修正主循环中各命令的逻辑:
    • B命令:调用formatCurrency格式化显示当前余额
    • W命令:让用户输入取款金额,调用withdraw函数更新余额,增加异常处理防止非法输入
    • D命令:让用户输入存款金额,验证金额为正数后更新余额,增加异常处理
  • 添加无效命令的提示,提升用户体验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:47:38