Bambi
-
15 nov. 2022 à 20:33
Gandalfix
Messages postés65Date d'inscriptionvendredi 12 juin 2020StatutMembreDernière intervention10 août 2023
-
16 nov. 2022 à 06:21
Bonjour, je débute en python et j'ai fait aujourd'hui "the game of life" en python avec Tkinter.
Seulement dans la fonction start() je souhaiterais lorsqu'il y a l'erreur "IndexError: list index out of range" passer directement à la suite.
Comme ça si la case n'existe pas c'est comme si la cellule était morte (les noires sont mortes).
Voici mon code:
from tkinter import*
from random import*
def start():
global x
global y
global cellules
global testeur
x=5
y=5
for i in range(400):
testeur=0
if cases[i-21]==1:
testeur+=1
if cases[i-1]==1:
testeur+=1
if cases[i-20]==1:
testeur+=1
if cases[i+20]==1:
testeur+=1
if cases[i+21]==1:
testeur+=1
if cases[i+1]==1:
testeur+=1
if cases[i+19]==1:
testeur+=1
if cases[i-19]==1:
testeur+=1
if testeur==2:
pass
elif testeur==3:
cases[i]=1
elif testeur<2 or testeur>3:
cases[i]==0
x+=10
if x==205:
y+=10
x=5
draw_map()
def draw_map():
global x
global y
global cellules
global generation
x=5
y=5
for i in range(400):
if cases[i]==0:
rect = cadre.create_rectangle(x+1,y+1,x+8,y+8,width=0,fill="black")
else:
rect = cadre.create_rectangle(x+1,y+1,x+8,y+8,width=0,fill="white")
cellules+=1
x+=10
if x==205:
y+=10
x=5
generation+=1
#Init
x=5
y=5
cellules=0
generations=0
testeur=0
cases=[]
for i in range(400):
cases.append(randint(0,1))
#Fen
fen = Tk()
fen.title("Game of life")
cadre = Canvas(fen, bg="dark gray", height=204,width=204)
draw_map()
cadre.pack(side=LEFT)
Text1 = Label(fen, text="Nombre de cellules:").pack()
Text2 = Label(fen, text=cellules).pack()
Text3 = Label(fen, text="Nombre de générations:").pack()
Text4 = Label(fen, text=generations).pack()
Start = Button(fen, text="Start", command=start).pack(side=BOTTOM)
fen.mainloop()
Voici ce que renvoie le code:
Quand je clique sur start je suis sensé passer à la génération suivante.
Gandalfix
Messages postés65Date d'inscriptionvendredi 12 juin 2020StatutMembreDernière intervention10 août 20237 16 nov. 2022 à 06:21
Bonjour,
2 Solutions :
• Solution 1 : Dans la fonction start, imbriquer 2 if à chaque fois pour rester dans les index de la liste cases (de 0 à 399). Exemple :
def start ():
global x
global y
global cellules
global testeur
x = 5
y = 5
for i in range (400):
testeur = 0
if (i - 21) >= 0 :
if cases [i - 21] == 1 :
testeur += 1
if (i + 21) <= 399 :
if cases [i + 21] == 1 :
testeur += 1
• Solution 2 : Passer à chaque fois par un try / except. Exemple :
def start ():
global x
global y
global cellules
global testeur
x = 5
y = 5
for i in range (400):
testeur = 0
try :
if cases [i - 21] == 1 :
testeur += 1
except :
return
try :
if cases [i + 21] == 1 :
testeur += 1
except :
return
"Mieux vaut rester silencieux et passer pour un imbécile, que parler, et n'en laisser aucun doute."
Abraham Lincoln