• 4.2 homework


    # 1.
    # 写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
    # 例如:[(‘红心’,2), (‘草花’,2), …(‘黑桃’,‘A’)]

    def poker(li):
        l1=[]
        l2=['A','J','Q','K']
        for i in li:
            for j in range(2,11):
                l1.append((i,j))
            for n in l2:
                l1.append((i,n))
        return l1
    
    print(poker(['红心','草花','黑桃','红心']))
    # 2.
    # 写函数,传入n个数,返回字典
    # {‘max’:最大值,’min’:最小值}
    # 例如: min_max(2, 5, 7, 8, 4)
    # 返回: {‘max’:8,’min’:2}

    def min_max(*args):return {'max':max(args),'min':min(args)}
    
    
    print(min_max(2,5,7,8,4))

    # 3.
    # 写函数,专门计算图形的面积
    # 其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
    # 调用函数area(‘圆形’, 圆半径) 返回圆的面积
    # 调用函数area(‘正方形’, 边长) 返回正方形的面积
    # 调用函数area(‘长方形’, 长,宽) 返回长方形的面积

    from math import pi
    
    
    def area(*args):
        if args[0] == '正方形':
            def square():
                s=args[1]**2
                return s
            return square()
    
        elif args[0] == '长方形':
            def rectangle():
                s=args[1]*args[2]
                return s
            return rectangle()
    
        elif args[0] == '圆形':
            def circle():
                s = args[1]**2*pi
                return s
            return circle()
        return area
    
    
    print(area('长方形',2,3))
    print(area('正方形',4))
    print(area('圆形',2))
    # 4.
    # 写函数,传入一个参数n,返回n的阶乘
    # 例如: cal(7)
    # 计算7 * 6 * 5 * 4 * 3 * 2 * 1

    def cal(n):
        count=1
        for i in range(n,0,-1):
            count=count*i
        return count
    
    
    print(cal(3))
    # 6  #加username
    # 给每个函数写一个记录日志的功能,
    # 功能要求:每一次调用函数之前,要将函数名称,时间节点记录到log的日志中。
    # 所需模块:

    import time
    
    def wrapper(func):
        def inner(*args,**kwargs):
            username = input('user:').strip()
            password=input('password:').strip()
            with open ('user',encoding='utf-8') as f2:
                for i in f2:
                    l2 = i.strip().split()
                    if username == l2[0] and password == l2[1]:
                        print('welcome %s' % username)
                    struct_time = time.localtime()
                    time_now = time.strftime('%Y_%m_%d %H:%M:%S', struct_time)
                    with open('logs',encoding='utf-8',mode='a')as f1:
                        f1.write('在%s时,用户%s执行了%s函数
    ' % (time_now,username,func.__name__))
                        ret = func(*args,**kwargs)
                        return ret
        return inner
    
    
    @wrapper
    def func1():
        time.sleep(0.1)
        print(555)
    
    @wrapper
    def func2():
        time.sleep(0.1)
        print(666)
    
    @wrapper
    def func3():
        time.sleep(0.1)
        print(777)
    
    func1()
    func2()
    func3()
    # 7、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
    user_status = False
    
    def login(func):
        def inner():
            global user_status
            if user_status == False:
                username=input('user:').strip()
                password=input('password:').strip()
                with open('userlist',encoding='utf-8') as f1:
                    for i in f1:
                        li=i.strip().split()
                        if username == li[0] and password == li[1]:
                            print('welcome %s' % username)
                            user_status = True
                            func()
            else:
                func()
        return inner
    
    
    @login
    def func1():
        print(666)
    
    @login
    def func2():
        print(777)
    
    @login
    def func3():
        print(888)
    
    
    func1()
    func2()
    func3()
    dic = {'username':None,
           'status': False,
           }
    def wrapper(func):
        def inner(*args,**kwargs):
            if dic['status']:
                ret = func(*args,**kwargs)
                return ret
            else:
                count=0
                while count <3:
                    username=input('username:').strip()
                    password=input('password:').strip()
                    with open('userlist',encoding='utf-8') as f1:
                        for i in f1:
                            l2=i.strip().split()
                            if username==l2[0] and password==l2[1]:
                                print('welcome %s' % username)
                                dic['username']=username
                                dic['status']=True
                                ret = func(*args,**kwargs)
                                return ret
                        else:
                            print('账号或者密码错误,还有%s机会' % (2-count))
                            count += 1
        return inner
    
    @wrapper
    def article():
        print('文章')
    
    @wrapper
    def log():
        print('日志')
    
    article()
    log()
    # 8,在编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码。这个作业之上进行升级操作:
    # 设置两套密码,一套为京东账号密码,一套为淘宝账号密码保存在文件中。
    # 设置四个函数,分别代表
    # 京东首页,京东超市,淘宝首页,淘宝超市。
    # 循环打印四个选项:东首页,京东超市,淘宝首页,淘宝超市。
    # 供用户选择,用户输入选项后,执行该函数,四个函数都加上认证功能,只要登陆成功一次,在选择其他函数,后续都无需输入用户名和密码。
    # 相关提示:用带参数的装饰器。装饰器内部加入判断,验证不同的账户密码。
    dic={'username':None,
         'status':False,
         }
    
    def login(flag):
        def wrapper(func):
            def inner(*args,**kwargs):
                if dic['status']:
                    ret = func(*args,**kwargs)
                    return ret
                else:
                    count=0
                    while count<3:
                        username=input('username:%s' % flag).strip()
                        password=input('password:').strip()
                        with open('tb',encoding='utf-8') as f1:
                            tb_dic=eval(f1.readline())
                            if username == tb_dic[flag]['username'] and password == tb_dic[flag]['password']:
                                dic['username']=username
                                dic['status']= True
                                ret = func(*args,**kwargs)
                                return ret
                            else:
                                print('您输入的用户或者密码错误,请重新输入,还有%s次机会' % (2-count))
                                count += 1
    
            return inner
        return wrapper
    
    @login('weixin')
    def taobao_home():
        print('淘宝首页')
    
    @login('weixin')
    def taobao_shop():
        print('淘宝超市')
    
    @login('royalpay')
    def jingdong_home():
        print('京东首页')
    
    @login('royalpay')
    def jingdong_shop():
        print('京东超市')
    
    
    choice_dict ={
        1:taobao_home,
        2:taobao_shop,
        3:jingdong_home,
        4:jingdong_shop,
    }
    
    while True:
        print('1 淘宝首页
    2 淘宝超市
    3 京东首页
    4 京东超市')
        choice_num = input('请输入序号:').strip()
        if choice_num.isdigit():
            choice_num = int(choice_num)
            if 0 <choice_num <= len(choice_dict):
                choice_dict[choice_num]()
            else:
                print('超出序号范围')
        else:
            print('您输入包含非法字符,请重新输入')


  • 相关阅读:
    高情商人士7大说话之道
    使用httpclient提交表单数据加号(+)会被自动替换成空格的坑
    鬼谷子的五条初世潜规则
    模型可视化工具netron
    .deb文件安装应该怎么做
    转caffe scale layer
    转Ubuntu 16.04 创建无线热点
    CNN反向传播更新权值
    tensorflow查看使用的是cpu还是gpu
    yolo进化史之yolov3
  • 原文地址:https://www.cnblogs.com/kateli/p/8711024.html
Copyright © 2020-2023  润新知