2014-05-20 2 views
1

J'essaye d'implémenter un NFA en python et j'ai fait quelques progrès mais je suis bloqué car j'ai besoin d'utiliser un tableau 3d et les indices du tableau doivent correspondre à l'état actuel et le caractère actuel à traiter. Je dois utiliser des entiers comme indices du tableau et j'essaye de convertir du type de données de chaîne en int pour ceci. Cependant, j'obtiens l'erreur: "les index de liste doivent être entiers, pas str", n'importe quelle aide sera très appréciée. Voici le code que j'ai écrit jusqu'à présent:Implémentation d'un NFA en Python

"""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() 
+0

'int (char)' ne cause pas 'char 'devenir un int. 'int (char)' est un int; 'char' n'est pas affecté. – user2357112

Répondre

1

bien en supposant que le reste de votre code est correct, vous devriez avoir quelque chose comme

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

Merci pour votre réponse, j'ai fait comme vous l'avez dit, mais maintenant il donne l'erreur suivante: "les index de liste doivent être des entiers, pas la liste" Je pense qu'il voit la variable intval comme une liste maintenant et ne Acceptez – user3655617