python学习-day11-homework(装饰器)

视频链接:https://www.bilibili.com/video/BV1SE411N7Hi?p=75

作业链接:https://gitee.com/old_boy_education_python_28/teaching_plan/issues/I16NAN

以下内容仅供个人学习使用,侵删

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
# 1.请实现一个装饰器,限制该函数被调用的频率,如3秒一次(面试题)
#
'''
1.第一次能成功执行
2.3秒内再执行,提示被限制
3.3秒以后再执行一次
'''

# import time
#
# def wrapper(func):
#     start_time = 0
#     def inner(*args,**kwargs):
#         nonlocal start_time
#         if time.time()-start_time>=3:
#             start_time=time.time()
#             func(*args,**kwargs)
#         else:
#             print("被限制了")
#
#     return inner
# @wrapper
# def foo():
#     print("is foo")
# while True:
#     foo()
#     time.sleep(1)


# 2.请写出下列代码片段的输出结果:
#
def say_hi(func):
  def wrapper(*args,**kwargs):
      print("HI")
      ret=func(*args,**kwargs)
      print("BYE")
      return ret
  return wrapper

def say_yo(func):
  def wrapper(*args,**kwargs):
      print("Yo")
      return func(*args,**kwargs)
  return wrapper
@say_hi
@say_yo
def func():
  print("ROCK&ROLL")
func()

# HI
# Yo
# ROCK&ROLL
# BYE

# 3.编写装饰器完成下列需求:
# 用户有两套账号密码,一套为京东账号密码,一套为淘宝账号密码分别保存在两个文件中。
# 设置四个函数,分别代表 京东首页,京东超市,淘宝首页,淘宝超市。
# 启动程序后,呈现用户的选项为:
# 1,京东首页
# 2,京东超市
# 3,淘宝首页
# 4,淘宝超市
# 5,退出程序
# 四个函数都加上认证功能,用户可任意选择,用户选择京东超市或者京东首页,只要输入一次京东账号和密码并成功,则这两个函数都可以任意访问;用户选择淘宝超市或者淘宝首页,只要输入一次淘宝账号和密码并成功,则这两个函数都可以任意访问.
# 相关提示:用带参数的装饰器。装饰器内部加入判断,验证不同的账户密码。
#
# 解题思路:
# 1.创建两个文件,存储账号和密码
# 2.分别给京东和淘宝做一个状态码
# 3.如果状态码是false,执行登录
# 4.登录成功后,将状态码改为True
'''
jd--alex:alex123
tb--alex:alex123
'''
login_dic={
    'tb':False,
    'jd':False

}

def auth(flag):
    def wrapper(func):
        def inner(*args,**kwargs):
            if login_dic[flag]:
                func(*args,**kwargs)
            else:
                login(flag,func,*args,**kwargs)
        return inner
    return wrapper
def login(flag,func,*args,**kwargs):
    '''
    登录功能
    :param flag:
    :param func:
    :param args:
    :param kwargs:
    :return:
    '''
    user = input("username:")
    pwd = input("password:")
    with open(f'day11_homework_{flag}_login', 'r', encoding='utf-8')as f:
        for i in f:
            file_username, file_pwd = i.strip().split(":")
            if file_pwd == pwd and file_username == user:
                login_dic[flag] = True
                print('登录成功')
                func(*args, **kwargs)
                break
        else:
            print("wrong pwd or username")

@auth("jd")
def jd_front_page():
    print("welcome to jd_front_page")

@auth("tb")
def tb_front_page():
    print("welcome to tb_front_page")

@auth("jd")
def jd_mart():
    print("welcome to jd_mart")

@auth('tb')
def tb_mart():
    print("welcome to tb_mart")

msg="""
1,京东首页
2,京东超市
3,淘宝首页
4,淘宝超市
5,退出程序
"""
func_dic={
    '1':jd_front_page,
    '2':jd_mart,
    '3':tb_front_page,
    '4':tb_mart,
    '5':exit
}
while True:
    choice = input(msg)
    if choice in func_dic:
        func_dic[choice]()
    else:
        print("wrong input,enter again")

# 4.给l1 = [1,1,2,2,3,3,6,6,5,5,2,2]去重,不能使用set集合(面试题)

 

你可能感兴趣的:(python,python)