利用有限状态机编写卖报机程序
时间: 2023-12-09 17:05:26 浏览: 21
好的,下面是一个简单的卖报机程序的有限状态机实现。
首先,我们定义状态:
- 等待投币状态(WAIT)
- 投币状态(INSERT_COIN)
- 选择报纸状态(CHOOSE_PAPER)
- 出售报纸状态(SELL_PAPER)
然后,我们定义状态转移:
- WAIT -> INSERT_COIN:当用户投币时
- INSERT_COIN -> CHOOSE_PAPER:当用户投币后,进入选择报纸状态
- CHOOSE_PAPER -> SELL_PAPER:当用户选择报纸后,进入出售报纸状态
- SELL_PAPER -> WAIT:当报纸售出后,进入等待投币状态
最后,我们编写代码实现状态机:
```python
class Newsstand:
def __init__(self):
self.state = 'WAIT'
self.coins = 0
self.papers = {
'A': 10,
'B': 5,
'C': 2
}
def insert_coin(self):
if self.state == 'WAIT':
self.state = 'INSERT_COIN'
print('请投币')
elif self.state == 'INSERT_COIN':
print('已经投币,请选择报纸')
else:
print('不能投币')
def choose_paper(self, paper):
if self.state == 'INSERT_COIN':
if paper in self.papers:
if self.coins >= self.papers[paper]:
self.coins -= self.papers[paper]
self.state = 'SELL_PAPER'
print('出售报纸:{}'.format(paper))
else:
print('余额不足,请投币')
else:
print('没有这种报纸')
elif self.state == 'CHOOSE_PAPER':
print('已经选择报纸,请投币')
else:
print('不能选择报纸')
def sell_paper(self):
if self.state == 'SELL_PAPER':
self.state = 'WAIT'
print('请取走报纸')
else:
print('不能出售报纸')
def add_coin(self, coin):
if self.state == 'INSERT_COIN':
self.coins += coin
print('投入{}元,当前余额:{}元'.format(coin, self.coins))
elif self.state == 'WAIT':
print('请先选择报纸')
else:
print('不能投币')
```
使用方法:
```python
newsstand = Newsstand()
newsstand.insert_coin()
newsstand.add_coin(5)
newsstand.choose_paper('A')
newsstand.sell_paper()
```
输出结果:
```
请投币
投入5元,当前余额:5元
出售报纸:A
请取走报纸
```