作业12

1.函数对象优化多分支if的代码练熟

def login():
    print('登录')

def transfer():
    print('转账')
    
func_dic = {
    '0': ['退出', None],
    '1': ['登录', login],
    '2': ['转账', transfer],
}



while True:
    for k in func_dic:
        print(k, func_dic[k][0])

    choice = input('请输入命令编号:').strip()
    if not choice.isdigit():
        print('必须输入编号,傻叉')
        continue

    if choice == '0':
        break

    if choice in func_dic:
        func_dic[choice][1]()
    else:
        print('输入的指令不存在')

2、编写计数器功能,要求调用一次在原有的基础上加一
温馨提示:
I:需要用到的知识点:闭包函数+nonlocal
II:核心功能如下:
def counter():
x+=1
return x

def number():
    x=0
    def counter():
        nonlocal x
        x += 1
        return x
    return counter
couter=number()

print(couter())  # 1
print(couter())  # 2
print(couter())  # 3
print(couter())  # 4
print(couter())  # 5

周末作业:

import os
user_info = {}
save_information = []

def check_login(func):
    def inner(*args, **kwargs):
        if not save_information:
            print('小主人,请先登录好吧')
            return
        else:
            func(*args, **kwargs)

    return inner


def all_user_info():
    with open('a.txt', mode='r', encoding='utf-8') as f:
        for line in f:
            user, pwd, money = line.strip().split(':')
            user_info[user] = [pwd, money]
    print(user_info)


def change_file(user_info, file_path):
    with open(f'{file_path}.swap', 'wt', encoding='utf8') as f:
        for k, v in user_info.items():
            f.write(f'{k}:{":".join(map(str, v))}\n')

    os.remove(file_path)
    os.rename(f'{file_path}.swap', file_path)


def login():
    all_user_info()
    count = 0
    while count < 3:
        username = input('请输入用户名: ').strip()
        # 2) 校验用户名是否存在
        # 若 用户名不存在user_info字典中,则表示当前用户不存在
        if username not in user_info:
            print('当前用户不存在,请重新输入!')
            register()

        password = input('请输入密码: ').strip()

        if password == user_info.get(username)[0]:
            print('登录成功!')
            save_information.append(username)
            break

        else:
            print('登录失败!')
            count += 1


@check_login
def check_banlance():
    """
    查询余额
    :return:
    """
    users = save_information[0]
    balance = user_info[users][1]
    print(f'您当于账户余额:¥{balance}元')


@check_login
def withdraw():
    """
    提现
    :return:
    """
    charge = input('请输入提现金额:').strip()
    charge = int(charge)
    users = save_information[0]
    user_info[users][1] = int(user_info[users][1])

    if user_info[users][1] >= charge:
        user_info[users][1] -= charge
        print('您已成功提现{}元'.format(charge))
    else:
        print('余额不足')
    change_file(user_info, 'a.txt')


@check_login
def pay_money():
    username=input('请输入充值的账户:').strip()


        # 2) 校验当前传入的username用户是否存在
    if username not in user_info:
        print('用户不存在,结束程序!')
        # 若用户不存在,则结束程序
        return

        # 3) 循环让用户输入充值的金额
    while True:
        money = input('请输入充值金额').strip()
        # 若用户输入的不是数字,则让用户重新输入
        if not money.isdigit():
            print('输入的必须是数字!')
            continue

        money = int(money)

        # 4) 给当前用户的金额加钱
        user_info[username][1] = int(user_info[username][1])
        user_info[username][1] += money

        # 5) 将修改后的用户数据重新写入文件中
        change_file(user_info, 'a.txt')
        break
@check_login
def transfer():
    users = save_information[0]
    # 作业: 判断转账用户与收款用户是否存在
    username=input('请输入转账用户:').strip()
    if username not in user_info:
        print('收款用户不存在')
        return
    transfer_money=input('请输入转账金额:').strip()
    transfer_money=int(transfer_money)
    # 1) 判断转账用户的金额是否 大于 等于 转账金额
    user_info.get(users)[1]=int(user_info.get(users)[1])
    if user_info.get(users)[1] >= transfer_money:

        # 2)转账用户扣钱
        user_info.get(users)[1] -= transfer_money

        # 3)收款用户加钱
        user_info.get(username)[1]=int(user_info.get(username)[1])
        user_info.get(username)[1] += transfer_money
        print('您已成功转账{}'.format(transfer_money))
        # 4) 此时转账与收款用户的数据都已经修改过了,重新写入文件中
        change_file(user_info, 'a.txt')

def register():
    while True:

        username = input('请输入用户名: ').strip()

        if username not in user_info:

            # 2、若用户不存在,则继续让用户输入密码,进行注册
            password = input('请输入密码: ').strip()
            re_password = input('请输入密码: ').strip()

            # 3、判断两次密码是否一致
            if password == re_password:

                money = input('请输入注册金额:').strip()
                if money.isdigit():

                    with open('a.txt', 'a', encoding='utf-8') as f:
                        f.write(f'{username}:{password}:{money}')

                    print(f'[{username}]注册成功')
                    break
                else:
                    print('请输入数字类型')
            else:
                print('注册失败!')
        else:
            # 若存在,则让用户重新输入
            print('当前用户已存在,请重新输入!')


def main():
    func_dic = {
        '0': ['退出', None],
        '1': ['登录', login],
        '2': ['查询余额', check_banlance],
        '3': ['提现', withdraw],
        '4': ['充值', pay_money],
        '5':['转账',transfer],
        '6': ['注册', register]
    }

    while True:
        for k in func_dic:
            print(k, func_dic[k][0])

        choice = input('请输入命令编号:').strip()
        if not choice.isdigit():
            print('必须输入编号,傻叉')
            continue
        if choice == '0':
            break

        if choice in func_dic:
            func_dic[choice][1]()
        else:
            print('输入的指令不存在')


if __name__ == '__main__':
    main()

posted @ 2020-03-20 19:54  小子,你摊上事了  阅读(91)  评论(0)    收藏  举报