0402作业

1.写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组

例如:[(‘红心2),(‘草花2), …(‘黑桃‘A’)]

 

def poke(*args):
    l1 = []
    l2 = []
    for i in range(2, 11):
            l2.append(i)
    l2.extend('JQKA')
    for j in l2:
        for k in args:
            l1.append((k,j))
    return l1
print(poke(*['红心','黑桃','方片','梅花']))

 

2.写函数,传入n个数,返回字典{‘max’:最大值,’min’:最小值}

例如:min_max(2,5,7,8,4)

返回:{‘max’:8,’min’:2}

 

def num(*args):
    dic = {}
    l1 = []
    for i in args:
        l1.append(i)
        a=max(l1)
        b=min(l1)
        dic['max'] = a
        dic['min'] = b
    print(dic)
num(1,2,3,4,5,6)

 

3.写函数,专门计算图形的面积

其中嵌套函数,计算圆的面积,正方形的面积和长方形的面积

调用函数area(‘圆形’,圆半径)  返回圆的面积

调用函数area(‘正方形’,边长)  返回正方形的面积

调用函数area(‘长方形’,长,宽)  返回长方形的面积

def area():

def 计算长方形面积():

pass

 

def 计算正方形面积():

pass

 

def 计算圆形面积():

pass

 

def area(name,x=0,y=0):
    def rectangle():
        resulf = x*y
        return resulf
    def square():
        resulf = x ** 2
        return resulf
    def roundness():
        resulf = 3.14*(x ** 2)
        return resulf
    if name == '长方形':
        print(rectangle())
    elif name == '正方形':
        print(square())
    else:
        print(roundness())
area('长方形',2,9)

 

4.写函数,传入一个参数n,返回n的阶乘

例如:cal(7)

计算7*6*5*4*3*2*1

 

def cal(n):
    s=1
    for i in range(n,0,-1):
        s = i * s
    print(s)
cal(6)

 

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
from functools import wraps
def wrapper(timmer):
    @wraps(timmer)
    def inner():
        struct_time = time.localtime()
        now_time=time.strftime("%Y-%m-%d %H:%M:%S", struct_time)
        name ='Mr.who'
        with open('log', encoding='utf-8', mode='a')as f1:
            f1.write('%s在%s调用了%s ,%s' % (name,now_time,timmer.__name__,timmer.__doc__))
        ret = timmer()
        return ret
    return inner
@wrapper
def timmer():
    '''
    此函数是一个函数
    :return:
    '''
    print('好家伙!')
timmer()

7、编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码

 

flag = True
def login(f):
    def inner(*args,**kwargs):
        global flag
        if flag:
            username = input("请输入用户名").strip()
            pwd = input("请输入密码").strip()
            with open('log',encoding='utf-8',)as f1:
                for i in f1:
                    if username in i and pwd in i:
                        print('登录成功')
                        f()
                        flag=False
                        break
        else:
            f()
    return inner
@login    #func1=login(func1)
def func1():
    print('呵呵')
@login    #func2=login(func2)
def func2():
    print('哈哈')
func1()
func2()

 

 

 

8,在编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次,后续的函数都无需再输入用户名和密码。这个作业之上进行升级操作:

设置两套密码,一套为京东账号密码,一套为淘宝账号密码保存在文件中。

设置四个函数,分别代表 京东首页,京东超市,淘宝首页,淘宝超市。

循环打印四个选项:东首页,京东超市,淘宝首页,淘宝超市。

供用户选择,用户输入选项后,执行该函数,四个函数都加上认证功能,只要登陆成功一次,在选择其他函数,后续都无需输入用户名和密码。

相关提示:用带参数的装饰器。装饰器内部加入判断,验证不同的账户密码。

 

posted @ 2018-04-02 21:49  Murray穆  阅读(183)  评论(0编辑  收藏  举报