# 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('您输入包含非法字符,请重新输入')