状态机是由两种或多种状态组成的,每一个状态有着对应的功能。状态机使用会让我们的代码简洁,逻辑清晰,条件判断难以实现的问题我们就可以实现,例如我们像完成这样的效果。
我们通过每次画不同的字符串来做出这样的效果,但是如果我们使用条件判断,判断空格数会发现我们代码的逻辑很难。这种情况就可以使用状态机,接下来请大家结合实例,阅读代码注释,进一步理解。
import time
class Draw:
def __init__(self, num=5):
'''
:param num: 圆点个数
:variable flag: 状态机, indents: 原点前面的空格。
'''
self.num = num
self.indents = num
self.flag = True
# 创建绘制函数
def draw(self):
symbols_list = []
for i in range(self.num):
symbols_list.append('•')
_indents = self.num
while True:
# 空白符列表
indents_list = []
for j in range(self.indents):
indents_list.append(' ')
if self.indents == 0: # 当前面的空格到0,切换加的模式
self.flag = False
if self.indents == self.num: # 到了跟圆点一样,就切换减的模式
self.flag = True
self._decide()
# 把两个列表连起来
new_list = indents_list + symbols_list
# 连接成字符串,等待并输出
print(''.join(new_list))
time.sleep(0.5)
def _decide(self):
# 状态机
if not self.flag:
self.indents += 1
elif self.flag:
self.indents -= 1
paint = Draw()
paint.draw()