python之路day12作业

# 4,给每个函数写一个记录日志的功能,
# 功能要求:每一次调用函数之前,要将函数名称,时间节点记录到log的日志中。
# 所需模块:
# import time
# struct_time = time.localtime()
# print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time))
"""
import time
def warpper(f):
def inner(*args,**kwargs):
with open("log",encoding="utf-8",mode="a+") as f1:
struct_time = time.localtime()
f1.write("函数名称:{}\t\t时间节点:{}\n".format(f.__name__,time.strftime("%Y-%m-%d %H:%M:%S",struct_time)))
ret = f(*args,**kwargs)
return ret
return inner

@warpper #func1 = wrapper(func1)
def func1():
time.sleep(1)
print(666)

@warpper #func2 = wrapper(func2)
def func2():
time.sleep(1)
print(888)

func1()
func2()
func1()
func2()
"""
# 5,在编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码。这个作业之上进行升级操作:
# 设置两套密码,一套为京东账号密码,一套为淘宝账号密码保存在文件中。
# 设置四个函数,分别代表 京东首页,京东超市,淘宝首页,淘宝超市。
# 循环打印四个选项:东首页,京东超市,淘宝首页,淘宝超市。
# 供用户选择,用户输入选项后,执行该函数,四个函数都加上认证功能,只要登陆成功一次,在选择其他函数,后续都无需输入用户名和密码。
# 相关提示:用带参数的装饰器。装饰器内部加入判断,验证不同的账户密码。

def login(file_name):
with open(file_name, encoding="utf-8") as f1:
li_msg = []
for line in f1:
dic_msg = {}
username1, password1 = line.split()
dic_msg[username1] = password1
li_msg.append(dic_msg)
count = 0
while count < 3:
username = input("请输入用户名:").strip()
password = input("请输入密码:").strip()
if {username: password} in li_msg:
print("登录成功!")
return True
else:
print("用户名或者密码错误,请重新输入,您还有{}次机会!".format(2-count))
count += 1
if count == 3:
return False

flag = True
def wrapper_select(select):
def wrapper(f):
def inner(*args,**kwargs):
global flag
if select == "JD":
if flag :
print("您好!欢迎来到京东商城!")
flag1 = login("京东账号信息")
if flag1:
ret = f(*args,**kwargs)
flag = False
return ret
else:
ret = f(*args, **kwargs)
return ret
elif select == "TB":
if flag :
print("您好!欢迎来到淘宝商城!")
flag1 = login("淘宝账号信息")
if flag1:
ret = f(*args,**kwargs)
flag = False
return ret
else:
ret = f(*args, **kwargs)
return ret
return inner
return wrapper

while True:
select = input("请输入选择:(如:京东:JD/淘宝TB(不区分大小写)(Q/q:退出)):").strip().upper()
if select == "JD":
@wrapper_select(select) # @wrapper #JD_Home_Page = wrapper(JD_Home_Page)
def JD_Home_Page():
print("欢迎来到京东首页!")

@wrapper_select(select)
def JD_Supermarket():
print("欢迎来到京东超市!")

JD_Home_Page()
JD_Supermarket()
JD_Home_Page()
JD_Supermarket()
flag = True
elif select == "TB":
@wrapper_select(select)
def TB_Home_Page():
print("欢迎来到淘宝首页!")

@wrapper_select(select)
def TB_Supermarket():
print("欢迎来到淘宝超市!")

TB_Home_Page()
TB_Supermarket()
flag = True
elif select == "Q":break
else:print("输入有误!请检查!")

改进版:
dic_status = {
'username': None,
'status_jd': False,
'status_tb': False,
}


def login_out(argv):
def login(f):
def inner(*args, **kwargs):
i = 1
if argv == "京东":
if dic_status['status_jd']:
ret = f(*args, **kwargs)
return ret
else:
while i < 4:
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
with open(argv, encoding='utf-8') as f1:
line_list = f1.read().strip().split(',')
if username == line_list[0] and password == line_list[1]:
dic_status['username'] = username
dic_status['status_jd'] = True
print('登录成功')
ret = f(*args, **kwargs)
return ret
else:
print('账号密码错误,还剩%s次机会' % (3-i))
i += 1
else:
if dic_status['status_tb']:
ret = f(*args, **kwargs)
return ret
else:
while i < 4:
username = input('请输入用户名:').strip()
password = input('请输入密码:').strip()
with open(argv, encoding='utf-8') as f1:
line_list = f1.read().strip().split(',')
if username == line_list[0] and password == line_list[1]:
dic_status['username'] = username
dic_status['status_tb'] = True
print('登录成功')
ret = f(*args, **kwargs)
return ret
else:
print('账号密码错误,还剩%s次机会' % (3-i))
i += 1

return inner
return login


@login_out('淘宝')
def taobao():
print('欢迎%s来到淘宝首页...' % dic_status['username'])


@login_out('淘宝')
def taobao_shop():
print('欢迎%s来到淘宝超市首页...' % dic_status['username'])


@login_out('京东')
def JD():
print('欢迎%s来到京东首页...' % dic_status['username'])


@login_out('京东')
def JD_shop():
print('欢迎%s来到京东超市首页...' % dic_status['username'])


dic = {
1: taobao,
2: taobao_shop,
3: JD,
4: JD_shop,
}

while True:
print('''
1,访问淘宝
2,访问淘宝超市
3,访问京东
4,访问京东超市
''')
choice = input('请输入你的选项:').strip()
if choice.isdigit():
choice = int(choice)
if 0 < choice <= len(dic):
dic[choice]()
else:
print('超出范围,请重新输入')
else:
print('有非数字元素,请重新输入')

posted on 2018-05-18 19:44  Y易然R  阅读(82)  评论(0)    收藏  举报

导航