IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème de multiple renvoi


Sujet :

Python

  1. #1
    Membre à l'essai
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2009
    Messages : 5
    Par défaut Problème de multiple renvoi
    Voilà j'utilise Python 3.1.1 pour un DM d'algorithmique...

    Et j'ai vous vous en douter un problème. En effet il m'est demander de créer une fonction de recherche auto-adaptative sur un type de dictionnaire définie comme tel:
    (le type n'est pas a modifier puisqu'il fait parti de l'énoncer)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class noeud(object):
        "la structure noeud d'un arbre ternaire"
        def __init__(self,car,present,gauche=None,milieu=None,droit=None):
            self.car=car
            self.present=present
            self.gauche=gauche
            self.milieu=milieu
            self.droit=droit
    J'ai préalablement créer des fonctions rotationDroite et rotationGauche qui utilise la structure pour faire pivoté les nœud et visiblement elles marchent.

    Mais mon problème réside dans la recherche: il faut que ma fonction prenne en argument un dictionnaire et un mot et renvoi une valeur booléenne et un dictionnaire qui et le même que celui de l'entré mais réorganisé pour un accès plus rapide au dernier mot utilisé... Bref...

    Le problème ne vient pas de l'algorythme mais de la syntaxe, le code que j'ai écris et le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    def rechercheAutoadaptive(dico,mot):
        if dico!=None:
            if len(mot)==1 and dico.car==mot[0]:
                return dico.present,dico
            elif mot[0]==dico.car:
                return (recherche(dico.milieu,mot[1:]))
            elif mot[0]<dico.car:
                BOOLE,dico.gauche = recherche(dico.gauche,mot)  #BOOLE et la valeur de
                if BOOLE == True:                               #la recherhce dans le sous arbre
                    dico = rotationDroite(dico)
                return BOOLE,dico
            elif mot[0]>dico.car:
                BOOLE,dico.droit = recherche(dico.droit,mot)
                if BOOLE == True:
                    dico = rotationDroite(dico)
                return (verassite,dico)
    Mais voilà... Tout aurai été trop beau si sa avait marché...

    A l'éxecution je rencontre le message suivant :
    File "C:\Python\vosNoms.py", line 113, in rechercheAutoadaptive
    BOOLE,dico.gauche = recherche(dico.gauche,mot) #BOOLE et la valeur de
    TypeError: 'bool' object is not iterable
    Es-que quelqu'un pourrai m'aider svp ?? car je planche et je trouve pas mon erreur...

    D'avance merci.

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    Attention au fait que lorsque la condition
    dans le deuxième elif
    est True,
    cela ne signifie pas que len(mot) est nécessairement différent de 1.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    mot = 'c'
    car = 'u'
     
    if len(mot)==1 and car==mot[0]:
        print 'len(mot)==1 and car==mot[0]'
    elif mot[0]==car:
        print 'premier elif'
    elif mot[0]<car:
        print 'second elif'
    elif mot[0]>car:
        print 'troisieme elif'
    résultat
    second elif






    Je me demande si l'erreur ne disparaitrait pas en modifiant de la façon suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
        if dico!=None:
            if len(mot)==1 and dico.car==mot[0]:
                return dico.present,dico
            elif len(mot)!=1 and mot[0]==dico.car:
                return (recherche(dico.milieu,mot[1:]))
            elif len(mot)!=1 and mot[0]<dico.car:
                BOOLE,dico.gauche = recherche(dico.gauche,mot)  #BOOLE et la valeur de
                if BOOLE == True:                               #la recherhce dans le sous arbre
                    dico = rotationDroite(dico)
                return BOOLE,dico
            elif len(mot)!=1 and mot[0]>dico.car:
                BOOLE,dico.droit = recherche(dico.droit,mot)
                if BOOLE == True:
                    dico = rotationDroite(dico)
                return (verassite,dico)


    Mais ton code est difficile à comprendre parce que
    - tu nous parles d'abord d'un «dictionnaire défini comme tel», et on voit ensuite la définition d'une classe
    - de plus , c'est le dictionnaire qui est défini, ou c'est la fonction de recherche qui est définiE ??
    - le nom de la classe, «nœud», ne réapparaît pas dans la suite du code
    - pivoter les nœuds, on ne sait pas ce que ça veut dire
    - la fonction recherche() dans rechercheAutoadaptive(dico,mot) , on ne sait pas non plus ce qu'elle fait. Est-ce que ce ne serait pas plutôt rechercheAutoadaptive() aussi, et donc une fonction récursive ??



    Enfin bref, à mon avis, à un moment le programme rentre à tort dans le deuxième elif avec une valeur de dico.gauche qui est booléenne au lieu d'être ce qu'elle doit être.

Discussions similaires

  1. probléme : template multiple et héritage simple.
    Par laetmo dans le forum Langage
    Réponses: 1
    Dernier message: 03/08/2006, 02h44
  2. problème requete multiplication
    Par MichMich29 dans le forum Langage SQL
    Réponses: 28
    Dernier message: 24/05/2006, 10h16
  3. [FLASH MX] Problème onPress multiple
    Par abenhass dans le forum ActionScript 1 & ActionScript 2
    Réponses: 3
    Dernier message: 14/04/2006, 09h25
  4. [KeyEvent] Problème de multiples appels
    Par pierre.zelb dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 11/08/2005, 14h53
  5. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo