小程序升级版,对python终端打印效果

发布时间:2019-06-11 21:21:06编辑:auto阅读(1823)

    06.09自我总结

    1.文件摆放

    ├── xxxx
    │   ├── run.py
    │   └── fil_mode.py
    │   └── data_time.py
    │   └── loading.py
    │   └── data_time.py
    │   └── register.py
    │   └── login.py
    │   └── top_up.py
    │   └── balance_enquiry.py
    │   └── shopping.py
    │   └── freeze.py

    2.运行文件

    1.run

    run.py

    from login import login
    from register import register
    from top_up import top_up
    from shopping import shopping
    from balance_enquiry import balance_enquiry
    from freeze import  freeze
    from login import login_name
    msg_dict ={
        '1':login,
        '0':register,
        '2':top_up,
        '3':balance_enquiry,
        '4':shopping,
        '5':freeze,
        'q':'quit'
    }
    while True:
        print("\033[0;31;44m\t\t杨大爷超市欢迎您\t\t\t\t\033[5m")
        print("\033[0;30;42m\t\t输入0进入注册界面\t\t\t\033[5m")
        print("\033[0;30;42m\t\t输入1进入登入界面\t\t\t\033[5m")
        print("\033[0;30;42m\t\t输入2进入充值界面\t\t\t\033[5m")
        print("\033[0;30;42m\t\t输入3进入余额查询界面\t\t\033[5m")
        print("\033[0;30;42m\t\t输入4进入购物界面\t\t\t\033[5m")
        print("\033[0;30;42m\t\t输入5进入解冻界面\t\t\t\033[5m")
        print("\033[0;30;42m\t\t输入q退出程序 \t\t\t\t\033[5m")
        print(38 * '-')
        user_shopping_chiose = input('请输入你要选择的功能')
        if user_shopping_chiose not in msg_dict:
            print('请好好输入')
            continue
        elif user_shopping_chiose=='q':
            print('再见')
            break
        msg_dict[user_shopping_chiose]()

    3.自定义辅助模块

    1.用于文件的读取和写入

    fil_mode.py

    import json
    import os
    def fil_add_info_dict(dict,fil='用户注册信息.txt'):
        info_dict = json.dumps(dict)
        with open(fil,'a',encoding='utf8') as fa :
            fa.write(f'{info_dict}\n')
        return True
    
    def fil_info_name_list(fil='用户注册信息.txt'):
        name_list = list()
        with open(fil,'a+',encoding='utf-8') as fa :
            fa.seek(0)
            data = fa.read()
            if data:
                with open(fil,'r',encoding='utf-8') as fr :
                    for info_dict in fr:
                        info_dict = json.loads(info_dict)
                        name_list.append(info_dict.get('name'))
        return name_list
    
    def fil_info_balance_amend(name,balance,fil='用户注册信息.txt'):
        name_list = fil_info_name_list(fil)  #fil_info_name_list为用字典里面的所有名字生成的列表
        if name in name_list:
            with open(fil,'r',encoding='utf8') as fr,\
                open('1.txt','w',encoding='utf8') as fw:
                for info_dict in fr:
                    info_dict = json.loads(info_dict)
                    if name == info_dict['name']:
                        info_dict['balance'] = balance
                    info_dict =json.dumps(info_dict)
                    fw.write(f'{info_dict}\n')
                    fw.flush()
            os.remove(fil)
            os.rename('1.txt',fil)
    
    def fil_userinfo(name,fil='用户注册信息.txt'):
        with open(fil,'a+',encoding='utf8') as far:
            far.seek(0)
            for a in far:
                a = json.loads(a)
                if a['name'] == name:
                    info_dict = a
                    return info_dict
            return False
    
    def fil_info_frzzez_amend(name,freeze,fil='用户注册信息.txt'):
        name_list = fil_info_name_list(fil)  #fil_info_name_list为用字典里面的所有名字生成的列表
        if name in name_list:
            with open(fil,'r',encoding='utf8') as fr,\
                open('1.txt','w',encoding='utf8') as fw:
                for info_dict in fr:
                    info_dict = json.loads(info_dict)
                    if name == info_dict['name']:
                        info_dict["freeze"] = freeze
                    info_dict =json.dumps(info_dict)
                    fw.write(f'{info_dict}\n')
                    fw.flush()
            os.remove(fil)
            os.rename('1.txt',fil)

    2.用于子程序返回主界面来个延迟动画效果

    loading.py

    import time
    def  loading():
        txt = '返回主界面中loading'
        print(f'\033[1;42;m{txt}\033[0m',end='')
        for a in range(10):
            print(f'\033[1;42;m.\033[0m',end='')
            time.sleep(0.1)
        print('')
        return True

    3.用于记录时间

    data_time.py用于记录时间

    import time
    def data_time():
        return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

    4.功能模块

    1.注册功能

    register.py

    from fil_mode import *
    from loading import loading
    def register():
        print('\033[1;34;46m\t\t欢迎使用注册功能\t\t\033[0m')
        register_name_Ture = 0
        name_list = fil_info_name_list()
        while register_name_Ture==0:
            print('\033[1;34;43m\t\t请您输入注册账号\t\t\033[0m')
            print('\033[1;34;43m\t\t账号由全英文组成\t\t\033[0m')
            print('\033[1;31;m输入Q退出程序\t\033[0m')
            register_name = input('请输入:').strip()
            if register_name == 'Q':
                loading()
                return False
            elif len(register_name.replace(' ','')) != len(register_name):
                print('\033[1;31;m输入账号中有宫格请重新输入\t\033[0m')
                continue
            elif not register_name.isalpha():
                print('\033[1;31;m输入账号不是由全英文组成请重新输入\t\t\033[0m')
                continue
            elif register_name in fil_info_name_list():
                print('\033[1;31;m输入账号以存在请重新输入\t\t\033[0m')
            else:
                register_name_Ture =1
                print('\033[1;34;43m\t\t账号名已注册成功\t\t\033[0m')
                while True:
                    print('\033[1;34;43m\t\t请您输入注册密码\t\t\033[0m')
                    print('\033[1;34;43m\t\t账号由全数字组成\t\t\033[0m')
                    register_pwd = input('请输入:').strip()
                    if len(register_pwd.replace(' ', '')) != len(register_pwd):
                        print('\033[1;31;m输入密码中有宫格请重新输入\t\033[0m')
                        continue
                    elif not register_pwd.isdigit():
                        print('\033[1;31;m输入密码不是由全数字组成请重新输入\t\t\033[0m')
                        continue
                    else:
                        print('\033[1;32;m\t\t注册成功\t\t\033[0m')
                        register_info_dict = {'name':None,'pwd':None,'balance':0,'integral':0,'freeze':0}
                        register_info_dict['name'] = register_name
                        register_info_dict['pwd'] = register_pwd
                        fil_add_info_dict(register_info_dict)
                        print('注册成功')
                        loading()
                        break
        return True

    2.登入功能

    login.py

    from fil_mode import *
    from loading import loading
    login_name = [None] #用全局可变的受局部影响
    def login():
        print('\033[1;34;46m\t\t欢迎使用登入功能\t\033[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('\033[1;31;m没有用户注册请先注册\033[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            while login_name_Ture == 0:
                print('\033[1;34;43m\t\t请您输入账号\t\t\033[0m')
                print('\033[1;31;m输入Q退出程序\t\033[0m')
                login_username = input('请输入:').strip()
                if login_username == 'Q':
                    loading()
                    return False
                elif len(login_username.replace(' ', '')) != len(login_username):
                    print('\033[1;31;m输入账号中有宫格请重新输入\t\033[0m')
                    continue
                elif not login_username.isalpha():
                    print('\033[1;31;m输入账号不为全英文\t\t\033[0m')
                    continue
                elif not login_username in fil_info_name_list():
                    print('\033[1;31;m输入账号不存在\t\t\033[0m')
                    continue
                else:
                    login_name_Ture = 1
                    print('\033[1;34;43m\t\t账号输入正确\t\t\033[0m')
                    while login_count < 5:
                        print(f'\033[1;34;43m\t你有{5-login_count}次机会输入密码\t\t\033[0m')
                        print('\033[1;34;43m\t\t请您输入密码\t\t\033[0m')
                        login_pwd = input('请输入:').strip()
                        if len(login_pwd.replace(' ', '')) != len(login_pwd):
                            print('\033[1;31;m输入密码中有宫格请重新输入\t\033[0m')
                            login_count += 1
                            continue
                        elif not login_pwd.isdigit():
                            print('\033[1;31;m输入密码不为全数字\t\t\033[0m')
                            login_count += 1
                            continue
                        else:
                            user_dict = fil_userinfo(login_username)
                            if user_dict['pwd'] != login_pwd:
                                print('\033[1;31;m输入密码错误请重新输入\t\t\033[0m')
                                login_count += 1
                                continue
                            else:
                                if user_dict["freeze"] == 0:
                                    print('\033[1;32;m\t\t登入成功\t\t\033[0m')
                                    login_name[0] = login_username
                                    loading()
                                    return True
                                else:
                                    print('\033[1;31;m登入失败\t\t\033[0m')
                                    print(f'\033[1;31;m账户{login_username}以被冻结\t\t\033[0m')
                                    loading()
                                    return False
                    fil_info_frzzez_amend(login_username,1)
                    print('\033[1;31;m\t\t登入失败\t\t\033[0m')
                    print(f'\033[1;31;m{login_username}账号密码登入失败太多已被冻结\033[0m')
                    loading()
                    return False
        while True:
            print(38 * '-')
            print("\033[0;40;46m\t\t欢迎使用登入功能\t\t\t\033[0m")
            print(f'账号{login_name[0]}已经登入')
            chiose = input('输入1当前账号退出并退出登入程序\n'
                           '输入2当前账号退出并重新登入程序\n'
                           '输入Q退出当前程序')
            print(38 * '-')
            if chiose == '1':
                login_name[0] = None
                return False
            elif chiose == '2':
                login_name[0] = None
                login()
                return
            elif chiose == 'Q':
                loading()
                return True
            else:
                print('\033[1;31;m请正确输入')

    3.充值

    top_up.py

    from fil_mode import *
    from login import login_name
    from loading import loading
    def top_up():
        print('\033[1;34;46m\t\t欢迎使用充值功能\t\033[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('\033[1;31;m没有用户注册请先注册\033[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            print('\033[1;31;m没有用户登入请先登入\033[0m')
            loading()
            return False
        info_dict = fil_userinfo(login_name[0])
        print(f"\033[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元\033[0m")
        while True :
            print('\033[1;34;43m\t\t请您输入充值的金额\t\t\033[0m')
            print('\033[1;31;m输入Q退出程序\t\033[0m')
            balance = input('请输入:').strip()
            if balance == 'Q':
                loading()
                return False
            elif len(balance.replace(' ', '')) != len(balance):
                print('\033[1;31;m输入金额中有宫格请重新输入\t\033[0m')
                continue
            elif not balance.isdigit():
                print('\033[1;31;m输入金额不为全数字\t\t\033[0m')
                continue
            else:
                balance_int = int(balance)
                info_dict['balance'] += balance_int
                fil_info_balance_amend(login_name[0],info_dict['balance'])
                print(f'\033[1;32;m充值成功\033[0m')
                print(f"\033[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元\033[0m")
                print('\033[1;34;43m\t\t是否继续充值\t\t\033[0m')
                print('\033[1;31;m输入Q退出Y为继续\t\033[0m')
                while True:
                    chiose = input('请输入')
                    if chiose not in ['Q','Y']:
                        print(f'\033[1;32;m请好好输入\033[0m')
                    elif chiose == 'Q':
                        loading()
                        return False
                    else:
                        break

    4.余额查询

    balance_enquiry.py

    from fil_mode import *
    from login import login_name
    from loading import loading
    import time
    def balance_enquiry():
        print('\033[1;34;46m\t\t欢迎使用余额查询功能\t\033[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count =0
        if not name_list:
            print('\033[1;31;m没有用户注册请先注册\033[0m')
            loading()
            return False
        global login_name
        if not login_name[0]:
            print('\033[1;31;m没有用户登入请先登入\033[0m')
            loading()
            return False
        info_dict = fil_userinfo(login_name[0])
        print(f"\033[1;32;m当前账户{login_name[0]}可用余额为{info_dict['balance']}元\033[0m")
        print('\033[1;42;m5秒后返回主界面\033[0m',end='')
        loading()
        time.sleep(4)

    5.账号解冻功能

    freeze.py

    from fil_mode import *
    from loading import loading
    def freeze():
        
        print('\033[1;34;46m\t\t欢迎使用账号解冻功能\t\033[0m')
        name_list = fil_info_name_list()
        login_name_Ture = 0
        login_count = 0
        if not name_list:
            print('\033[1;31;m没有用户注册请先注册\033[0m')
            loading()
            return False
        while True :
            print('\033[1;34;43m\t\t请您输入解冻账号\t\t\033[0m')
            print('\033[1;31;m输入Q退出程序\t\033[0m')
            name = input('请输入:').strip()
            if name == 'Q':
                loading()
                return False
            elif len(name.replace(' ', '')) != len(name):
                print('\033[1;31;m输入账号中有宫格请重新输入\t\033[0m')
                continue
            elif not name.isalpha():
                print('\033[1;31;m输入账号不为全英文字母\t\t\033[0m')
                continue
            elif name not in name_list:
                print('\033[1;31;m输入账号不存在\t\t\033[0m')
                continue
            else:
                user_dict = fil_userinfo(name)
                user_freeze = user_dict['freeze']
                user_pwd = user_dict['pwd']
                if user_freeze == 0:
                    print(f'\033[1;31;m当前账户{name}未被冻结\t\t\033[0m')
                    loading()
                    return
                else:
                    while True :
                        print('-'*50)
                        a = input('输入:杨大爷请帮我解冻\n请输入:')
                        if a != '杨大爷请帮我解冻':
                            print('\033[1;31;m想解冻就好好输入\033[0m')
                            continue
                        fil_info_frzzez_amend(name, 0)
                        print(f'\033[1;32;m账号{name}解冻成功\033[0m')
                        loading()
                        return
        

    5.自我总结

    1.json

    其中dumps,loads,用于文件
    
    #当有一个字典或者一个列表时候我们可以使用json中的dump,load进行快速修改,多个文件就不行了
    其中dump,load,用于内存

    2.python终端颜色打印

    http://images.cnblogs.com/cnblogs_com/pythonywy/1452728/o_%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20190609215521.png

    单行打印

    print(`\033[1;(这里前景色和背景色任意选一个代码);(可以不输入)m内容\033[0m`)

    多行打印同一效果

    print(`\033[1;(这里前景色和背景色任意选一个代码);(可以不输入)m内容`)
    print('内容')
    ........
    print('最后的内容\033[0m')

关键字