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(‘输入的有非法字符,请重新输入‘)