Bonjour à tous,

Voici l'énoncé:


Exercice 8.21:
Écrivez un programme qui fait apparaître une fenêtre avec un canevas et un bouton. Dans le canevas, tracez un rectangle gris foncé,
lequel représentera une route, et par-dessus, une série de rectangles jaunes censés représenter un passage pour piétons.
Ajoutez quatre cercles colorés pour figurer les feux de circulation concernant les piétons et les véhicules. Chaque utilisation du
bouton devra provoquer le changement de couleur des feux:

Nom : 8.21.png
Affichages : 1084
Taille : 3,2 Ko




Mon code n'est pas représentatif de l'image ci-dessus, il est plus grand au niveau des proportions et surement moins bien cadré mais s'en rapproche énormément

Voici mon code:

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
from tkinter import *
 
def change_coul():
    global c
    if c ==0:
        #Feu
        can.create_oval(115-15,185-15,115+15,185+15,fill= coul[0])
        can.create_oval(430-15,185-15,430+15,185+15,fill= coul[1])
        can.create_oval(115-15,300-15,115+15,300+15,fill= coul[1])
        can.create_oval(430-15,300-15,430+15,300+15,fill= coul[0])
        c=1
    else:
        #Feu
        can.create_oval(115-15,185-15,115+15,185+15,fill= coul[1])
        can.create_oval(430-15,185-15,430+15,185+15,fill= coul[0])
        can.create_oval(115-15,300-15,115+15,300+15,fill= coul[0])
        can.create_oval(430-15,300-15,430+15,300+15,fill= coul[1])
        c = 0
 
def rectangle(x,y,y1,x1, coul):
    i = 0
    while i < 8:
        can.create_rectangle(x,y,x+v,y+d, fill=coul)
        i+=1
        x+=v*2
 
 
coul = ["red","green"]
c = 0
v = 15
d = 100
fen = Tk()
can = Canvas(fen, width = 500, height = 500, bg="silver")
# ROUTE
can.create_rectangle(150,0,400,500, fill="grey")
#PASSAGE PIETON
i = 0
while i < 8:
    rectangle(160,200,20,250, "yellow")
    i+=1
#Feu
can.create_oval(115-15,185-15,115+15,185+15,fill= coul[1])
can.create_oval(430-15,185-15,430+15,185+15,fill= coul[0])
can.create_oval(115-15,300-15,115+15,300+15,fill= coul[0])
can.create_oval(430-15,300-15,430+15,300+15,fill= coul[1])
 
Button(fen, text="feu rouge", command=change_coul).pack(side=BOTTOM)
can.pack()
 
fen.mainloop()
Mes Questions:

j'aurais souhaité savoir si une méthode assez simple permettrait d'alléger la partie feu, car ça rajoute 12 lignes et donc grossi le code.

Savoir également, si comme la question du dessus, une façon de faire plus adéquate aurait été préférable ?

Merci pour les courageux et bonne lecture.