python FSM 有限状态机

news/2025/3/6 20:39:25/文章来源:https://www.cnblogs.com/guanchaoguo/p/18756342

参考教程

https://python-course.eu/applications-python/finite-state-machine.php

代码实现

class InitializationError(Exception):passclass StateMachine:def __init__(self):self.handlers = {}self.startState = Noneself.endStates = []def add_state(self, name, handler, end_state=0):name = name.upper()self.handlers[name] = handlerif end_state:self.endStates.append(name)def set_start(self, name):self.startState = name.upper()def run(self, cargo):try:handler = self.handlers[self.startState]except:raise InitializationError("must call .set_start() before .run()")if not self.endStates:raise InitializationError("at least one state must be an end_state")while True:(newState, cargo) = handler(cargo)if newState.upper() in self.endStates:print("reached ", newState)breakelse:handler = self.handlers[newState.upper()]positive_adjectives = ["great", "super", "fun", "entertaining", "easy"]
negative_adjectives = ["boring", "difficult", "ugly", "bad"]def start_transitions(txt):split_txt = txt.split(None, 1)word, txt = split_txt if len(split_txt) > 1 else (txt, "")if word == "Python":newState = "Python_state"else:newState = "error_state"return newState, txtdef python_state_transitions(txt):split_txt = txt.split(None, 1)word, txt = split_txt if len(split_txt) > 1 else (txt, "")if word == "is":newState = "is_state"else:newState = "error_state"return newState, txtdef is_state_transitions(txt):split_txt = txt.split(None, 1)word, txt = split_txt if len(split_txt) > 1 else (txt, "")if word == "not":newState = "not_state"elif word in positive_adjectives:newState = "pos_state"elif word in negative_adjectives:newState = "neg_state"else:newState = "error_state"return newState, txtdef not_state_transitions(txt):split_txt = txt.split(None, 1)word, txt = split_txt if len(split_txt) > 1 else (txt, "")if word in positive_adjectives:newState = "neg_state"elif word in negative_adjectives:newState = "pos_state"else:newState = "error_state"return newState, txtdef neg_state(txt):print("Hallo")return "neg_state", ""if __name__ == '__main__':m = StateMachine()m.add_state("Start", start_transitions)m.add_state("Python_state", python_state_transitions)m.add_state("is_state", is_state_transitions)m.add_state("not_state", not_state_transitions)m.add_state("neg_state", None, end_state=1)m.add_state("pos_state", None, end_state=1)m.add_state("error_state", None, end_state=1)m.set_start("Start")m.run("Python is great")m.run("Python is difficult")m.run("Perl is ugly")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/894796.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java SPI机制使用

1. Service Provider Interface SPI描述接口提供者优先规定接口要求,然后交由具体的实现者对接口进行内容的实现;2. 实现 //1. 定义接口 public Interface Demo_interface{//具体实现者必须要实现的内容void doexcute(); } //2.实现接口 public class Demo_Impl implements D…

互联网寒冬下,如何写好一份.NET求职简历?附带简洁免费的简历模板!!!

前言 在当今互联网行业的寒冬时期,每一位求职者都面临着更为激烈的竞争环境,如何在众多.NET候选人中脱颖而出,成为企业心仪的对象,用心准备一份简历显得尤为重要。简历不仅是个人职业经历的简要概述,更是向潜在雇主、HR展示你专业技能、项目经验、个人特质以及求职诚意的关…

注册github

今天成功注册了github账户,并上传了一个小项目。

HarmonyOS Next 属性动画和转场动画

HarmonyOS Next 属性动画和转场动画 在鸿蒙应用开发中,动画是提升用户体验的关键要素。通过巧妙运用动画,我们能让应用界面更加生动、交互更加流畅,从而吸引用户的注意力并增强其使用粘性。鸿蒙系统为开发者提供了丰富且强大的动画开发能力,其中属性动画是整个动画体系的核…

C语言小记

int a =10; int b=3; int c= pow(10,3); //表示10的三次方unsigned 表示不用补码表示 //数字的输入,%d 包括 char,short,int%u unsigned%ld long long%lu unsigned long long输入 float 是 %f double 是 %lf shuchu dou shi %f保留小数的话是大于5才入,小于等于5舍去强…

系统流程图联系

练习题一:图书馆借阅管理系统流程图绘制 背景说明:在学校图书馆借阅管理系统中,学生借阅图书需要经过一系列流程。首先,学生携带校园卡前往借阅处,工作人员通过刷卡设备读取学生信息,系统验证学生身份是否有效。若身份无效,系统提示原因(如校园卡过期、欠费等)。若身份…

推荐4本专著《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》书,非常感谢

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…