#推导式
a=[i for i in range(10)]#推导式
print(a)
#生成器表达式
a=(i for i in range(10))#生成器表达式
print(a)
#True=1 False=0
print(True+2) #True=1
print(False+2)#False=0
#压缩 把两个序列压缩在一起 长度不一样是 以短的为主
a=[1,2,3,4]
b='asdf'
c=zip(a,b)
for x in c:
print(x)#输出为顺序一一对应的元组
#压缩2
a=[1,2,3]
b='as'
c=zip(a,b)
for z in c:
print(z)
#map
def asd(a):
return a*a
b=[1,2,3,4]
d=map(asd,b)#将b里的每个元素一一传给asd函数,返回给d
print(d)
for x in d:
print(x)
#max abs
a=[1,2,3,-2,4]
s=max(a,key=abs)
print(s)
#sort 排序,
a=[-9,-8,4,3,-1]
a.sort(key=abs)#按照绝对值的大小进行排序,返回值本身。
print(a)
#排序
a=[-9,-8,4,3,-1]
a.sort(key=abs,reverse=True)#颠倒顺序
print(a)
#filter
def asd(a):
return a%2==1#返回bool类型
x=[1,3,4,6,7,9,19]
b=filter(asd,x)#把x中的元素一一给asd函数 进行判断 返回对 的给b。
print(b)
for z in b:
print(z)
#工厂类型
class bmw():
def __init__(self,name):
self.name=name
class ben():
def __init__(self,name):
self.name=name
class carfactory():
@staticmethod#必须使用静态方法
def makecar(name):
if name=='宝马':
return bmw(name)
elif name=='奔驰':
return ben(name)
car1=carfactory.makecar('宝马')#类型 bmw
print(car1.name,type(car1))
car2=carfactory.makecar('奔驰')#类型 ben
print(car2.name,type(car2))
#抽象属性
from abc import ABC,abstractclassmethod,abstractmethod,abstractstaticmethod
class abc1():
@abstractclassmethod
def cmethod(self):
pass
@abstractmethod
def method(self):
pass
@abstractstaticmethod
def amethod(self):
pass
z=abc1()
#观察者模式 observer
class Resi():
def __init__(self):
self.obsv=[]
self.status=''
def attach(self,ob):
self.obsv.append(ob)
def notify(self):
for x in self.obsv:
x.update()
class Observe():
def __init__(self,name,rs):
self.name=name
self.rs=rs
def update(self):
print('%s %s不要玩游戏了'%(self.rs.status,self.name))
class Manager():
def __init__(self,name,boss):
self.name=name
self.boss=boss
def update(self):
print('%s %s一起去饭店吃饭'%(self.boss.status,self.name))
if __name__=='__main__':
resi=Resi()
obj_zs=Observe('张三',resi)
obj_ls=Observe('李四',resi)
obj_ww=Observe('王五',resi)
Man_my=Manager('马云',resi)
Man_lq=Manager('刘强东',resi)
resi.attach(obj_zs)
resi.attach(obj_ls)
resi.attach(obj_ww)
resi.attach(Man_my)
resi.attach(Man_lq)
resi.status='老板来了'
resi.notify()
#策略模式
class CashNormal():#原价
def accept_money(self,money):
return money
class CashRate():#打折
def __init__(self,rate):
self.rate=rate
def accept_money(self,money):
return money*self.rate
class CashReturn():#满减
def __init__(self,conditon,ret):
self.condition=conditon
self.ret=ret
def accept_money(self,money):
return money-(money//self.condition)*self.ret
class Context():
def __init__(self,cs):
self.cs=cs
def getResult(self,money):
return self.cs.accept_money(money)
if __name__ == '__main__':
zd={}
zd[1]=Context(CashNormal())
zd[2]=Context(CashRate(0.8))
zd[3]=Context(CashReturn(300,50))
celue=int(input('请输入策略'))
if celue in zd.keys():
cs=zd[celue]
else:
cs=zd[1]
money=float(input('请输入钱:'))
print(cs.getResult(money))