python状态机案例
时间: 2023-09-06 10:09:21 浏览: 143
以下是一个简单的 Python 状态机案例:
假设有一个自动售货机,它有以下几种状态:
- 待机状态
- 收到硬币状态
- 选择商品状态
- 出售商品状态
当自动售货机处于待机状态时,它等待用户投入硬币。一旦用户投入硬币,则自动售货机进入收到硬币状态,等待用户选择商品。如果用户选择了商品,则自动售货机进入出售商品状态,出售商品并返回待机状态。如果用户没有选择商品,则自动售货机返回收到硬币状态。
下面是一个基于 Python 的状态机实现:
```python
class VendingMachine:
def __init__(self):
self.state = '待机状态'
self.coins = 0
self.selected_item = None
def insert_coin(self, coin):
if self.state == '待机状态':
self.state = '收到硬币状态'
self.coins += coin
print(f'已投入 {self.coins} 元')
elif self.state == '收到硬币状态':
self.coins += coin
print(f'已投入 {self.coins} 元')
elif self.state == '选择商品状态':
print('请先选择商品')
elif self.state == '出售商品状态':
print('请等待出售完毕')
def select_item(self, item):
if self.state == '待机状态':
print('请先投入硬币')
elif self.state == '收到硬币状态':
self.state = '选择商品状态'
self.selected_item = item
print(f'已选择商品 {self.selected_item}')
elif self.state == '选择商品状态':
self.selected_item = item
print(f'已选择商品 {self.selected_item}')
elif self.state == '出售商品状态':
print('请等待出售完毕')
def vend_item(self):
if self.state == '待机状态':
print('请先投入硬币')
elif self.state == '收到硬币状态':
print('请先选择商品')
elif self.state == '选择商品状态':
self.state = '出售商品状态'
print(f'正在出售商品 {self.selected_item},请等待')
self.coins -= 5 # 商品价格为 5 元
self.selected_item = None
self.state = '待机状态'
elif self.state == '出售商品状态':
print('请等待出售完毕')
```
在上面的状态机实现中,售货机的状态保存在 `self.state` 变量中。`self.coins` 变量保存已经投入的硬币数量,`self.selected_item` 变量保存用户选择的商品。
`insert_coin()` 方法用于处理硬币投入事件。根据当前状态,它会更新硬币数量和状态,并输出相应的提示信息。
`select_item()` 方法用于处理商品选择事件。它会更新商品选择和状态,并输出相应的提示信息。
`vend_item()` 方法用于处理商品出售事件。它会检查当前状态是否允许出售商品,如果允许,则扣除商品价格,重置状态并输出相应的提示信息。
这个简单的状态机演示了如何使用 Python 实现状态机,它可以用于构建各种不同的自动化系统。
阅读全文