Problème d'execution d'un script en python

Résolu/Fermé
limbaon9 Messages postés 42 Date d'inscription lundi 14 octobre 2019 Statut Membre Dernière intervention 12 mars 2022 - Modifié le 14 avril 2020 à 14:13
limbaon9 Messages postés 42 Date d'inscription lundi 14 octobre 2019 Statut Membre Dernière intervention 12 mars 2022 - 16 avril 2020 à 12:49
Bonjour tout le monde. J'ai ecrit un programme en python sur l'analyse textuelle et j'ai un problème d’exécution.
class derniere_occurrence(object):
    def __init__(self,M,A):
        """Générer un dictionnaire avec la dernière occurrence de chaque alphabet
        lettre à l'intérieur du motif.
        
         Remarque: Cette fonction utilise str.rfind, qui est déjà un modèle
        algorithme de correspondance. Il existe des moyens plus «basiques» pour générer ce
        dictionnaire"""
        
        self.occurrences=dict()
        for L in A:
            self.occurrences[L] = M.rfind(L)
            
    def __appel__(self,L):
        """Renvoie la dernière position de la lettre spécifiée à l'intérieur du motif.
        Renvoie -1 si la lettre n'est pas trouvée dans le motif"""
        return self.occurrences[L]
        
        
    def boyer_moore(T,M):
        """Trouve l'occurrence du motif dans le texte."""
        A = set(T)
        derniere = derniere_occurrence(M,A)
        m = len(M)
        n = len(T)
        i = m - 1  # texte index
        j = m - 1  # motif index
        while i < n:
            if T[i] == M[j]:
                if j == 0:
                    return i
                else:
                    i -= 1
                    j -= 1
            else:
                l = derniere(T[i])
                i = i + m - min(j, 1+l)
                j = m - 1 
        return -1
        
### TEST DES FONCTION ###
if __name__ == '__main__':
    def apercu(T,M):
        print 'Texte: %s' % T
        p = boyer_moore(T,M)         
        print 'Trouvé: %s%s' % ('.'*p, M)
            
    T1 = 'abacaabadcabacabaabb'
    M1 = 'abacab'
    resultat1=apercu(T1, M1)
    print(resultat1)

Et quand j'essaye d’exécuter le script ca m'affiche " NameError: global name 'boyer_moore' is not defined " je sais que l'erreur vient de cette ligne mais je ne vois pas en quoi cette ligne peut constituer une erreur sachant que boyer_moore(T,M) est une méthode bien définie. Est ce que quelqu'un pourrait bien m'aider à résoudre ce problème.
Merci d'avance..

2 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 avril 2020 à 14:28
Bonjour,

Sauf erreur de ma part, ta méthode se trouve dans la class derniere_occurrence

Donc son appel devrait sûrement être du style
derniere_occurrence.boyer_moore(T,M) 

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
Modifié le 14 avril 2020 à 14:30
D’ailleurs, je ne vois pas non plus l'instanciation de ta class dans ton script.

class B(object):
    def foo(self):
        print 'Foo'

    def bar(this_object):
        this_object.foo()

b = B()
b.bar() # prints 'Foo'
0
limbaon9 Messages postés 42 Date d'inscription lundi 14 octobre 2019 Statut Membre Dernière intervention 12 mars 2022 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
14 avril 2020 à 15:27
Merci pour votre réponse et j'ai essayé de corriger tout ce qui était faux mais quand je met la ligne 45 en commentaire comme par hasard y'a plus d'erreur de syntaxe. De ce fait l'erreur provient de cette ligne.
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > limbaon9 Messages postés 42 Date d'inscription lundi 14 octobre 2019 Statut Membre Dernière intervention 12 mars 2022
14 avril 2020 à 15:30
ben oui.. on sait que l'erreur vient de la ligne 45
du moins.. celle la :
p = boyer_moore(T,M)         

ce n'est pas un hasard ... surtout si tu as lu mes réponses précédentes...

Donc.. qu'as tu essayé de corriger ?
Montres ton "nouveau" code si tu veux de l'aide.
0
limbaon9 Messages postés 42 Date d'inscription lundi 14 octobre 2019 Statut Membre Dernière intervention 12 mars 2022
16 avril 2020 à 12:49
Merci au final j'ai pu trouver ma source d'erreur ^^
0