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 :

Arbre phylogenetique - python


Sujet :

Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Points : 4
    Points
    4
    Par défaut Arbre phylogenetique - python
    Bonjour,

    Lors d'un de mes projets scolaires, il m'est demandé d'implémenter une fonction qui affiche un arbre phylo de manière agréable à lire.

    C'est à dire qu'un arbre de ce type :
    Nom : Capture d’écran 2014-04-23 à 14.20.45.png
Affichages : 1320
Taille : 12,4 Ko

    devra être affiché de la sorte :

    Nom : Capture d’écran 2014-04-23 à 14.28.38.png
Affichages : 1538
Taille : 14,3 Ko

    En essayant de passer par une fonction chapeau j'ai écris ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def profondeur(monarbre,i):
       if tree == None : 
             return 0
       else:
             (u,fg,fd) = monarbre
             print "+"
             print /"|  "*(profondeur(fg,i+1)-1) "|--+ " profondeur(fg,i+1)
             profondeur (fd,i+1)
    Je n'arrive pas a debugger mon code. Si jamais je pouvais avoir un tuyau.. Merci!

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    Salut,

    dans la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print /"|  "*(profondeur(fg,i+1)-1) "|--+ " profondeur(fg,i+1)
    • le "/" est en trop
    • il faut concaténer tes chaines de caractères ou mettre une virgule entre 2


    les erreurs successives qu'on obtient en essayant de lancer un fichier contenant juste ta fonction fournissent de bons indices:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     File "./arbre.py", line 9
        print /"|  "*(profondeur(fg,i+1)-1) "|--+ " profondeur(fg,i+1)
              ^
    SyntaxError: invalid syntax
    ...
    File "./arbre.py", line 9
        print "|  "*(profondeur(fg,i+1)-1) "|--+ " profondeur(fg,i+1)
                                                 ^
    SyntaxError: invalid syntax
    ...
    File "./arbre.py", line 9
        print "|  "*(profondeur(fg,i+1)-1) + "|--+ " profondeur(fg,i+1)
                                                              ^
    SyntaxError: invalid syntax

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Citation Envoyé par Tryph Voir le message
    Salut,

    dans la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print /"|  "*(profondeur(fg,i+1)-1) "|--+ " profondeur(fg,i+1)
    • le "/" est en trop
    • il faut concaténer tes chaines de caractères ou mettre une virgule entre 2

    du coup j'ai écrit ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def profondeur(monarbre,i):
       if tree == None:
            return 0
       else:
            (u,fg,fd) = monarbre
            print "+ " + str(u)
            print "|  " *(profondeur(fg,i+1)-1) + "|--+ " + str(profondeur(fg,i+1))
            profondeur(fd,i+1)
    et du coup au final quand je veux afficher mon arbre comme demandé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def prettyprint(monarbre,0)
       profondeur(monarbre,0)
    Mais je semble toujours avoir un problème..

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Traverser une arborescence est un problème intéressant et tu as déjà compris que tu devais le faire avec une fonction récursive.

    Mais il faudrait nous montrer l'arbre en question et aussi le résultat que tu obtiens parce que la simple phrase "Mais je semble toujours avoir un problème" ça ne nous dit rien.

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    Salut,

    c'est déjà bien, la définition de la fonction ne lève plus d'erreur.
    le problème c'est que tu ne nous dis pas quel est ton problème et que tu ne nous fourni pas d'exemple d'arbre pour tester.
    dans ces conditions c'est difficile de t'aider.

    fourni nous un exemple d'arbre à afficher et explique nous quel est le problème que tu constates.

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Tryph Voir le message
    Salut,

    c'est déjà bien, la définition de la fonction ne lève plus d'erreur.
    le problème c'est que tu ne nous dis pas quel est ton problème et que tu ne nous fourni pas d'exemple d'arbre pour tester.
    dans ces conditions c'est difficile de t'aider.

    fourni nous un exemple d'arbre à afficher et explique nous quel est le problème que tu constates.
    Citation Envoyé par VinsS Voir le message
    Mais il faudrait nous montrer l'arbre en question et aussi le résultat que tu obtiens parce que la simple phrase "Mais je semble toujours avoir un problème" ça ne nous dit rien.
    Salut,

    pour vous répondre, l'arbre que je voudrais testé est le suivant :
    Nom : Capture d’écran 2014-04-23 à 14.20.45.png
Affichages : 1982
Taille : 12,4 Ko

    et je l'ai codé de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monarbre = ( ("A",0), (("B",0.15), (("C",0.22), None, None),
                                       (("D",0.12), None, None)),
                          (("E",0.2),  (("F",0.18), None, None),
                                       (("G",0.22), None, None)))
    quand je teste juste ma fonction profondeur j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    >>> profondeur(monarbre,0)
    + ('A', 0)
    + ('B', 0.15)
    + ('C', 0.22)
    |--+ 0
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "<stdin>", line 7, in profondeur
      File "<stdin>", line 7, in profondeur
    TypeError: unsupported operand type(s) for -: 'NoneType' and 'int'
    alors que je devrai avoir ceci : Nom : Capture d’écran 2014-04-23 à 14.28.38.png
Affichages : 1220
Taille : 14,3 Ko

    de plus quand j'essaye d'utiliser ma fonction profondeur comme fonction chapeau j'obtiens une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    def prettyprint(monarbre,0):
        profondeur(monarbre,0)
     
    >>> def prettyprint(monarbre,0):
      File "<stdin>", line 1
        def prettyprint(monarbre,0):
                                 ^
    SyntaxError: invalid syntax
    >>>     profondeur(monarbre,0)
      File "<stdin>", line 1
        profondeur(monarbre,0)
        ^
    IndentationError: unexpected indent
    Merci

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Salut,

    Citation Envoyé par chlowecita Voir le message
    Salut,

    pour vous répondre, l'arbre que je voudrais testé est le suivant :
    Nom : Capture d’écran 2014-04-23 à 14.20.45.png
Affichages : 1982
Taille : 12,4 Ko

    et je l'ai codé de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monarbre = ( ("A",0), (("B",0.15), (("C",0.22), None, None),
                                       (("D",0.12), None, None)),
                          (("E",0.2),  (("F",0.18), None, None),
                                       (("G",0.22), None, None)))
    A mes yeux, ça n'a pas grand sens, mais on a peut-être des manières de raisonner différentes.
    Pourais tu expliquer la logique de ton code comme si on était des gamins de 6 ans ?

    Question subsidiaire : On vous a appris à faire créer et utiliser des classes en cours ?
    Pourfendeur de singletons en croisade

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    Salut,

    A mes yeux, ça n'a pas grand sens, mais on a peut-être des manières de raisonner différentes.
    Pourais tu expliquer la logique de ton code comme si on était des gamins de 6 ans ?

    Question subsidiaire : On vous a appris à faire créer et utiliser des classes en cours ?
    Salut,

    Je vais essayer.
    Alors à partir de l'arbre encodé tel que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    monarbre = ( ("A",0), (("B",0.15), (("C",0.22), None, None),
    (("D",0.12), None, None)),
    (("E",0.2), (("F",0.18), None, None),
    (("G",0.22), None, None)))
    qui lorsqu'on le "dessine" correspond à Nom : Capture d’écran 2014-04-23 à 14.20.45.png
Affichages : 1235
Taille : 12,4 Ko
    Je souhaite l'afficher d'une manière plus agréable ce qui permettra tout au long de mon projet une lecture et un debogage facilité.
    Donc je veux afficher mon arbre dans l'ordre préfixe ce qui revient à afficher, la racine (ici ('A',0), noté u), puis le fils gauche (n) de ma racine, puis le fils gauche (n+1) de mon fils gauche (n) etc, et ensuite le fils droit de mon fils gauche (n+1) puis le fils droit de mon fils gauche (n) etc.
    Ensuite on passe à l'affichage du fils droit (n) de ma racine, puis le fils gauche de mon fils droit etc.

    J'espère avoir été plus clair.. :s

    Et quant à la question subsidiaire, la réponse est non.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Là tu répètes l'objectif de ton programme, pas la logique de ton code.

    Ce que je veux que tu décrive, c'est la structure de ta variable "monarbre" : Selon quelle logique tu l'as implémentée de cette manière. Que représente chaque variable, chaque tuple, etc. Comme si on était des débiles.

    Cette manière de décrire les choses te permettra de réfléchir à la manière dont tu as fait les choses, ce que tu comptes faire, et comment tu vas le faire, et peut-être de revoir ta structure pour simplifier la manière d'atteindre l'objectif.

    Une vulgarisation de la programmation informatique, c'est expliquer des choses compliquées, avec un langage restreint, à quelqu'un qui ne réfléchit pas, mais qui fait exactement ce qu'on lui demande, ni plus, ni moins. Donc si tu arrives à décrire une manière de faire les choses qu'un enfant de 6 ans pourrait comprendre, tu as déjà une bonne partie de ton programme qui est écrit, y'a plus qu'à le traduire.
    Pourfendeur de singletons en croisade

  10. #10
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Points : 4
    Points
    4
    Par défaut
    Hum je vois

    Donc je prends la racine de mon arbre de base c'est de la que tout va commencer. Je la marque : + (A,0) avec A = racine 0 = la distance depuis la racine.
    puis je vais à la ligne et je veux appliquer la meme chose au fils gauche de ma racine, donc ce fils gauche devient ma racine +1, et comme par rapport à ma racine initiale on est descendu d'un niveau je dois avoir :
    + ('A',0)
    |--+ ('B', 0.15)

    je descends encore d'un niveau tel que ('B', 0.15) devient ma nouvelle racine. Je m'occupe alors de son fils gauche. Comme de la racine initiale on est descendu d'encore un niveau je decale d'un espace de façon à avoir :
    + ('A',0) ==> racine initiale
    |--+ ('B', 0.15) ==> racine +1
    | |--+ (’C’, 0.22) ==> racine +2

    ma racine +2 n'ayant pas de fils, je "remonte" à ma racine+1 et je veux afficher son fils droit. Le fils droit de racine+1 étant au meme niveau que racine+2 on y verra le même décalage

    + ('A',0) ==> racine initiale
    |--+ ('B', 0.15) ==> racine +1
    | |--+ ('C', 0.22) ==> racine +2
    | |--+ ('D', 0.12)

    Hors avec mon code je n'arrive à afficher que jusqu'au niveau racine+2 , sans l'affichage de ('D',0.12) et SANS les décalages.


    Concernant la variable monarbre, elle nous à été donné tel quel par le prof. Mais de ce que je n'en ai compris : on a monarbre(u,fg,fd) avec u : racine fg : fils gauche, fd : fils droit.
    mais chaque noeud de mon arbre est représenté par un tuple ('A',0) = A : noeud, 0 = distance du noeud A, à la racine de l'arbre.

  11. #11
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    dans ton script y a une ligne qui fait un peu mal à la tête, c'est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "|  " *(profondeur(fg,i+1)-1) + "|--+ " + str(profondeur(fg,i+1))
    cette ligne est inutilement compliquée, elle ne fait pas ce que tu souhaite qu'elle fasse à mon avis et en plus elle finit par provoquer une erreur.

    à mon avis, tu devrais la remplacer par un simple:
    tu verras que ça ne plante plus et que le résultat est pas si éloignée de ce que tu souhaite au final.
    à partir de cette base incomplète mais saine, je pense que tu y verras plus clair. et sinon, il sera toujours temps de réclamer plus d'aide.

    et une autre chose aussi, pense à remplacer cette variable "tree" dans le test de ton "if", ça marchera mieux aussi

  12. #12
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    pour vous répondre, l'arbre que je voudrais testé est le suivant :
    Nom : Capture d’écran 2014-04-23 à 14.20.45.png
Affichages : 1982
Taille : 12,4 Ko

    et je l'ai codé de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monarbre = ( ("A",0), (("B",0.15), (("C",0.22), None, None),
                                       (("D",0.12), None, None)),
                          (("E",0.2),  (("F",0.18), None, None),
                                       (("G",0.22), None, None)))
    Désolé mais ton arbre est inexact.

    Soit le schéma initial soit les tuples imbriqués.

    Le résultat que tu obtiens avec prettyprint correspond bien aux tuples mais ce n'est pas le schéma donné.

    Si c'est ce schéma que tu dois définir, avec les valeurs numériques, les tuples ne sont pas adaptés tu dois utiliser un dictionnaire.

    Ceci représente ton schéma:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    tree = {"A": (0, 
                 {"B": (0.15, 
                       {"C": 0.22,}, 
                       {"D": 0.12,})}, 
                 {"E": (0.2, 
                       {"F": 0.18,}, 
                       {"G": 0.22,})
                 })
            }
    Si tu dois préserver les valeurs None, ça peut se faire.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Si l'arbre est fourni par son prof, y'a pas d'autre choix que de faire avec.
    Il est exact, mais vraiment pas clair en fait.

    Les fonctions déjà codées par chlowecita s'approchent de la solution mais nécessitent des corrections.

    En les reprenant en expliquant de manière détaillée ce que doit faire chaque ligne, elle devrait arriver à avoir un algo correct qu'il y aura plus qu'à traduire.
    Pourfendeur de singletons en croisade

  14. #14
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par Petibidon Voir le message
    Si l'arbre est fourni par son prof, y'a pas d'autre choix que de faire avec.
    Il est exact, mais vraiment pas clair en fait.
    Non, il n'est pas exact.

  15. #15
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    je vois pas ce qu'il y a d'inexact dans cet arbre...
    les données ne sont pas tout à fait dans le même ordre que sur l'image...?
    si c'est ça, c'est juste un "problème" d'affichage, ça change rien à l'(in)exactitude des données.

    après, discuter sur l'(in)exactitude de l'arbre, ça n'a aucun intérêt et ça n'aidera certainement pas le demandeur.
    ce qu'il veut c'est l'afficher, pas debattre sur l'ordre des éléments qu'il contient.

  16. #16
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Si c'est bien le schéma présenté qui doit être traité, alors je le redis, l'arbre est faux et le code ne pourra jamais produire qu'un résultat faux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    monarbre = ( ("A",0), (("B",0.15), (("C",0.22), None, None),
                                       (("D",0.12), None, None)),
                          (("E",0.2),  (("F",0.18), None, None),
                                       (("G",0.22), None, None)))
    Cet arbre est ceci:
    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
     
    |---- ("A", 0)
    |---- ("B", 0.15)
    |   |---- ("C", 0.22)
    |   |  |-  None
    |   |  |-  None
    |   |---- ("D", 0.12)
    |      |-  None
    |      |-  None
    |---- ("E",0.2)
        |---- ("F", 0.18)
        |  |-  None
        |  |-  None
        |---- ("G",0.22)
           |-  None
           |-  None
    où l'on voit que ("A",0) n'est le parent de rien du tout alors que sur le schéma il est parent de ("B", 0.15) et de ("E",0.2)


    Edit: J'ajouterai que ("B", 0.15) et ("E",0.2) ne sont parent de rien du tout non plus.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Sisi, l'arbre est exact.
    Si tu regarde bien, chaque niveau est un tuple (info, gauche, droite), où info est lui même un tuple... C'est illisible et capillotracté, mais correct.
    Pourfendeur de singletons en croisade

  18. #18
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2010
    Messages : 553
    Points : 2 740
    Points
    2 740
    Par défaut
    je plussoie fermement ce que raconte Petitbidon et j'ajouterai que les None au bout des branches sont justement là pour signifier que c'est la fin de la branche et un code correct ne les affichera pas.
    c'est d'ailleurs à ça que sert le "if tree == None:" dans le code de clowecita, à ceci près qu'il faut remplacer "tree" par "monarbre" pour que ça fonctionne.

    et d'ailleurs, avec quelques petites corrections sur le code de clowecita, j'obtiens ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    + ('A', 0)
    |--+ ('B', 0.15)
    |  |--+ ('C', 0.22)
    |  |--+ ('D', 0.12)
    |--+ ('E', 0.2)
    |  |--+ ('F', 0.18)
    |  |--+ ('G', 0.22)
    et il suffit d'inverser 2 lignes pour obtenir ce résultat qui est plus proche de l'image fournie:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    + ('A', 0)
    |--+ ('E', 0.2)
    |  |--+ ('G', 0.22)
    |  |--+ ('F', 0.18)
    |--+ ('B', 0.15)
    |  |--+ ('D', 0.12)
    |  |--+ ('C', 0.22)

  19. #19
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Désolé Tryph, mais dans ton résultat ("A", 0) n'est pas le parent de ce qui suit, or c'est ce qui est exigé dans le schéma de base.

    J'ai effectivement rajouter les None dans mon arbre pour éviter une vérification de plus, je les ai remplacés par des dictionnaires vides plus exactement.

    Soit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    arbre = {("A", 0): 
                 ({("B", 0.15): 
                       ({("C", 0.22): {}}, 
                       {("D", 0.12): {}})}, 
                 {("E", 0.2): 
                       ({("F", 0.18): {}}, 
                       {("G", 0.22): {}})})
            }
    Ce qui produit ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    vincent@tiemoko:~/Bureau$ python printtree.py 
    ('A', 0)
        |
        |--('B', 0.15)
        |    |
        |    |--('C', 0.22)
        |    |--('D', 0.12)
        |--('E', 0.2)
        |    |
        |    |--('F', 0.18)
        |    |--('G', 0.22)

  20. #20
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par Tryph Voir le message
    dans ton script y a une ligne qui fait un peu mal à la tête, c'est celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print "|  " *(profondeur(fg,i+1)-1) + "|--+ " + str(profondeur(fg,i+1))
    cette ligne est inutilement compliquée, elle ne fait pas ce que tu souhaite qu'elle fasse à mon avis et en plus elle finit par provoquer une erreur.

    à mon avis, tu devrais la remplacer par un simple:
    tu verras que ça ne plante plus et que le résultat est pas si éloignée de ce que tu souhaite au final.
    à partir de cette base incomplète mais saine, je pense que tu y verras plus clair. et sinon, il sera toujours temps de réclamer plus d'aide.

    et une autre chose aussi, pense à remplacer cette variable "tree" dans le test de ton "if", ça marchera mieux aussi
    Je ne comprends pas trop la. Remplacer toute ma ligne par ?

    En testant j'obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> profondeur(monarbre,0)
    + ('A', 0)
    + ('B', 0.15)
    + ('C', 0.22)
    Alors je vois pas en quoi ca résout mon problème.

    Concernant l'arbre et son code c'est en effet du copier coller de ce que mon prof m'a fourni.


    Citation Envoyé par Tryph Voir le message
    je plussoie fermement ce que raconte Petitbidon et j'ajouterai que les None au bout des branches sont justement là pour signifier que c'est la fin de la branche et un code correct ne les affichera pas.
    c'est d'ailleurs à ça que sert le "if tree == None:" dans le code de clowecita, à ceci près qu'il faut remplacer "tree" par "monarbre" pour que ça fonctionne.

    et d'ailleurs, avec quelques petites corrections sur le code de clowecita, j'obtiens ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    + ('A', 0)
    |--+ ('B', 0.15)
    |  |--+ ('C', 0.22)
    |  |--+ ('D', 0.12)
    |--+ ('E', 0.2)
    |  |--+ ('F', 0.18)
    |  |--+ ('G', 0.22)
    C'est en effet la fonction des None selon mon cours. et c'est le code que je dois obtenir mais je ne vois pas comment en faisant la modif
    sur tu as pu obtenir cela.

Discussions similaires

  1. Cours et tutoriels pour apprendre Python
    Par gzalol dans le forum Général Python
    Réponses: 0
    Dernier message: 17/12/2013, 18h18
  2. Arbre en Python
    Par javast dans le forum Général Python
    Réponses: 4
    Dernier message: 21/10/2012, 21h17
  3. Comment representer un arbre (binaire ou non) en python?
    Par MadCat34 dans le forum Général Python
    Réponses: 2
    Dernier message: 22/03/2006, 16h25
  4. créer une arborescence windows sous forme d'arbre java
    Par chupachoc dans le forum Composants
    Réponses: 3
    Dernier message: 01/10/2002, 16h48
  5. arbre de parcour d'arborescence windows
    Par chupachoc dans le forum Composants
    Réponses: 7
    Dernier message: 09/09/2002, 08h09

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