1

我必须用 epsilon 转换制作非确定性有限自动机。我更喜欢 ac、c#、JavaScript 的人,但我的大学出于某种原因认为 python 是唯一的出路,所以今天我学习了 python,但显然还不够。

反正。问题出在“ automaton”函数中。我用带有一个stanje1元素inputArrays[0]currentState,inputCharacter

第一次迭代运行良好,但是当我想递归检查通过 epsilon 转换获得的所有状态与下一个字符时,我得到错误:

TypeError: 'NoneType' object is not iterable

使用与 top 调用类似定义的所有参数调用自动递归,但错误以某种方式跳出。

这是我的代码的链接,以及定义自动机的测试文件(您需要像这样运行它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
4

1 回答 1

4

您的提示是崩溃发生在这一行:

states += eNKA(s, ir[0], fn)

而不是更深入的eNKA功能。你可能会怀疑这条线上的东西是None, 而不是可迭代的。ir不可能是None因为您之前检查了这种可能性,所以必须是 is 的返回值eNKANone并且您正在有效地做states += None)。

事实上,情况就是这样。eNKA不是return在所有可能的情况下都有一个值,这可能会导致None返回默认值。

因此,解决方法是查看为什么每个if条件eNKA都失败了,并适当地修复它(或者如果每个条件都失败,则返回更明智的东西)。

于 2014-04-11T20:47:34.037 回答