python函数构建银行系统(带装饰器)

记录代码是假的,寻求帮助是真的

在添加装饰器前没有问题,基础不够有了bug

仔细检查后也没发现哪个对象错误调用,先在此记录,避免不了了之

import datetime
#import prettytable as pt
Balance = 10000
account_log = []

def validate(func):
    """
    装饰器函数
    :param func: 接受任何参数:元组、字典
    :return: wrapper(装饰器)
    """
    def wrapper(*args,**kwargs): #接受任何参数:元组、字典
        amount = str(args[0])    #改变为字符串格式
        # 123.456 index('.')
        index = amount.index(".")
        if len(amount)-index-1>2:
            print("输入格式有误,小数点后最多保留后2位")
        else:
            func(*args,**kwargs)
        return wrapper

@validate
def deposit(amount):
    """
    存款操作
    :param amount: 存款金额
    :return: None
    """
    global Balance     #全局变量函数内使用
    Balance += amount
    write_log(amount,'存入')

@validate
def withdrawal(amount):
    """
    取款操作
    :param amount: 取款金额
    :return: None
    """
    global Balance
    if amount > Balance:
        print('余额不足')
    else:
        Balance -= amount
    write_log(amount,'取出')

def write_log(amount,type):
    """
    写入日志
    :param amount: 金额
    :param type: 操作类型
    :return: None
    """
    now = datetime.datetime.now()
    create_time = now.strftime("%Y-%m-%d %H:%M:%S")
    data = [create_time,type, amount,f"{Balance:.2f}"]
    account_log.append(data)

def print_log():
    """
    查看流水
    :return: None
    """
    print(account_log)

def show_menu():
    menu = """
    操作菜单:
    0:退出
    1:存款
    2:取款
    3:打印交易信息
    """
    print(menu)


while True: #循环一直进行
    show_menu()
    num = int(input("请根据菜单编号输入:"))
    if num == 0:
        print('您已退出系统')
        break
    elif num == 1:
        print("存款")
        amount = float(input('请输入存款金额:'))
        deposit(amount)
        print(f'当前余额是{Balance:.2f}')  #限制输出小数位
    elif num == 2:
        print("取款")
        amount = float(input('请输入取款金额:'))
        withdrawal(amount)
        print(f'当前余额是{Balance:.2f}')
    elif num == 3:
        print("查看记录")
        print_log()
    else:
        print("错误")

图:报错情况

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值