首页 > 解决方案 > 在 python 中将字典与 dfa 库一起使用

问题描述

我正在尝试在 python 中使用“dfa”库(https://pypi.org/project/dfa/https://github.com/mvcisback/dfa),但我遇到了一些问题。

我正在尝试使用 dict2dfa 函数从字典创建 DFA 对象。
这是您可以在文档中找到的示例:

dfa_dict = {
    0: (False, {0: 0, 1: 1}),
    1: (False, {0: 1, 1: 2}),
    2: (False, {0: 2, 1: 3}), 
    3: (True, {0: 3, 1: 0})
}

# Dictionary -> DFA
dfa = dict2dfa(dfa_dict, start=0)

我试过了,它可以工作,但如果我改变 DFA 的转换,它就会中断。
例如,如果我将第一行更改为:0: (False, {0: 0}),删除转换 1:1,它会给我这个错误:

Traceback (most recent call last):
  File "/Users/manu/Desktop/Dfas/dfa-test.py", line 23, in <module>
    write_dot(dfaa, "./dfa1.dot")
  File "/Users/manu/miniforge3/lib/python3.9/site-packages/dfa/draw.py", line 7, in write_dot
    dfa_dict, init = dfa.dfa2dict(dfa_)
  File "/Users/manu/miniforge3/lib/python3.9/site-packages/dfa/utils.py", line 11, in dfa2dict
    dfa_.states()  # Explicitly compute states.
  File "/Users/manu/miniforge3/lib/python3.9/site-packages/dfa/dfa.py", line 133, in states
    successors = [self._transition(curr, a) for a in inputs]
  File "/Users/manu/miniforge3/lib/python3.9/site-packages/dfa/dfa.py", line 133, in <listcomp>
    successors = [self._transition(curr, a) for a in inputs]
  File "/Users/manu/miniforge3/lib/python3.9/site-packages/funcy/calc.py", line 62, in wrapper
    value = memory[key] = func(*args, **kwargs)
  File "/Users/manu/miniforge3/lib/python3.9/site-packages/dfa/utils.py", line 30, in <lambda>
    transition=lambda s, c: dfa_dict[s][1][c],
KeyError: 1

实际上,如果我尝试使用该对象,则会引发错误,例如调用:

print(dfa.states())

标签: pythondfa

解决方案


推荐阅读