题目3:
1.小明有100元,打算买100本书,A类书籍5元一本,B类书籍3元一本,C类书籍0.5元一本,算出小明一共够多少种买法?16分钟
for循环解法:
money=100
book=100
count=0
for a in range(int(money/5)):
for b in range(int(money / 3)):
for c in range(int(101)):
if a*5+b*3+c*0.5<=100 and a+b+c==100:
print(a,b,c)
count+=1
print(count)
>>>>>>129
题目4:
一个完整的闭包必须满足哪几个条件:
1.函数中嵌套函数
2.外层函数返回内层嵌套函数名
3.内层嵌套函数有引用外层的一个非全局变量
题目5:
定义一个计算函数运用时间的装饰器(计算时间使用time模拟实现)
import time
import time
def wrapper(func):
def count_time(*args, **kwargs):
start_time = time.time()
func(*args, **kwargs)
end_time = time.time()
print("{}函数运行的时间为:{:.5f}秒".format(func.__name__, end_time - start_time))
return count_time
# 测试
@wrapper
def test(n):
time.sleep(n)
print("运行结束了")
test(2)
>>>>>>>>>>>>>>>>
运行结束了
test函数运行的时间为:2.00000秒
题目6:
编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),要求登录成功一次
后续的函数都无需再输入用户名和密码。{"user":"python01","pwd":"123456","token":False}
with open('ceshi.txt')as f:
users =eval(f.read())
def login_check(func):
'''
登录验证的装饰器
:param func:
:return:
'''
def ado():
if not users['token']:
print('----登录页面-------')
username =input('账号:')
password =input('密码:')
# 登录校验
if users['user']==username and users['pwd' ]==password:
users['token' ] =True # 修改token值
func()
else:
func()
return ado
@login_check
def index():
print('这是index首页')
@login_check
def page1():
print('这个是page1页面')
@login_check
def page2():
print('这个是page2页面')
if __name__=='__main__':
index()
page1()
page2()
>>>>>>>>
----登录页面-------
账号:python01
密码:123456
这个是page1页面
这个是page2页面
题目7:
通过装饰器实现单例模式,只要任意一个类使用该装饰器装饰,那么就会变成单例模式的类。
def single(func):
instance={}
def fun(*args,**kwargs):
if func in instance:
return instance[func]
else:
instance[func]=func(*args,**kwargs)
return instance[func]
return fun
@single
class Test:
a=1
def __init__(self,x=2):
self.x=x
one=Test()
two=Test()
print(one)
print(two)
print(one is two)
one.b='love'
print(two.b)
>>>>>>>>>>>
<__main__.Test object at 0x0000000002208518>
<__main__.Test object at 0x0000000002208518>
True
love
题目8:
通过类实现一个通用的装饰器,既可以装饰函数 也可以装饰类,既可以装饰有参数又可以
装饰无参数
class Decorator:
def __init__(self,func):
self.func=func
def __call__(self, *args, **kwargs):
self.func()
print('装饰器的功能')
@Decorator #test_01=Decorator(test_01)
def test_01():
print('----原来的功能----')
test_01() #这是一个被调用的对象
>>>>
----1原来的功能----
2装饰器的功能
题目9:
请描述__new__、__repe__ 、__str__、__call__分别在什么情况下会被触发!