Code:
1
2
3
4
5 rondX = randrange(5, 495) rondY = randrange(5, 495) if canevas.find_overlapping(): id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green') else:
Version imprimable
:nono: non, ce n'est pas ça.
Petit indice :
En logique booléenne (TRUE/FALSE) :
(A): TRUE == NOT FALSE
(B): FALSE == NOT TRUE
si la condition IF TRUE n'est pas ce que l'on cherche, alors la condition IF FALSE est certainement ce que l'on cherche.
si je remplace FALSE par NOT TRUE en vertu de la règle (B), j'obtiens IF FALSE == IF NOT TRUE
et nous avons vu que la condition IF FALSE donc par conséquent IF NOT TRUE est la condition que nous cherchons très certainement.
en appliquant ce raisonnement à notre condition if canevas.find_... nous obtenons ... ?
:nono: non, je voudrais que vous regardiez canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20) comme étant la condition TRUE de l'indice que je vous ai donné.
disons que : TRUE = canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20)
dans le code on aurait un truc dans ce genre :
or, nous avons vu que c'est la condition booléenne IF FALSE qui nous intéresse, c'est-à-dire la condition IF NOT TRUE qui nous intéresse, ce qui devrait se traduire dans le code par ....... ?Code:
1
2
3
4
5
6 rondX = randrange(5, 495) rondY = randrange(5, 495) true = canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20) if true: id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green') # end if
RAPPEL :
En logique booléenne (TRUE / FALSE) :
(A): TRUE == NOT FALSE
(B): FALSE == NOT TRUE
si la condition IF TRUE n'est pas ce que l'on cherche, alors la condition IF FALSE est certainement ce que l'on cherche.
si je remplace FALSE par NOT TRUE en vertu de la règle (B), j'obtiens IF FALSE == IF NOT TRUE
et nous avons vu que la condition IF FALSE donc par conséquent IF NOT TRUE est la condition que nous cherchons très certainement.
alors là, moi, je dis : CHAMPAGNE ! :yaisse3: :merci: :yaisse2: :hola: :yaisse1: :yaisse: :chin:
bon, il suffit maintenant de remplacer true par sa valeur dans le if, on obtient :
reste qu'on a un autre problème : pour l'instant cette recherche ne se fait qu'une seule fois.Code:
1
2
3
4
5 rondX = randrange(5, 495) rondY = randrange(5, 495) if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20): id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green') # end if
or, si on trouve quelquechose dans les alentours de (rondX, rondY), le rond ne sera pas créé.
autrement dit, on a oublié de boucler tant qu'on a pas créé de rond...
ce qui se traduirait par ... ?
(indice : il faut utiliser la boucle while 1: et on sort d'une boucle avec le mot-clé break)
code final de new_rond() ?
qu'est-ce que c'est que ce charabia ?
franchement, vous croyez que je me serais tué à vous faire faire écrire :
pour ensuite vous faire écrire quelque chose de complètement différent ?Code:
1
2
3
4
5 rondX = randrange(5, 495) rondY = randrange(5, 495) if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20): id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green') # end if
ne cherchez pas midi à 14h : ce que je vous fais faire est généralement de l'ordre de l'évidence, exploitez l'existant, rajoutez-y juste while 1: au bon endroit et break là où il faut et votre fonction new_rond() est terminée !
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 def new_rond ():#faire apparaitre un nouveau rond global rondX, rondY, id_rond # création de l'objet à attraper # où est-ce que je mets while 1: ? # init position aléatoire rondX = randrange(5, 495) rondY = randrange(5, 495) # rien dans les parages ? if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20): # on peut créer le rond id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green') # on sort de la boucle # où est-ce que je mets break ? # end if # end while # end def
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 def new_rond ():#faire apparaitre un nouveau rond global rondX, rondY, id_rond # création de l'objet à attraper while 1: # init position aléatoire rondX = randrange(5, 495) rondY = randrange(5, 495) # rien dans les parages ? if not canevas.find_overlapping(rondX-20, rondY-20, rondX+20, rondY+20): # on peut créer le rond id_rond = canevas.create_oval(rondX, rondY, rondX+5, rondY+5, outline='white', fill='green') # on sort de la boucle break # end if # end while # end def
eh ben, voilà ! ce n'était pas si dur, finalement ! :mouarf:
il ne vous reste plus qu'à mettre ce code dans votre script à la place de l'ancienne définition de new_rond() et ça devrait être bon.
:yaisse1: :yaisse2: :yaisse3: :yaisse: :applo: :frenchy: :bravo: :pingoin2: :france: :pc: :king: :hola: :merci:
while 1: signifie littéralement "tant que 1 (ce qui est toujours vrai) boucler:" c'est-à-dire finalement "boucler tout le temps:"
on ne met pas while 1: et break tous seuls sans rien : while 1: boucle bien sur le bloc de code qui se trouve sous lui et break est bien compris dans la condition if ... donc non, ils ne sont pas seuls du tout, même. :D
bon allez, moi, je vais au dodo...
bonne nuit ! :coucou: