Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Python > Lecture du tutoriel

Améliorations possibles

Avatar
Auteur : cat_loic
Créé : le 16/02/2007 19:55:59
Modifié : le 01/11/2007 10:10:34
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Notre programme, simple pour commencer, va subir des améliorations. Nous l'améliorerons en plusieurs étapes, afin que rien ne soit trop compliqué.
Sommaire du chapitre :
Chapitre précédent Sommaire

Aérons notre PPC

Je ne sais pas vous, mais je trouve que notre PPC est un peu serré...
Nous allons donc l'aérer !
Pour cela :


Pour définir une taille par défaut, il faut rajouter :
Code : Python
1
fenetre.geometry("1x1")

Ici, on attribue à l'objet "fenetre" la méthode geometry() avec pour argument la largeur x la hauteur (vous remarquerez qu'on n'utilise pas l'étoile * mais bien la lettre x).
Il faut ajouter ce code juste après la création de l'objet "fen1".

Normallement, vous savez faire, alors au boulot ^^ .

Correction "aération"

Voici tout de suite le code :
Code : Python
  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
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# -*- coding: utf-8 -*- 
from Tkinter import *
from random import randrange
 
# Définition des variables
 
debut = 0
joueur = 0
ordi = 0
nb_pierre = 0
nb_papier = 0
nb_ciseaux = 0
compteur = 0
dernier_gagne = 0
 
# Définition des fonctions
def choix(element):
    "C'est l'élément choisi par le joueur"
    global debut, joueur, ordi, nb_pierre, nb_papier, nb_ciseaux, compteur, dernier_gagne
    
    if debut == 0:
        
        ordi = 2
        debut = 1
    
    elif nb_pierre > nb_papier and nb_pierre > nb_ciseaux:       
            
        ordi = 2
    
    elif nb_papier > nb_ciseaux and nb_papier > nb_pierre:
            
        ordi = 3 
            
    elif nb_ciseaux > nb_pierre and nb_ciseaux > nb_papier:
            
        ordi = 1
    
    else:
        
        if dernier_gagne == 1:
            
            ordi = 2
        
        elif dernier_gagne == 2:
            
            ordi = 3
        
        elif dernier_gagne == 3:
        
            ordi = 1
        
        else:
            ordi = randrange(1,3)
    
    if element == 1:
        
        nb_pierre += 1
        
        if ordi == 1:
            
            compteur += 1
            chaine1.configure(text = "Vous : Pierre")
            chaine2.configure(text = "Lui : Pierre")
            chaine3.configure(text = "Résultat : Egalité")
            chaine4.configure(text = "Score =" + str(compteur))           
            dernier_gagne = 0
            
        elif ordi == 2:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Pierre")
            chaine2.configure(text = "Lui : Papier")
            chaine3.configure(text = "Résultat : Perdu")
            chaine4.configure(text = "Score =" + str(compteur))
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Pierre")
            chaine2.configure(text = "Lui : Ciseaux")
            chaine3.configure(text = "Résultat : Gagné")
            chaine4.configure(text = "Score =" + str(compteur))
            dernier_gagne = 1
    
    elif element == 2:
    
        nb_papier += 1
        
        if ordi == 1:
            
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Papier")
            chaine2.configure(text = "Lui : Pierre")
            chaine3.configure(text = "Résultat : Gagné")
            chaine4.configure(text = "Score =" + str(compteur))
            dernier_gagne = 0
            
        elif ordi == 2:
        
            
            compteur += 1
            chaine1.configure(text = "Vous : Papier")
            chaine2.configure(text = "Lui : Papier")
            chaine3.configure(text = "Résultat : Egalité")
            chaine4.configure(text = "Score =" + str(compteur))
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Papier")
            chaine2.configure(text = "Lui : Ciseaux")
            chaine3.configure(text = "Résultat : Perdu")
            chaine4.configure(text = "Score =" + str(compteur))
            dernier_gagne = 2
    
    elif element == 3:
    
        nb_ciseaux += 1
        
        if ordi == 1:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Ciseaux")
            chaine2.configure(text = "Lui : Pierre")
            chaine3.configure(text = "Résultat : Perdu")
            chaine4.configure(text = "Score =" + str(compteur))
            dernier_gagne = 0
            
        elif ordi == 2:
        
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Ciseaux")
            chaine2.configure(text = "Lui : Papier")
            chaine3.configure(text = "Résultat : Gagné")
            chaine4.configure(text = "Score =" + str(compteur))
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur += 1
            chaine1.configure(text = "Vous : Ciseaux")
            chaine2.configure(text = "Lui : Ciseaux")
            chaine3.configure(text = "Résultat : Egalité")
            chaine4.configure(text = "Score =" + str(compteur))
            dernier_gagne = 3
 
#Programme principal
fen1 = Tk()
fen1.geometry("200x250")
tex1 = Label(fen1, text="Jeu du Pierre Papier Ciseaux", fg = "red")
tex1.pack()
bou1 = Button(fen1, text="Pierre", command = (lambda: choix(1)))
bou1.pack()
bou2 = Button(fen1, text="Papier", command = (lambda: choix(2)))
bou2.pack()
bou3 = Button(fen1, text="Ciseaux", command = (lambda: choix(3)))
bou3.pack()
bou4 = Button(fen1, text="Quitter", command = fen1.destroy)
bou4.pack(side=BOTTOM)
chaine1 = Label(fen1)
chaine1.pack()
chaine2 = Label(fen1)
chaine2.pack()
chaine3 = Label(fen1)
chaine3.pack()
chaine4 = Label(fen1)
chaine4.pack()
fen1.mainloop()


Et les explications :
Dans la condition, afin de faire sauter des lignes, on crée des objets différents pour chaque phrase :
Code : Python
1
2
3
4
chaine1.configure(text = "Vous : Pierre")
            chaine2.configure(text = "Lui : Pierre")
            chaine3.configure(text = "Résultat : Egalité")
            chaine4.configure(text = "Score =" + str(compteur))


Ensuite, on ajoute la taille de la fenêtre :
Code : Python
1
2
fen1 = Tk()
fen1.geometry("200x250")


Puis, on glisse le bouton "Quitter" en bas :
Code : Python
1
2
bou4 = Button(fen1, text="Quitter", command = fen1.destroy)
bou4.pack(side=BOTTOM)


Et enfin, on n'oublie pas d'associer la méthode pack() à nos objets "chaine1", "chaine2", "chaine3" et "chaine4" :
Code : Python
1
2
3
4
5
6
7
8
chaine1 = Label(fen1)
chaine1.pack()
chaine2 = Label(fen1)
chaine2.pack()
chaine3 = Label(fen1)
chaine3.pack()
chaine4 = Label(fen1)
chaine4.pack()


Alors, c'était si difficile que ça ? Non ? Bon bah on continue les améliorations alors.

Colorons notre PPC

Vous ne trouvez pas notre PPC tristounet :( ?
Alors nous allons l'égayer avec des couleus :) .

Vous devez à peu près voir le résultat, quand on change d'élément, la couleur change, si l'ordinateur change subitement, la couleur le suit. Quant au résultat, si le joueur perd des points, le rouge foncé le rappelle à l'ordre...

Cette amélioration n'est pas seulement esthétique, elle est non seulement fonctionnelle mais en plus dynamisante, car le changement de couleur enlève le statisme du jeu.

Voici une amélioration qui ne devrait pas vous demander de grands effort (car la suite elle, demandera d'énormes efforts :diable: ).

Bon, je vous aide : la méthode configure() peut prendre comme argument fg="", comme la classe Label().

Correction "coloration"

Voici la solution :
Code : Python
  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
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# -*- coding: utf-8 -*- 
from Tkinter import *
from random import randrange
 
# Définition des variables
 
debut = 0
joueur = 0
ordi = 0
nb_pierre = 0
nb_papier = 0
nb_ciseaux = 0
compteur = 0
dernier_gagne = 0
 
# Définition des fonctions
def choix(element):
    "C'est l'élément choisi par le joueur"
    global debut, joueur, ordi, nb_pierre, nb_papier, nb_ciseaux, compteur, dernier_gagne
    
    if debut == 0:
        
        ordi = 2
        debut = 1
    
    elif nb_pierre > nb_papier and nb_pierre > nb_ciseaux:       
            
        ordi = 2
    
    elif nb_papier > nb_ciseaux and nb_papier > nb_pierre:
            
        ordi = 3 
            
    elif nb_ciseaux > nb_pierre and nb_ciseaux > nb_papier:
            
        ordi = 1
    
    else:
        
        if dernier_gagne == 1:
            
            ordi = 2
        
        elif dernier_gagne == 2:
            
            ordi = 3
        
        elif dernier_gagne == 3:
        
            ordi = 1
        
        else:
            ordi = randrange(1,3)
    
    if element == 1:
        
        nb_pierre += 1
        
        if ordi == 1:
            
            compteur += 1
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Egalité", fg="dark orange")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 2:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Papier", fg="dark cyan")
            chaine3.configure(text = "Résultat : Perdu", fg="dark red")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Ciseaux", fg="purple")
            chaine3.configure(text = "Résultat : Gagné", fg="blue")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 1
    
    elif element == 2:
    
        nb_papier += 1
        
        if ordi == 1:
            
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Papier", fg="dark cyan")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Gagné", fg="blue")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 2:
            
            compteur += 1
            chaine1.configure(text = "Vous : Papier", fg="dark cyan")
            chaine2.configure(text = "Lui : Papier", fg="dark cyan")
            chaine3.configure(text = "Résultat : Egalité", fg="dark orange")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Papier", fg="dark cyan")
            chaine2.configure(text = "Lui : Ciseaux", fg="purple")
            chaine3.configure(text = "Résultat : Perdu", fg="dark red")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 2
    
    elif element == 3:
    
        nb_ciseaux += 1
        
        if ordi == 1:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Ciseaux", fg="purple")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Perdu", fg="dark red")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 2:
        
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Ciseaux", fg="purple")
            chaine2.configure(text = "Lui : Papier", fg="dark cyan")
            chaine3.configure(text = "Résultat : Gagné", fg="blue")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")            
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur += 1
            chaine1.configure(text = "Vous : Ciseaux", fg="purple")
            chaine2.configure(text = "Lui : Ciseaux", fg="purple")
            chaine3.configure(text = "Résultat : Egalité", fg="dark orange")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")            
            dernier_gagne = 3
 
#Programme principal
fen1 = Tk()
fen1.geometry("200x250")
tex1 = Label(fen1, text="Jeu du Pierre Papier Ciseaux", fg = "red")
tex1.pack()
bou1 = Button(fen1, text="Pierre", command = (lambda: choix(1)))
bou1.pack()
bou2 = Button(fen1, text="Papier", command = (lambda: choix(2)))
bou2.pack()
bou3 = Button(fen1, text="Ciseaux", command = (lambda: choix(3)))
bou3.pack()
bou4 = Button(fen1, text="Quitter", command = fen1.destroy)
bou4.pack(side=BOTTOM)
chaine1 = Label(fen1)
chaine1.pack()
chaine2 = Label(fen1)
chaine2.pack()
chaine3 = Label(fen1)
chaine3.pack()
chaine4 = Label(fen1)
chaine4.pack()
fen1.mainloop()

Pour les explications, cette fois, il n'y en a pas des tonnes :
Code : Python
1
2
3
4
chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Egalité", fg="dark orange")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")

il suffisait juste de rajouter l'argument fg="" avec la bonne couleur ;) .

Et les statistiques ?

Vous souvenez-vous du PPC en mode console ? lorsqu'on quittait le programme, on avait droit à des statistiques.
Pour le mode fenêtre, lorsqu'on clique sur "Quitter", la fenêtre se ferme... Et c'est tout.
Nous allons donc modifier ceci !
Bien, on va remplacer le bouton "Quitter" par un bouton "Fin".
Celui-ci ne va pas effacer la fenêtre, il va effacer son contenu (ne paniquez pas, je vais vous expliquer comment on fait), et il va le remplacer par les statistiques, ainsi qu'un nouveau bouton : un bouton "Quitter" qui effacera la fenêtre !

Pour les statistiques, je veux :

Comment effacer le contenu d'une fenêtre



Prenons une fenêtre avec un texte et un bouton "Effacer" :
Code : Python
1
2
3
4
5
6
7
8
from Tkinter import *
 
fenetre1 = Tk()
texte1 = Label(fenetre1, text="texte")
texte1.pack()
bouton1 = Button(fenetre1, text="Effacer", command=)
bouton1.pack()
fenetre1.mainloop()

Pour que le bouton ait un effet, il faut qu'il appelle une fonction, qu'on nommera effacer()
On va donc définir cette fonction :
Code : Python
1
2
3
4
5
6
7
8
9
from Tkinter import *
def effacer():
 
fenetre1 = Tk()
texte1 = Label(fenetre1, text="texte")
texte1.pack()
bouton1 = Button(fenetre1, text="Effacer", command=effacer)
bouton1.pack()
fenetre1.mainloop()


Dedans cette fonction, on va utiliser les objets "texte1" et "bouton1" en leur associant la méthode : .destroy().
Code : Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from Tkinter import *
def effacer():
    bouton1.destroy()
    texte1.destroy()
fenetre1 = Tk()
texte1 = Label(fenetre1, text="texte")
texte1.pack()
bouton1 = Button(fenetre1, text="Effacer", command=effacer)
bouton1.pack()
fenetre1.mainloop()

Et voilà le tout.

Bon, je vous laisse 2, 3 difficultés, histoire que vous cherchiez par vous même, rendez vous à la correction !

Correction statistiques

En premier lieu, le code :
Code : Python
  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
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# -*- coding: utf-8 -*- 
from Tkinter import *
from random import randrange
 
# Définition des variables
 
debut = 0
joueur = 0
ordi = 0
nb_pierre = 0
nb_papier = 0
nb_ciseaux = 0
compteur = 0
dernier_gagne = 0
 
# Définition des fonctions
def choix(element):
    "C'est l'élément choisi par le joueur"
    global debut, joueur, ordi, nb_pierre, nb_papier, nb_ciseaux, compteur, dernier_gagne
    
    if debut == 0:
        
        ordi = 2
        debut = 1
    
    elif nb_pierre > nb_papier and nb_pierre > nb_ciseaux:       
            
        ordi = 2
    
    elif nb_papier > nb_ciseaux and nb_papier > nb_pierre:
            
        ordi = 3 
            
    elif nb_ciseaux > nb_pierre and nb_ciseaux > nb_papier:
            
        ordi = 1
    
    else:
        
        if dernier_gagne == 1:
            
            ordi = 2
        
        elif dernier_gagne == 2:
            
            ordi = 3
        
        elif dernier_gagne == 3:
        
            ordi = 1
        
        else:
            ordi = randrange(1,3)
    
    if element == 1:
        
        nb_pierre += 1
        
        if ordi == 1:
            
            compteur += 1
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Egalité", fg="dark orange")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 2:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Papier", fg="dark cyan")
            chaine3.configure(text = "Résultat : Perdu", fg="dark red")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Ciseaux", fg="purple")
            chaine3.configure(text = "Résultat : Gagné", fg="blue")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 1
    
    elif element == 2:
    
        nb_papier += 1
        
        if ordi == 1:
            
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Papier", fg="dark cyan")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Gagné", fg="blue")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 2:
            
            compteur += 1
            chaine1.configure(text = "Vous : Papier", fg="dark cyan")
            chaine2.configure(text = "Lui : Papier", fg="dark cyan")
            chaine3.configure(text = "Résultat : Egalité", fg="dark orange")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Papier", fg="dark cyan")
            chaine2.configure(text = "Lui : Ciseaux", fg="purple")
            chaine3.configure(text = "Résultat : Perdu", fg="dark red")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 2
    
    elif element == 3:
    
        nb_ciseaux += 1
        
        if ordi == 1:
            
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Ciseaux", fg="purple")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Perdu", fg="dark red")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
            
        elif ordi == 2:
        
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Ciseaux", fg="purple")
            chaine2.configure(text = "Lui : Papier", fg="dark cyan")
            chaine3.configure(text = "Résultat : Gagné", fg="blue")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")            
            dernier_gagne = 0
            
        elif ordi == 3:
            
            compteur += 1
            chaine1.configure(text = "Vous : Ciseaux", fg="purple")
            chaine2.configure(text = "Lui : Ciseaux", fg="purple")
            chaine3.configure(text = "Résultat : Egalité", fg="dark orange")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")            
            dernier_gagne = 3
            
def effacer():
    global nb_pierre, nb_papier, nb_ciseaux, compteur
    tex1.destroy()
    bou1.destroy()
    bou2.destroy()
    bou3.destroy()
    bou4.destroy()
    chaine1.configure(text = "Nombre de Pierre utilisés :" + str(nb_pierre), fg="dark blue")
    chaine2.configure(text = "Nombre de Papier utilisés :" + str(nb_papier), fg="dark cyan")
    chaine3.configure(text = "Nombre de Ciseaux utilisés :" + str(nb_ciseaux), fg="purple")
    chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
    bou5 = Button(fen1, text="Quitter", command=fen1.destroy)
    bou5.pack(side=BOTTOM)
 
#Programme principal
fen1 = Tk()
fen1.geometry("200x250")
tex1 = Label(fen1, text="Jeu du Pierre Papier Ciseaux", fg = "red")
tex1.pack()
bou1 = Button(fen1, text="Pierre", command = (lambda: choix(1)))
bou1.pack()
bou2 = Button(fen1, text="Papier", command = (lambda: choix(2)))
bou2.pack()
bou3 = Button(fen1, text="Ciseaux", command = (lambda: choix(3)))
bou3.pack()
bou4 = Button(fen1, text="Fin", command=effacer)
bou4.pack(side=BOTTOM)
chaine1 = Label(fen1)
chaine1.pack()
chaine2 = Label(fen1)
chaine2.pack()
chaine3 = Label(fen1)
chaine3.pack()
chaine4 = Label(fen1)
chaine4.pack()
fen1.mainloop()


Approchons nous de la fonction effacer() :
Code : Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
def effacer():
    global nb_pierre, nb_papier, nb_ciseaux, compteur
    tex1.destroy()
    bou1.destroy()
    bou2.destroy()
    bou3.destroy()
    bou4.destroy()
    chaine1.configure(text = "Nombre de Pierre utilisés :" + str(nb_pierre), fg="dark blue")
    chaine2.configure(text = "Nombre de Papier utilisés :" + str(nb_papier), fg="dark cyan")
    chaine3.configure(text = "Nombre de Ciseaux utilisés :" + str(nb_ciseaux), fg="purple")
    chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
    bou5 = Button(fen1, text="Quitter", command=fen1.destroy)
    bou5.pack(side=BOTTOM)

Première ligne, on définit la fonction, deuxième (là, le piège était de ne pas oublier cette deuxième ligne), on définit les variables qui seront utilisées dans la fonction.
Ensuite, on efface les boutons et le texte... Et là, pour les messages qu'on affiche, je les réutilise, plutôt que de les effacer pour en créer d'autres, je change juste les paramètres et je garde les couleurs qu'on a utilisées.
Enfin, je crée un dernier bouton.

Et voilà notre magnifique PPC en mode fenêtre :p .

Je tiens à préciser que pour cette partie, je me suis fait aider dans ce message sur le Forum du SdZ.

Optimisation du script

Cette fois-ci encore, nous allons optimiser le script au maximum possible. Enfin... Je ne l'optimiserai pas "à fond", car encore une fois, nous ne pouvons pas nous attarder 100 chapitres dessus, car il y a d'autres parties à voir et Ô combien plus intéressantes ;) .
Commençons par l'I.A., dans le chapitre précédant nous avions transformé cette partie :
Code : Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
if debut == 0:
       
    ordi = 2
    debut = 1
   
elif nb_pierre > nb_papier and nb_pierre > nb_ciseaux:       
           
    ordi = 2
   
elif nb_papier > nb_ciseaux and nb_papier > nb_pierre:
           
    ordi = 3
           
elif nb_ciseaux > nb_pierre and nb_ciseaux > nb_papier:
           
    ordi = 1


Comme ceci :
Code : Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
if debut == 0 or ((nb_pierre > nb_papier) and (nb_pierre > nb_ciseaux)):
       
    ordi = 2
    debut = 1
   
elif nb_papier > nb_ciseaux and nb_papier > nb_pierre:
           
    ordi = 3
           
elif nb_ciseaux > nb_pierre and nb_ciseaux > nb_papier:
           
    ordi = 1

Mais nous pouvons faire mieux ! Par exemple cette partie (juste après) :
Code : Python
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
if dernier_gagne == 1:
           
    ordi = 2
       
elif dernier_gagne == 2:
           
    ordi = 3
       
elif dernier_gagne == 3:
       
    ordi = 1

Nous pouvons faire :
Code : Python
1
2
3
4
5
6
7
if dernier_gagne == 1 or dernier_gagne == 2:
           
    ordi = dernier_gagne + 1
       
elif dernier_gagne == 3:
       
    ordi = 1

Maintenant, nous allons attaquer le plus gros morceau : la condition qui vérifie qui a fait quoi et le résultat. Notre but, quand je dis "optimiser" est de réduire un maximum le nombre de lignes qu'on utilise.
voilà le morceau (92 lignes o_O ) :
Code : Python
 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
if element == 1:
       
        nb_pierre += 1
       
        if ordi == 1:
           
            compteur += 1
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Egalité", fg="dark orange")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
           
        elif ordi == 2:
           
            compteur = compteur - 2
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Papier", fg="dark cyan")
            chaine3.configure(text = "Résultat : Perdu", fg="dark red")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
           
        elif ordi == 3:
           
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Pierre", fg="dark blue")
            chaine2.configure(text = "Lui : Ciseaux", fg="purple")
            chaine3.configure(text = "Résultat : Gagné", fg="blue")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 1
   
    elif element == 2:
   
        nb_papier += 1
       
        if ordi == 1:
           
            compteur = compteur + 2
            chaine1.configure(text = "Vous : Papier", fg="dark cyan")
            chaine2.configure(text = "Lui : Pierre", fg="dark blue")
            chaine3.configure(text = "Résultat : Gagné", fg="blue")
            chaine4.configure(text = "Score =" + str(compteur), fg="dark green")
            dernier_gagne = 0
           
        elif ordi == 2:
           
            compteur += 1
            chaine1.configure(text = "Vous : Papier", fg="dark cyan")
            chaine2.configure(text = "Lui : Papier", fg="dark cyan")