zoukankan      html  css  js  c++  java
  • 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('您输入包含非法字符,请重新输入')


  • 相关阅读:
    桟错误分析方法
    gstreamer调试命令
    sqlite的事务和锁,很透彻的讲解 【转】
    严重: Exception starting filter struts2 java.lang.NullPointerException (转载)
    eclipse 快捷键
    POJ 1099 Square Ice
    HDU 1013 Digital Roots
    HDU 1087 Super Jumping! Jumping! Jumping!(动态规划)
    HDU 1159 Common Subsequence
    HDU 1069 Monkey and Banana(动态规划)
  • 原文地址:https://www.cnblogs.com/kateli/p/8711024.html
Copyright © 2011-2022 走看看