码迷,mamicode.com
首页 > 其他好文 > 详细

4--2日 函数 装饰器 作业题

时间:2018-04-07 22:46:17      阅读:747      评论:0      收藏:0      [点我收藏+]

标签:验证   fun   缓存   int   名称   日志   jin   ict   ret   

1.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组
例如:[(‘红心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]
def func(*args,**kwargs):
    li = []
    for i in args:
        for j in range(1,14):
            if j == 1:
                j = A
            li.append((i,j))
    return li
ret = func(红桃,方块,梅花,黑桃)
print(ret)

 

def func(*args):
    li = []
    for i in args:
        for j in range(1,14):
            if j == 1:
                j = A
            elif j == 11:
                j = J
            elif j == 12:
                j = Q
            elif j == 13:
                j = K
            li.append((i,j))
    return li
print(func(黑桃,梅花,方片,红桃))

 

2.写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}
例如:min_max(2,5,7,8,4)
返回:{‘max’:8,’min’:2}
def func(*args,**kwargs):
    a = max(args)
    b = min(args)
    return {max:a,min:b}
set = func(1,3,343,34,5,743)
print(set)

 

def func(*args):
    return {max:max(args),min:min(args)}
print(func(1,2,4,6,8))

 

3.写函数,专门计算图形的面积
其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积
调用函数area(‘圆形’,圆半径) 返回圆的面积
调用函数area(‘正方形’,边长) 返回正方形的面积
调用函数area(‘长方形’,长,宽) 返回长方形的面积
def area(*args):
    if args[0] == 长方形:
        def 计算长方形面积():
            s = args[1]*args[2]
            return s
        return 计算长方形面积()
    elif args[0] == 正方形:
        def 正方形面积():
            f = args[1]*args[1]
            return f
        return 正方形面积()
    elif args[0] == 圆形:
        def 圆形面积():
            y = 3.14*args[1]*args[1]
            return y
        return 圆形面积()

print(area(长方形,3,5))
print(area(正方形,6))
print(area(圆形,5))

 



4.写函数,传入一个参数n,返回n的阶乘
例如:cal(7)
计算7*6*5*4*3*2*1
def cal(a):
    sum = 1
    for i in range(1,a+1):
        sum = i*sum
    return sum
print(cal(7))

 

def func(n):
    count = 1
    for i in range(n,0,-1):
        count = count * i
    return count
print(func(8))

 


5、编写下载网页内容的函数,要求功能是:用户传入一个url,函数返回下载页面的结果(升级题)
5.1.为题目3编写装饰器,实现缓存网页内容的功能:(升级题)
具体:实现下载的页面存放于文件中,如果网页有对应的缓存文件,就优先从文件中读取网页内容,否则,就去下载,然后存到文件中


6给每个函数写一个记录日志的功能,
功能要求:每一次调用函数之前,要将函数名称,时间节点记录到log的日志中。
所需模块:
import time
struct_time = time.localtime()
print(time.strftime("%Y-%m-%d %H:%M:%S",struct_time))
import time
dic_status = {‘username‘:None,‘status‘:False}
def wrapper(func):
def inner(*args,**kwargs):
struct_time = time.localtime()
now_time = time.strftime("%Y-%m-%d %H:%M:%S",struct_time)
dic_status[‘username‘] = ‘yuyu‘
dic_status[‘status‘] = True
with open(‘log‘,‘a‘,encoding=‘utf-8‘)as f1:
f1.write(‘%s在%s时间,调用了%s函数\n‘%(dic_status[‘username‘],now_time,func.__name__))
ret = func(*args,**kwargs)
return ret
return inner

@wrapper
def login():
print(‘欢迎加油‘)

@wrapper
def argv():
print(‘韩寒‘)

login()
time.sleep(3)
argv()

 



7、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码
dic = {username:None,
       status:False,}
def wrapper(func):
    def inner(*args,**kwargs):
        if dic[status]:
            ret = func(*args,**kwargs)
            return ret
        else:
            i = 0
            while i < 3:
                username = input(请输入用户名:).strip()
                password = input(请输入密码:).strip()
                with open(rigister.txt,encoding=utf-8)as f1:
                    for j in f1:
                        j_list = j.strip().split()
                        if username == j_list[0] and password == j_list[1]:
                            dic[username] = username
                            dic[status] = True
                            ret = func(*args, **kwargs)
                            return ret
                    else:
                        print(账号或密码错误,请重新输入%s机会%(2-i))
                        i += 1
    return inner

@wrapper
def comment():
    print(评论)

@wrapper
def article():
    print(文章)

@wrapper
def diary():
    print(日记)

@wrapper
def file():
    print(文件)


comment()
article()
diary()
file()

 

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:
                i = 0
                while i < 3:
                    username = input(请输入用户名(用%s账号)%flag:).strip()
                    password = input(请输入密码:).strip()
                    with open(login.txt,encoding=utf-8)as f1:
                        msg_dic = eval(f1.readline())
                        if username == msg_dic[flag][username] and password == msg_dic[flag][password]:
                            dic[username] = username
                            dic[status] = True
                            ret = func(*args,**kwargs)
                            return ret
                        else:
                            print(用户名或者密码错误请重新输入,还剩%s次机会%(2-i))
                            i += 1
        return inner
    return wrapper

@login(qq)
def taobao_home():
    print(淘宝首页)


@login(qq)
def taobao_shop():
    print(淘宝商城)


@login(微信)
def jingdong_home():
    print(京东首页)


@login(微信)
def jingdong_shop():
    print(京东商城)

choice_dict = {1:taobao_home,
              2:taobao_shop,
              3:jingdong_home,
              4:jingdong_shop}

while True:
    print(\n1-淘宝首页 \n2-淘宝商城 \n3-京东首页 \n4-京东商城)
    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(输入的有非法字符,请重新输入)
View Code

 



4--2日 函数 装饰器 作业题

标签:验证   fun   缓存   int   名称   日志   jin   ict   ret   

原文地址:https://www.cnblogs.com/yzxing/p/8693801.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!