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)