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