• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

Recommended Posts

直接上代码

从枚举导入枚举

从输入导入字典,列表

来自信号灯输入信号

类状态状态(枚举):

NotIn=0

Oning=1

Outed=2

BaseState:类

'''状态基础' ' '

def __init__(self) - None:

self.sg_oningStart=Signal()

self.sg_oningEnd=Signal()

自我sstate=StateState .不属于

def destory(self):

self.sg_oningStart ._cleanup_receiver()

self.sg_oningStart ._cleanup_sender()

self.sg_oningEnd ._cleanup_receiver()

self.sg_oningEnd ._cleanup_sender()

@属性

def is_ready(self) - bool:

''州名' ' NotIn ' ' '

回归自我. state.value==0

@属性

定义(自我)- bool:

''州名。'''

回归自我. state.value==1

@属性

def is _ out(self)-bool :

''州名。\ ' \ ' \ '

回归自我. state.value==2

@属性

定义状态(自身)-状态:

""状态状态\n

NotIn=0 \n

Oning=1 \n

Outed=2 \n

'''

回归自我. state

定义输入(自身):

' ' ' ' sg_oningStart发送' ' '

断言self.is _就绪

自我sstate=StateState .欧宁

self.sg_oningStart.send()

定义出口(自身):

' ' ' sg_oningEnd send ' ' '

断言自我存在

自我sstate=StateState .驱逐

self.sg_oningEnd.send()

定义重置(自我):

'''强制初始化'''

自我sstate=StateState .不属于

类状态(基本状态):

'''状态' ' '

def __init__(self,name: str) - None:

超级()。__init__()

self.name=name

self.order=-1

def __str__(self):

返回“{ State-' f '”self。名字:10 } : { self。sstate }“”} "

__repr__=__str__

基本状态机器:类

def __init__(self,liststate : List[State])-none :

名称=[]

self.nowid=-1

self.ss: Dict[int,State]={}

k=0

self.ss[k]=状态(“开始”)

k=1

对于列表状态:中的s

断言isinstance(s,State)

如果名称不在名称:中

姓名。追加(名称)

断言顺序==-1

顺序=k

self.ss[k]=s

k=1

else:

提升值错误('名称重复)

self.ss[k]=状态(“结束”)

self.endid=k

def __getitem__(self,key: int):

return self.ss.get(键)

@属性

定义s_start(自身):

返回self.ss[0]

@属性

定义结束(自身):

返回自我结束

@属性

def s_now(self):

返回self.ss

@属性

def s_next(self):

如果自我。没有帮助自己。结束:

return self.ss[self.nowid 1]

@属性

def s_back(self):

if self.nowid 0:

return self.ss[self.nowid - 1]

定义状态(自身):

对于k,v in self.ss.items():

收益率(k,v.name,v)

def _strSS(self):

返回[

(''如果k!=自我。noid else '-')f " { k } : { str(v)} "

对于k,v in self.ss.items()

]

def __str__(self):

s='{ StateMaching:\n '

s='\n ' .加入(自我. strSS())

s='\n} '

返回s

__repr__=__str__

类别订单m(BaseStateMachine):

def __init__(self,lst: List[str]) - None:

超级()。__init__([State(i) for i in lst])

自我输入(0)

定义下一个(自己):

如果自我。没有帮助自己。结束:

if self.nowid=0:

self.ss[self.nowid].退出()

self.nowid=1

if self.endid=self.nowid=0:

self.ss[self.nowid].输入()

def enter(self,id: int):

如果self.endid=id:

而id self.nowid:

自我。下一个()

else:

提高值错误(f'id过大,id:{id},self.nowid:{self.nowid} ')

def __str__(self):

s='{ OrderSM:\n '

s='\n ' .加入(自我. strSS())

s='\n} '

返回s

__repr__=__str__

类RandomSM(BaseStateMachine):

def __init__(self,lst: List[str]) - None:

超级()。__init__([State(i) for i in lst])

自我输入(0)

def enter(self,id: int,is _ reenter : bool=False):

如果self.endid=id=0:

if self.nowid!=id:

if self.nowid=0:

self.ss[self.nowid].退出()

self.ss[self.nowid].重置()

self.nowid=id

self.ss[self.nowid].输入()

else:

如果是_reEnter:

self.reEnter()

else:

提高值错误(f'id过大,id:{id},self.nowid:{self.nowid} ')

极好的重新输入(自己):

self.ss[self.nowid].退出()

self.ss[self.nowid].重置()

self.ss[self.nowid].输入()

def __str__(self):

s='{ RandomSM:\n '

s='\n ' .加入(自我. strSS())

s='\n} '

返回s

__repr__=__str__

if __name__=='__main__':

sm=OrderSM(['a1 ',' a2 ',' a3 ',' a4'])

sm.enter(3)

印刷(sm)

sm2=RandomSM(['b1 ',' b2 ',' b3 ',' b4'])

sm2.enter(3)

打印(sm2)

打印(sm2[2])

Link to comment
Share on other sites