zoukankan      html  css  js  c++  java
  • 3.20作业

    运用函数对象优化 if 形式

    main_dic={
    '1':('充值',ad_credit),
    '2':('转账',transfer),
    '3':('提现',cashon),
    '4':('查询余额',check),
    '0':('登出',logout)
    }
    while True:
    cmd = input('''
    请输入你想使用的功能序号
    1:充值
    2:转账
    3:提现
    4:查询余额
    0:登出
    ''')
    if not cmd.isdigit():
    print('请输入数字')
    continue
    if cmd == '0':
    logout()
    break
    if cmd in main_dic:
    main_dic[cmd][1]()

      

    # 2、编写计数器功能,要求调用一次在原有的基础上加一
    # 温馨提示:
    # I:需要用到的知识点:闭包函数+nonlocal
    # II:核心功能如下:
    # def counter():
    #     x+=1
    #     return x
    
    
    
    
    
    import time
    def f1(a):
        def f2():
            nonlocal a
            a += 1
            print('{}秒'.format(a))
        f2()
        return a
    star = input('起始秒数:')
    star = int(star)
    while 1:
        star = f1(star)
        time.sleep(1)
    

      

    '''
    # 编写ATM程序实现下述功能,数据来源于文件db.txt
    # 0、注册功能:用户输入账号名、密码、金额,按照固定的格式存入文件db.txt
    # 1、登录功能:用户名不存在,要求必须先注册,用户名存在&输错三次锁定,登录成功后记录下登录状态(提示:可以使用全局变量来记录)
    
    # 下述操作,要求登录后才能操作
    # 1、充值功能:用户输入充值钱数,db.txt中该账号钱数完成修改
    # 2、转账功能:用户A向用户B转账1000元,db.txt中完成用户A账号减钱,用户B账号加钱
    # 3、提现功能:用户输入提现金额,db.txt中该账号钱数减少
    # 4、查询余额功能:输入账号查询余额
    '''
    import os
    # 登陆
    def login():
        count = 0
        while True:
            inp_user = input("账号:").strip()
            if os.path.exists(r'locked{}.txt'.format(inp_user)):
                print("该账号已被锁定")
                count = 0
                continue
            inp_pwd = input("密码:").strip()
            msg = login_register_file(0, user=inp_user, pwd=inp_pwd)
            if msg:
                global login_user
                login_user = inp_user
                return print("登录成功")
            else:
                if msg is None:
                    print("该账号不存在")
                else:
                    if count == 2:
                        print("错误次数过多,账号已被锁定")
                        with open(r'locked{}.txt'.format(inp_user), 'wt', encoding='utf-8') as f:
                            f.write('')
                        continue
                    print("密码错误,剩余次数:{}".format(2-count))
                    count += 1
    # 注册
    def register():
        while True:
            inp_user = input("账号:").strip()
            inp_pwd = input("密码:").strip()
            inp_pwd2 = input("确认密码:").strip()
            inp_money = input("金额:").strip()
            if not (inp_user or inp_pwd or inp_pwd2 or inp_money):
                print("输入不能为空")
                continue
            if inp_pwd != inp_pwd2:
                print("两次密码不一致")
                continue
            if login_register_file(1, user=inp_user, pwd=inp_pwd, money=inp_money):
                return print("注册成功")
            else:
                print("账号已存在")
    
    # 登录注册功能实现函数
    def login_register_file(acount, **kwargs):
        with open(r'db.txt', 'at', encoding='utf-8') as w, 
                open(r'db.txt', 'rt', encoding='utf-8') as r:
            if acount == 0:
                r.seek(0, 0)
                for line in r:
                    user, pwd,*_ = line.strip().split(':')
                    if kwargs['user'] == user and pwd:
                        if kwargs['pwd'] == pwd:
                            return True
                        else:
                            return False
                else:
                    return None
            if acount == 1:
                if r:
                    r.seek(0, 0)
                    for line in r:
                        is_user, *_ = line.strip().split(':')
                        if kwargs['user'] == is_user:
                            return False
                    else:
                        w.write('{}:{}:{}
    '.format(kwargs['user'], kwargs['pwd'], kwargs['money']))
                        return True
                else:
                    w.write('{}:{}:{}
    '.format(kwargs['user'], kwargs['pwd'], kwargs['money']))
                    return True
    
    # 充值
    def recharge():
        inp_money = input("请输入充值金额:").strip()
        msg = func_file('recharge', money=int(inp_money))
        if msg == 200:
            print("充值成功")
        else:
            print("充值失败")
            
    # 转账
    def transfer():
        inp_other = input("请输入对方账号:").strip()
        inp_money = input("请输入转账金额:").strip()
        if not is_user(inp_other):
            print("对方账号不存在")
        msg = func_file('transfer', other_user=inp_other, money=int(inp_money))
        if msg == 200:
            print("转账成功")
        else:
            print(msg)
    
    # 提现
    def withdraw():
        inp_money = input("请输入提取金额:").strip()
        msg = func_file('withdraw', money=int(inp_money))
        if msg == 200:
            print('提现成功')
        else:
            print(msg)
            
    # 查询余额
    def balance():
        inp_user = input("请输入你的账号:").strip()
        if inp_user == login_user:
            money = func_file('balance', user=inp_user)
            print("【{}】,您的余额为:{}元".format(login_user, money))
        else:
            print("账号错误")
    
    def is_user(other_user):
        with open(r'db.txt', 'rb') as r:
            # 判断对方用户是否存在
            for line in r:
                user, *_ = line.decode('utf-8').strip().split(':')
                if other_user == user:
                    return True
            else:
                return False
    
    # 功能函数
    def func_file(acount, **kwargs):
        with open(r'db.txt', 'rb') as r,
            open(r'db.txt.swap', 'wb') as w:
            # 查询余额
            if acount == 'balance':
                while True:
                    user, *_, money = r.readline().decode('utf-8').strip().split(':')
                    if kwargs['user'] == user and money:
                        return money
            while True:
                line = r.readline()
                if len(line) == 0:
                    break
                user, pwd, old_money = line.decode('utf-8').strip().split(':')
                old_money = int(old_money)
                if login_user == user and pwd and old_money:
                    # 充值
                    if acount == 'recharge':
                        my_money = old_money + kwargs['money']
                    else:
                        # 转账以及提取金额
                        if old_money >= kwargs['money']:
                            my_money = old_money - kwargs['money']
                        else:
                            os.remove('db.txt.swap')
                            return '转账失败,余额不足'
                    w.write('{}:{}:{}
    '.format(login_user, pwd, my_money).encode('utf-8'))
                else:
                    # 转账后对方账户余额
                    if kwargs.get('other_user') == user and pwd and old_money:
                        user_money = old_money + kwargs['money']
                        w.write('{}:{}:{}
    '.format(kwargs.get('other_user'), pwd, user_money).encode('utf-8'))
                    else:
                        w.write('{}:{}:{}
    '.format(user, pwd, old_money).encode('utf-8'))
        os.remove(r'db.txt')
        os.rename('db.txt.swap', 'db.txt')
        return 200
    
    login_user = None
    
    func_dic={
        '1': ('充值', recharge),
        '2': ('转账', transfer),
        '3': ('提现', withdraw),
        '4': ('余额', balance),
        '5': ('登录', login),
        '6': ('注册', register),
        '0': ('退出', None)
    }
    
    def main():
        while True:
            print('ATM'.center(22, '-'))
            for i in func_dic:
                print('{} {}'.format(i, func_dic[i][0]).center(18))
            print('END'.center(22, '-'))
            cmd = input("请输入编号:").strip()
            if not cmd.isdigit():
                print("必须输入编号")
                continue
            if cmd == '0':
                break
            if cmd in func_dic:
                if login_user and cmd == '5':
                    print("请勿重复登录")
                    continue
                if not login_user and cmd not in ['5', '6']:
                    print("请先登录")
                else:
                    func_dic[cmd][1]()
                print(login_user)
            else:
                print("编号不存在")
    
    if __name__ == '__main__':
        main()
    

      

  • 相关阅读:
    gitlab 拉代码提示:Your Account has been blocked. fatal: Could not read from remote repository. 最佳解决方案
    关于C语言开大数组溢出的问题
    三元组转置稀疏矩阵
    传递二维数组
    vue3下把json放哪才能获得get到
    VM下Ubuntu的nat模式连不上wifi
    C3863 不可指定数组类型“int [510]”
    PAT1005 Spell It Right
    PAT1004 Counting Leaves
    PAT1002 A+B for Polynomials
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12534483.html
Copyright © 2011-2022 走看看