【问题标题】:Implementing an NFA in Python在 Python 中实现 NFA
【发布时间】:2014-05-20 08:53:22
【问题描述】:

我正在尝试在 python 中实现 NFA,我已经取得了一些进展,但是我被卡住了,因为我需要使用 3d 数组,并且数组的索引需要对应于当前状态和要处理的当前字符.我必须使用整数作为数组的索引,并且我正在尝试将字符串数据类型转换为 int。但是,我收到错误消息:“列表索引必须是整数,而不是 str”,任何帮助将不胜感激。这是我目前写的代码:

"""Initialize States"""
q0=0
q1=1
q2=2

i=0

finstate=q2  #final state is q2

array=[[[0],[0,1]],[[2],[2]],[[],[]]]  #3d array for state transitions

def accepts(state, word):
    global i
    if i==len(word):
        return state==finstate  #if last state is final state accept

    char=word[i]
    i+=1
    int(char) #covert char to int

    nextstates=array[state][char]

    for i in range(len(word)):
        if accepts(nextstates, word):  #recursion
            return True
    return False

def main():
    string= "01" #sample input 
    if accepts(q0, string):
        print("accepts")
    else:
        print("rejects")

main()

【问题讨论】:

  • int(char) 不会导致 char 变为 int。 int(char) 是一个整数; char 不受影响。

标签: python finite-automata nfa


【解决方案1】:

假设您的其余代码是正确的,您应该有类似的东西

char = word[i]
i += 1
intval = int(char)
nextstates=array[state][intval]

【讨论】:

  • 谢谢你的回答,我已经按照你说的做了,但是现在它给出了以下错误:“列表索引必须是整数,而不是列表”我认为它认为 intval 变量为现在的列表,不接受
猜你喜欢
  • 2011-04-29
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
  • 2015-09-16
相关资源
最近更新 更多