优化上述状态机例子,增加自动切换状态
时间: 2024-04-08 16:07:20 浏览: 28
好的,我们可以使用一个状态转移表来实现状态之间的自动切换。这样就不需要在每个状态中手动指定下一个状态了。
以下是优化后的状态机代码示例:
```python
# 定义状态常量
STATE_A = 0
STATE_B = 1
STATE_C = 2
# 定义状态转移表
state_table = {
STATE_A: { 'event1': STATE_B, 'event2': STATE_C },
STATE_B: { 'event2': STATE_C },
STATE_C: { 'event1': STATE_A }
}
# 定义状态机类
class StateMachine:
def __init__(self, initial_state):
self.current_state = initial_state
def transition(self, event):
if event in state_table[self.current_state]:
self.current_state = state_table[self.current_state][event]
print(f'Transitioned to state {self.current_state}')
else:
print(f'Invalid event {event} for current state {self.current_state}')
# 测试状态机
machine = StateMachine(STATE_A)
machine.transition('event1') # 输出 Transitioned to state 1
machine.transition('event2') # 输出 Transitioned to state 2
machine.transition('event2') # 输出 Transitioned to state 2
machine.transition('event1') # 输出 Transitioned to state 0
machine.transition('event1') # 输出 Transitioned to state 1
machine.transition('event2') # 输出 Transitioned to state 2
```
在这个例子中,我们使用了一个字典来表示状态转移表。字典的键是状态常量,值是另一个字典,表示在该状态下可以接受的事件和下一个状态。状态机的 `transition` 方法接受一个事件参数,如果该事件在当前状态下是合法的,则根据状态转移表自动切换到下一个状态。否则,输出一条错误信息。