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

Résolu
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

  1. Modérateur
    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
    1. Modérateur
      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
    2. @jordane45Merci 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
    3. Modérateur
      @limbaon9ben 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
  2. Merci au final j'ai pu trouver ma source d'erreur ^^
    0