我必须制造带有epsilon跃迁的非确定性有限自动机。我更像一个c,c#,JavaScript的家伙,但是我的大学认为因为某种原因,python是唯一的方法,所以今天我学习了python,但显然还不够。
不管怎么说。问题在于"automaton“函数。我使用带有一个元素(stanje1)的初始状态列表和自动机必须读取的字符数组(inputArrays[0])和定义转换函数的字典(字典键是字符串currentState,inputCharacter,值是下一个状态数组)来调用它。
第一次迭代运行良好,但是当我想递归地检查通过epsilon转换得到的所有状态时,我得到了错误:
TypeError: 'NoneType' object is not iterable自动机递归被调用,所有参数的定义类似于顶层调用中的参数,但是error却不知何故跳了出来。
这是链接到我的代码,以及定义自动机的测试文件(您需要像myScript.py < automaton.txt那样运行它)。另外,这里有一个完整的错误报告:
C:\Users\Jinx\Desktop\UTRLabos1>sim.py < test.txt
['stanje1']
['st6']
Traceback (most recent call last):
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 50, in <module>
print(automaton(['stanje1'], inputArrays[0], transitionFunction))
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 45, in automaton
if estates : other = automaton(estates, ir[1:], fn)
File "C:\Users\Jinx\Desktop\UTRLabos1\sim.py", line 37, in automaton
states += eNKA(s, ir[0], fn)
TypeError: 'NoneType' object is not iterable发布于 2014-04-11 20:47:34
您的提示是,崩溃发生在以下一行:
states += eNKA(s, ir[0], fn)而不是更深层次的eNKA函数。您可能怀疑这一行上的东西是None,而不是可迭代的。ir不可能是None,因为您之前检查过这种可能性,所以必须是eNKA的返回值为None (而且实际上正在执行states += None)。
事实上,情况就是这样。eNKA不会在每种可能的情况下都使用return值,这可能会导致返回None的默认值。
因此,修复将是了解为什么eNKA中的每个eNKA条件都失败,并对其进行适当的修复(如果每个条件都失败,则返回更明智的内容)。
https://stackoverflow.com/questions/23022164
复制相似问题