Je suis en train de faire un code pour reconnaître une chaîne de caractères qui suivent les règles de grammaire:code Python pour accepter la grammaire prédéfinie
- S> ABK
- K-> x | xK | H
- H-> c | d
Alors que les mots comme ABX, abxxx, abc, abxd, abxc, etc ... sont acceptées et des mots comme ab, abb, xxx, etc ... ne sont pas acceptés.
J'ai écrit un code pour faire ça et dans mon analyse ça devrait faire l'affaire, mais il y a quelque chose qui ne va pas, ça renvoie False pour abxx, une phrase qui devrait être acceptée par la grammaire et je pense a à voir avec les valeurs de retour imbriquées des fonctions, que je ne comprends pas très bien.
Le code sera collé ci-dessous, si vous les gars pouvez comprendre ou me signaler ce que je fais mal, je serai reconnaissant.
def S(word):
if word[0] == 'a':
atual = 1
else:
return False
if word[1] == 'b':
atual = 2
else:
return False
accepted = K(atual, word)
if accepted == True:
return True
else:
return False
def K(atual, word):
if word[atual] == 'x':
atual += 1
if len(word) <= atual: # checks to see if the word ended and accept by the first rule of the set K.
return True
else:
K(atual, word) # keeps increasing the value of atual, satisfying the rule xK
else:
value = H(atual, word) # if no more 'x' are found, try the rule H
return value
def H(atual, word):
if word[atual] == 'c' or word[atual] == 'd':
return True
else:
return False
print(S(['a','b','x','x']))
« * mais il y a quelque chose de mal dans ce * » <- s'il vous plaît élaborer –
Je remarque que vous avez une ligne qui est juste 'K (atual, mot)', ceci exécute la fonction mais ne fait rien avec la valeur de retour et retourne None, je suppose que c'est le problème mais ne peut pas être sûr sans élaboration . Aussi, je recommande de courir à travers elle [étape par étape dans un visualiseur] (http://www.pythontutor.com/visualize.html#mode=edit) –
merci @ TadhgMcDonald-Jensen J'ai découvert ce qui n'allait pas, et il –