3.23作业

作业

一:编写函数,(函数执行的时间用time.sleep(n)模拟)

import time


def add(x, y):
    time.sleep(4)
    print(f'{x}+{y}={x + y}')


count(1, 1)

二:编写装饰器,为函数加上统计时间的功能

import time


def timmer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        res = func(*args, **kwargs)
        stop = time.time()
        res1 = stop - start
        print(f'加法函数的执行时间为{res1}')
        return res

    return wrapper


@timmer
def add(x, y):
    time.sleep(4)
    print(f'{x}+{y}={x + y}')


count(1, 1)

三:编写装饰器,为函数加上认证的功能

import time

def auth(func):
    def wrapper(*args, **kwargs):
        name = input('请输入用户名: ').strip()
        pwd = input('请输入密码: ').strip()
        if name == '数学白痴' and pwd == '000':
            print(f'你好{name}!你已登录成功,可以使用加法运算了')
            res = func(*args, **kwargs)
            return res
        else:
            print('登录失败!算了吧你这么聪明还用了这个?')

    return wrapper

@auth
def add(x, y):
    time.sleep(4)
    print(f'{x}+{y}={x + y}')

count(1,1)

四:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')转成字典格式

#user_info.txt内容
{"name":"egon","password":"111"}
{"name":"tank","password":"222"}
import time

user_info = {'user': None}


def auth(func):
    def wrapper(*args, **kwargs):
        while True:
            name_l = []
            pwd_l = []
            with open('user_info.txt', mode='rt', encoding='utf-8') as f:
                for line in f:
                    res = eval(line.strip())
                    name_l.append(res.get('name'))
                    pwd_l.append(res.get('password'))
            name = input('输入账号: ')
            if user_info.get('user') == name:
                res1 = func(*args, **kwargs)
                return res1
            else:
                for i in name_l:
                    if name == i:
                        password = input('请输入密码: ').strip()
                        for j in pwd_l:
                            if password == j:
                                user_info['user'] = name
                                print('登录成功')
                                break
                        else:
                            print('密码错误')
                            break
                        break
                else:
                    print('用户不存在请重新输入')
                    continue

    return wrapper


@auth
def add(x, y):
    time.sleep(4)
    print(f'{x}+{y}={x + y}')


@auth
def sub(x, y):
    time.sleep(4)
    print(f'{x}-{y}={x - y}')


@auth
def multi(x, y):
    time.sleep(4)
    print(f'{x}x{y}={x * y}')


@auth
def divi(x, y):
    time.sleep(4)
    print(f'{x}除以{y}={x / y}')


add(4, 2)
sub(4, 2)
multi(4, 2)
divi(4, 2)

五:编写装饰器,为多个函数加上认证功能,要求登录成功一次,在超时时间内无需重复登录,超过了超时时间,则必须重新登录

import time

user_info = {'user': None}
time_dic={'start':0,'stop':0}

def auth(func):
    def wrapper(*args, **kwargs):
        while True:
            name_l = []
            pwd_l = []
            with open('user_info.txt', mode='rt', encoding='utf-8') as f:
                for line in f:
                    res = eval(line.strip())
                    name_l.append(res.get('name'))
                    pwd_l.append(res.get('password'))
            name = input('输入账号: ')
            time_dic['stop']=time.time()
            res4=time_dic.get('stop')-time_dic.get('start')
            if user_info.get('user') == name and res4<10: 
                res1 = func(*args, **kwargs)
                return res1
            else:
                for i in name_l:
                    if name == i:
                        password = input('请输入密码: ').strip()
                        for j in pwd_l:
                            if password == j:
                                user_info['user'] = name
                                print('登录成功')
                                time_dic['start']=time.time()
                                break
                        else:
                            print('密码错误')
                            break
                        break
                else:
                    print('用户不存在请重新输入')
                    continue

    return wrapper


@auth
def add(x, y):
    time.sleep(1)
    print(f'{x}+{y}={x + y}')


@auth
def sub(x, y):
    time.sleep(1)
    print(f'{x}-{y}={x - y}')


@auth
def multi(x, y):
    time.sleep(1)
    print(f'{x}x{y}={x * y}')


@auth
def divi(x, y):
    time.sleep(1)
    print(f'{x}除以{y}={x / y}')


add(4, 2)
sub(4, 2)
multi(4, 2)
divi(4, 2)
posted @ 2020-03-24 00:06  风起千寻  阅读(105)  评论(0编辑  收藏  举报