Python开发技术--协程 (第1关:异步状态转换器)

第1关:异步状态转换器

 

import asyncio #引入异步库
list = [] #定义一个空列表
#iter()将列表转换为迭代器对象,传入参数startstate中,通过asyncio.run()异步函数
async def StartState(nums): #定义异步函数,接受nums参数
    '''
    开始状态S0
    :param nums:输入的条件
    :return:
    '''
    print('Start Transition :')
    list.append('S0') #在List列表中添加S0
    if next(nums) == 1: #如果下一个参数为1
        await State1(1,next(nums)) #调用State1函数,传入参数1和下一个参数
    else:
        await State2(0,next(nums)) #传入0


async def State1(transition_value: int, input_value):#定义异步函数
    '''
    状态S1
    :param transition_value:上一个状态到S1状态的条件,例如StartState转换到State1时,transition_value为1
    :param input_value:输入的条件nums
    :return: 当转换结束时,返回S1状态转换到其他状态的动作
    '''
    #你的代码在这里#
    i = len(list) #获取当前list列表长度
    list.append('S1') #在List列表中添加s1
    print('{0} calling {1} value = {2}'.format(list[i-1],list[i],transition_value))#打印输出上一个状态和当前状态+传递参数值
    if input_value == 1: #下一个参数为1
        await State2(1,next(nums))#调用State2,传入参数1+下一个参数
    else:
        await State3(0,next(nums))

async def State2(transition_value: int, input_value):
    '''
    状态S2
    :param transition_value:上一个状态到S2状态的条件,例如StartState转换到State2时,transition_value为0
    :param input_value:输入的条件nums
    :return:当转换结束时,返回S2状态转换到其他状态的动作
    '''
    #你的代码在这里#
    i = len(list)
    list.append('S2') #获取当前列表长度
    print('{0} calling {1} value = {2}'.format(list[i-1],list[i],transition_value))#打印输出上一个状态和当前转台+传递的参数值
    if input_value == 1: #下一个参数1
        await State3(1,next(nums))#调用3
    else:
        await State1(0,next(nums))#调用1

async def State3(transition_value: int, input_value):
    '''
    状态S3
    :param transition_value:上一个状态到S3状态的条件,例如State2转换到State3时,transition_value为1
    :param input_value:输入的条件nums
    :return:当转换结束时,返回S3状态转换到其他状态的动作
    '''
    #你的代码在这里#
    i = len(list)
    list.append('S3')
    print('{0} calling {1} value = {2}'.format(list[i - 1], list[i], transition_value))
    if input_value == 1:
        await EndState(1)
    else:
        await State1(0,next(nums))

async def EndState(transition_value: int):
    '''
    结束状态S4
    :param transition_value:上一个状态到S4状态的条件
    :return:返回转换结束时的动作
    '''
    #你的代码在这里#
    i = len(list)
    list.append('S4')
    print('{0} calling {1} value = {2}'.format(list[i-1],list[i],transition_value))

if __name__ == "__main__":
    nums = iter(eval(input()))
    loop = asyncio.get_event_loop()
    loop.run_until_complete(StartState(nums))

状态机:一种用于描述系统状态变化的数学模型

它由一组状态、一组转移、一组动作组成。(状态表示系统当前的状态,转移表示系统从一个状态转移到另一个状态,动作表示在状态转移时需要执行的动作。)

该代码模拟了一个简单的状态机,包括开始状态S0、状态S1、状态S2、状态S3和结束状态E。通过传入不同的参数,状态机根据定义好的状态转移规则自动变化状态,直到到达结束状态E。

使用异步库asyncio实现异步函数,避免了阻塞程序执行的问题。函数之间通过await关键字进行调用,保证了状态转移的顺序和正确性。同时,代码中使用了列表来记录状态机经过的状态,方便调试和观察状态变化。

该代码通过状态机模型实现了一个自动化的状态转移过程,具有良好的可扩展性和可维护性。

 

 

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值