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 :

probleme de liste ?


Sujet :

Python

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 250
    Par défaut probleme de liste ?
    Bonjour,

    Je parcours actuellement le tutoriel "Apprendre à programmer avec Python" par Gérard Swinnen. J'essaie de résoudre l'exercice 12.7 où il faut tirer des cartes.

    J'arrive à afficher le jeu que je viens de mélanger. Mais à chaque fois que je tire une carte, je l'affiche et j'ai un résultat inattendu, un None en plus de la valeur de la carte. Je ne vois pas d'où vient ce None.

    Il doit y avoir un bug dans mon programme mais je ne vois pas où. J'utilise la version 2.5.1 sur windows.

    J'ai aussi fait du pas a pas mais je comprends pas pourquoi la fonction affiche me met un None en plus.

    Si une âme charitable pouvait jeter un coup d'œil, ce serait sympa. Merci d'avance.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
     
    from random import shuffle
     
    class Carte:
        "carte"
        def __init__(self, couleur, valeur):
            self.couleur = couleur
            self.valeur = valeur
     
        def affiche(self):
            print str(self.valeur) + ' de ' + self.couleur
     
     
    class JeuDeCarte:
        "jeu de carte"
        def __init__(self):
            self.paquet = []
            couleurs = ['trèfle', 'pique', 'carreau', 'coeur']
            for cc in couleurs:
                self.ajouterCarte(Carte(cc, 'as'))
                self.ajouterCarte(Carte(cc, 'roi'))
                self.ajouterCarte(Carte(cc, 'dame'))
                self.ajouterCarte(Carte(cc, 'valet'))
                for vv in range(2,11):
                    self.ajouterCarte(Carte(cc, vv))
     
        def ajouterCarte(self, carte):
            self.paquet.append(carte)
     
        def tirer(self):
            if (0 < len(self.paquet)):
                return self.paquet.pop()
            else:
                return None
     
        def affiche(self):
            for card in self.paquet:
                card.affiche()
     
        def melanger(self):
            shuffle(self.paquet)        
     
     
    print "*** programme principal ***"
     
    jeu = JeuDeCarte()
    #jeu.affiche()
     
    print "*** melange ***"
    jeu.melanger()
    jeu.affiche()
    print "*****"
     
    for n in range(53):            # tirage des 52 cartes :    
        c = jeu.tirer()
        if c == None:              # il ne reste plus aucune carte
            print 'Terminé !'      # dans la liste
        else:
    # BUG ! affiche la valeur de la carte + None !?!?!
            print c.affiche() # valeur et couleur de la carte

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Ta fonction "affiche" possède déjà le print => Donc faut pas que tu fasses print c.affiche() car là, tu fais un print de None (puisque affiche() ne renvoie rien)

    - Soit tu fais directement c.affiche()
    - Soit tu modifies affiche() pour qu'elle te renvoie la chaine à afficher et ensuite tu fais un print c.affiche()



    Citation Envoyé par _vince_ Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for n in range(53):            # tirage des 52 cartes :    
        c = jeu.tirer()
        if c == None:              # il ne reste plus aucune carte
            print 'Terminé !'      # dans la liste
        else:
    # BUG ! affiche la valeur de la carte + None !?!?!
            print c.affiche() # valeur et couleur de la carte
    Pas la peine de mettre un compteur puisque t'as un flag sur tirer(). Surtout que si tu modifies ton code pour passer à 32 cartes ben faudra que tu modifies l'objet "jeu" PLUS le tirage => tu n'as pas indépendance entre ton objet et son environnement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while True:            # tirage de toutes les cartes
        c = jeu.tirer()
        if c == None:              # il ne reste plus aucune carte
            break
     
        c.affiche() # valeur et couleur de la carte
     
    print 'Terminé !'
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 250
    Par défaut
    Ah oui tout de suite, ça marche mieux ! Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme ds liste chainee 2
    Par Treuze dans le forum C++
    Réponses: 7
    Dernier message: 11/04/2006, 17h55
  2. [MySQL] probleme avec liste déroulante et requete
    Par Ludo75 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/01/2006, 13h55
  3. Probleme arbre/liste chainée en template
    Par Raton dans le forum Langage
    Réponses: 1
    Dernier message: 07/11/2005, 16h09
  4. un probleme de listing de dossier
    Par bidoo dans le forum Langage
    Réponses: 2
    Dernier message: 01/11/2005, 11h18
  5. Réponses: 8
    Dernier message: 02/04/2004, 17h31

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