Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2016-07-31T14:41:02+02:00Les derniers messages parus sur le forum de Zeste de Savoir.Vos réalisations, vos exercices et plus encore !, message #1191702016-07-31T14:41:02+02:00nohar/@noharhttps://zestedesavoir.com/forums/sujet/5782/vos-realisations-vos-exercices-et-plus-encore/?page=1#p119170<p><del>Pourquoi utiliser un dictionnaire au lieu d'un <code>set</code> dans ton dernier code ?</del></p>
<p>J'ai rien dit. </p>Vos réalisations, vos exercices et plus encore !, message #1190602016-07-29T20:01:48+02:00Poliorcetics/@Poliorceticshttps://zestedesavoir.com/forums/sujet/5782/vos-realisations-vos-exercices-et-plus-encore/?page=1#p119060<p>Merci pour ces propositions, je les tenterai si je trouve le temps. <img alt=":)" src="/static/smileys/smile.png"></p>Vos réalisations, vos exercices et plus encore !, message #1187242016-07-26T21:55:51+02:00pascal.ortiz/@pascal.ortizhttps://zestedesavoir.com/forums/sujet/5782/vos-realisations-vos-exercices-et-plus-encore/?page=1#p118724<p>Un autre mais séparé des précédents car plus avancé.</p>
<h4>La fourmi de Langton</h4>
<p><em>Certaines fonctionnalités avancées de Turtle permettent une implémentation très efficace du problème ci-dessous.</em><sup id="fnref-1"><a class="footnote-ref" href="#fn-1">1</a></sup></p>
<p>La <a href="https://www.youtube.com/watch?v=qZRYGxF6D3w&feature=youtu.be&t=74">fourmi de Langton</a> est une expérience de simulation informatique d'automate cellulaire. On dispose d'un quadrillage dont toutes les cases au départ sont blanches.</p>
<p>Au début de l'expérience, une fourmi est placée sur une case et elle va effectuer une suite de mouvements définis par la règle suivante :</p>
<ul>
<li>
<p>si la fourmi est sur une case blanche elle se déplace dans la case qui est à sa droite ;</p>
</li>
<li>
<p>si la fourmi est sur une case noire elle se déplace dans la case qui est à sa gauche ;</p>
</li>
<li>
<p>chaque fois que la fourmi se déplace de la case (disons A) à une case voisine, la couleur de la case A change (noire si A est blanche et blanche si A est noire).</p>
</li>
</ul>
<p><figure><img alt="" src="https://zestedesavoir.com/media/galleries/3454/3f223f71-18dc-433e-a165-2a6a610f10e9.png"><figcaption>La fourmi de déplace depuis une case blanche</figcaption></figure></p>
<p><figure><img alt="" src="https://zestedesavoir.com/media/galleries/3454/297c89a8-26fd-4337-8487-884611410382.png"><figcaption>La fourmi de déplace depuis une case noire</figcaption></figure></p>
<p>Au départ, la fourmi regarde vers le nord et est placée sur une case blanche. L'expérience consiste à analyser l'allure globale des déplacements de la fourmi. </p>
<h4>Méthode de résolution</h4>
<p>D'abord, la tortue va simuler les mouvements de la fourmi avec les commandes habituelles (<code>fd</code>, <code>up</code>, <code>left</code> et <code>right</code>). On récupère la position courante avec la fonction <code>position</code>.</p>
<p>Ensuite, on va cacher la tête de la tortue (<code>ht</code>) et ne pas rendre visibles ses traits de déplacements (<code>up</code>) ce qui a le gros avantage de déléguer à turtle la tache de gérer les paramètres de position et d'orientation de la fourmi.</p>
<p>Et on va utiliser les deux possibilités suivantes offertes par le module Turtle:</p>
<ul>
<li>choisir une nouvelle tête pour la tortue : un carré noir (<code>shape("square")</code>) de taille par défaut 20x20 ; optionnel : modifier la taille de ce carré pour que la simulation ne sorte pas de la fenêtre.</li>
<li>appeler la fonction <code>stamp</code> pour tamponner le plateau de la tête carrée de la tortue et <code>clearstamp</code> pour effacer la case noire ; bien regarder dans le tuto comment marchent ces fonctions.</li>
</ul>
<p>Pour mémoriser les cases noires, on utilise un dictionnaire qui à chaque case noire en position <code>(i, j)</code> associe l'id du stamp correspondant.</p>
<p>Bien penser à déplacer la tortue d'un nombre égal à la largeur du carré qui forme sa tête. </p>
<p>Autre détail : bien que les positions soient, en théorie, des entiers (normal si on se déplace sur un quadrillage !), le calcul par Turtle se fait en flottants donc pensez à utiliser à chaque fois <code>round</code> sur les coordonnées sinon la recherche dans le dictionnaire échouera.</p>
<p>Et c'est tout, ça tient en 25 lignes de code ! Si vous itérez 11000 fois vous verrez la fameuse *Langton's highway.</p>
<p>Ci-dessous le code :</p>
<div class="spoiler">
<p><table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="kn">from</span> <span class="nn">turtle</span> <span class="kn">import</span> <span class="o">*</span>
<span class="n">SQUARE_DEFAULT</span><span class="o">=</span><span class="mi">20</span>
<span class="n">SCALE</span><span class="o">=</span><span class="mf">0.5</span>
<span class="n">BLOCK</span><span class="o">=</span><span class="n">SCALE</span><span class="o">*</span><span class="n">SQUARE_DEFAULT</span>
<span class="n">ht</span><span class="p">()</span>
<span class="n">up</span><span class="p">()</span>
<span class="n">shape</span><span class="p">(</span><span class="s2">"square"</span><span class="p">)</span>
<span class="n">shapesize</span><span class="p">(</span><span class="n">SCALE</span><span class="p">,</span> <span class="n">SCALE</span><span class="p">)</span>
<span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>
<span class="n">black</span><span class="o">=</span><span class="p">{}</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">11000</span><span class="p">):</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="nb">round</span><span class="p">,</span> <span class="n">position</span><span class="p">())</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">black</span><span class="p">:</span>
<span class="n">left</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>
<span class="n">fd</span><span class="p">(</span><span class="n">BLOCK</span><span class="p">)</span>
<span class="n">clearstamp</span><span class="p">(</span><span class="n">black</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)])</span>
<span class="k">del</span> <span class="n">black</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">right</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>
<span class="n">black</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)]</span><span class="o">=</span><span class="n">stamp</span><span class="p">()</span>
<span class="n">fd</span><span class="p">(</span><span class="n">BLOCK</span><span class="p">)</span>
<span class="n">exitonclick</span><span class="p">()</span>
</pre></div>
</td></tr></table>
</p>
</div>
<div class="footnote">
<hr>
<ol>
<li id="fn-1">
<p>C'est fait dans mon tuto de découverte mais de façon assez laborieuse faute d'avoir les outils ad hoc. <a class="footnote-backref" href="#fnref-1" title="Retourner au texte de la note 1">↩</a></p>
</li>
</ol>
</div>Vos réalisations, vos exercices et plus encore !, message #1186642016-07-26T13:30:33+02:00pascal.ortiz/@pascal.ortizhttps://zestedesavoir.com/forums/sujet/5782/vos-realisations-vos-exercices-et-plus-encore/?page=1#p118664<p>Sur suggestion de l'auteur je fais une proposition d'exercices assez faciles (ils ne figurent pas dans mon tuto actuellement en bêta).</p>
<p>Bon amusement !</p>
<h3>EXERCICES</h3>
<hr>
<h4>Cube</h4>
<p>Dessiner un cube.</p>
<p><figure><img alt="" src="/media/galleries/3461/19646591-ad73-47e1-ae23-ecdd0fc752b2.png"><figcaption> </figcaption></figure></p>
<hr>
<h4>Centre de gravité</h4>
<p>Soient les points <span>$\mathtt{a=(50,50)}$</span>, <span>$\mathtt{b=(-200,-100)}$</span> et <span>$\mathtt{c=(300,-300)}$</span>.</p>
<p>1) Construire le triangle <span>$\mathtt{abc}$</span>.</p>
<p>2) Rappelons qu'une <em>médiane</em> d'un triangle est une droite qui joint un sommet et le milieu du côté opposé. On sait que les trois médianes se coupent en le centre de gravité du triangle (<span>$\mathtt{g}$</span> ci-dessous).</p>
<p>a) Construire les médianes du triangle <span>$\mathtt{abc}$</span>. On utilisera que si on a deux points représentés respectivement par les couples <span>$\mathtt{x}$</span> et <span>$\mathtt{y}$</span> alors le milieu est représenté par le couple :</p>
<div align="center">
<p><code>m=((x[0]+y[0])/2.,(x[1]+y[1])/2.)</code> </p>
</div>
<p>b) Une fois les médianes tracées, le triangle <span>$\mathtt{abc}$</span> est divisé en 6 triangles. Colorier chacun de ses triangles avec les couleurs suivantes :</p>
<div align="center">
<p><code>"pink" "violet" "blue" "red" "green" "brown"</code> </p>
</div>
<p>On rappelle que pour activer une couleur de remplissage, on utilise une instruction du genre :</p>
<div align="center">
<p><code>fillcolor("yellow")</code> </p>
</div>
<p><em>Rappel</em> : pour exécuter un remplissage, on encadre les instructions de parcours de la zone à remplir, au début, d'une instruction <code>begin_fill()</code></p>
<p>et, à la fin, d'une instruction <code>end_fill(False)</code>.</p>
<p>On utilisera que les trois médianes concourent en <span>$\mathtt{g}$</span> avec</p>
<div align="center">
<p><code>g=((a[0]+b[0]+c[0])/3,(a[1]+b[1]+c[1])/3)</code> </p>
</div>
<p>Le résultat devra ressembler au dessin suivant :</p>
<p><figure><img alt="" src="/media/galleries/3461/91c662b6-9ec8-41e5-9630-edae6e1667a1.png"><figcaption> </figcaption></figure></p>
<hr>
<h4>Grille de Sudoku</h4>
<p>Dessiner une grille de sudoku comme ci-dessous :</p>
<p><figure><img alt="" src="/media/galleries/3461/d089207f-baa5-46f0-87fd-7a95b6c71db1.png"><figcaption>sudoku</figcaption></figure></p>
<p>Pour faire varier l'épaisseur du trait, on placera tantôt la commande</p>
<div align="center">
<p><code>pensize(3)</code> </p>
</div>
<p>(pour les traits épais) et tantôt la commande</p>
<div align="center">
<p><code>pensize(1)</code> </p>
</div>
<p>pour les traits fins.</p>
<p>Pour écrire un chiffre, on placera d'abord le curseur où on souhaite placer le chiffre et on appellera une commande du genre :</p>
<div align="center">
<p><code>write("5", font=("Arial","15","bold"))</code> </p>
</div>
<p>dont la signification se devine aisément. Le placement précis du chiffre pourra nécessiter des ajustements par essais/erreurs.</p>
<hr>
<h4>Cœur</h4>
<p>Dessiner un cœur rose en ajustant des arcs de cercles :</p>
<p><figure><img alt="" src="/media/galleries/3461/25a4ec24-0063-4d56-b502-e579fb3abf0c.png"><figcaption> </figcaption></figure></p>
<p>On total, on utilisera 6 arcs de cercles : deux demi-cercles et 4 autres arcs de cercles. La fermeture du cœur pourra nécessiter des ajustements par essais/erreurs.</p>
<hr>
<h4>Triangles emboîtés</h4>
<p>Construire un emboîtements de triangles comme dans la figure ci-dessous.</p>
<p><figure><img alt="" src="/media/galleries/3461/3826a085-426d-49fc-962a-772822f28acf.png"><figcaption> </figcaption></figure></p>
<p>Le principe est simple : étant donné un triangle <span>$ABC$</span>, on construit un autre triangle <span>$A'B'C'$</span> tel que <span>$A'$</span> soit sur le segment AB et tel que <span>$AA'=AB/10$</span> et de même pour les autres côtés :</p>
<p><figure><img alt="" src="/media/galleries/3461/c2a5362a-523e-4e00-8a44-6bf9d840b3e5.png"><figcaption> </figcaption></figure></p>
<p>Il suffit ensuite de répéter cette construction avec le triangle <span>$A'B'C'$</span>.</p>
<p>On aura besoin de la transformation <span>$\mathtt{T(A, B)}$</span> qui renvoie les coordonnées du point <span>$\mathtt{A'}$</span> :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre>1
2</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="k">def</span> <span class="nf">T</span><span class="p">(</span><span class="n">u</span><span class="p">,</span> <span class="n">v</span><span class="p">):</span>
<span class="k">return</span> <span class="p">(</span><span class="n">u</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">-</span><span class="n">u</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">/</span><span class="mi">10</span><span class="p">,</span> <span class="n">u</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">+</span><span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="o">-</span><span class="n">u</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">/</span><span class="mi">10</span><span class="p">)</span>
</pre></div>
</td></tr></table>
<p>On écrira une fonction <code>emboiter(A, B, C)</code> qui étant donné un triangle <span>$\mathtt{ABC}$</span> comme ci-dessus dessine sous Turtle le triangle <span>$\mathtt{A'B'C'}$</span> et renvoie la liste des coordonnées de <span>$\mathtt{A'}$</span>, <span>$\mathtt{B'}$</span> et <span>$\mathtt{C'}$</span>. Les coordonnées de ces point seront obtenues en appliquant la fonction <code>position</code> du module standard <code>turtle</code>.</p>
<p>Dans le dessin ci-dessus, la fonction <code>emboiter</code> a été appelée 25 fois. Pour des raisons esthétiques, on préférera un triangle équilatéral pour triangle initial.</p>
<p>Adapter à des carrés :</p>
<p><figure><img alt="" src="/media/galleries/3461/71857cf7-073f-4e36-896b-57575aa306af.png"><figcaption> </figcaption></figure></p>
<hr>
<h4>Graphe de Petersen</h4>
<p>Construire le graphe de Petersen :</p>
<p><figure><img alt="" src="/media/galleries/3461/d437faf7-d9f6-492f-a02a-b3888152a6a3.png"><figcaption> </figcaption></figure></p>
<p>On fera comme si on avait deux cercles concentriques, on placera les 5 sommets sur chaque cercle en utilisant la formule </p>
<p><span>$\mathtt{sommet=(r*cos(t), r*sin(t))}$</span></p>
<p>puis on tracera les segments reliant les sommets. Les sommets seront marqués avec la fonction <code>dot().</code></p>
<p>Voici un template de code :</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="codehilite"><pre><span></span><span class="kn">from</span> <span class="nn">turtle</span> <span class="kn">import</span> <span class="o">*</span>
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">cos</span><span class="p">,</span> <span class="n">sin</span><span class="p">,</span> <span class="n">pi</span>
<span class="k">def</span> <span class="nf">pentagone</span><span class="p">(</span><span class="n">r</span><span class="p">):</span>
<span class="sd">"""Le nord d'abord puis</span>
<span class="sd"> on génère dans le sens</span>
<span class="sd"> inverse des aiguilles d'une montre"""</span>
<span class="n">alpha</span><span class="o">=</span><span class="mi">2</span><span class="o">*</span><span class="n">pi</span><span class="o">/</span><span class="mi">5</span>
<span class="n">a</span><span class="o">=</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">r</span><span class="p">)</span>
<span class="c1"># VOTE CODE ICI</span>
<span class="k">return</span> <span class="p">[</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">e</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">polygone</span><span class="p">(</span><span class="n">L</span><span class="p">):</span>
<span class="sd">"""Trace la ligne </span>
<span class="sd"> polygonale fermée</span>
<span class="sd"> définie par L"""</span>
<span class="c1"># VOTE CODE ICI</span>
<span class="k">def</span> <span class="nf">segment</span><span class="p">(</span><span class="n">u</span><span class="p">,</span><span class="n">v</span><span class="p">):</span>
<span class="s2">"Dessine le segment"</span>
<span class="c1"># VOTE CODE ICI</span>
<span class="n">ht</span><span class="p">()</span>
<span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">d</span><span class="p">,</span><span class="n">e</span><span class="o">=</span><span class="n">pentagone</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
<span class="n">aa</span><span class="p">,</span> <span class="n">bb</span><span class="p">,</span> <span class="n">cc</span><span class="p">,</span> <span class="n">dd</span><span class="p">,</span> <span class="n">ee</span><span class="o">=</span><span class="n">pentagone</span><span class="p">(</span><span class="mi">150</span><span class="p">)</span>
<span class="c1"># VOTE CODE ICI</span>
<span class="n">exitonclick</span><span class="p">()</span>
</pre></div>
</td></tr></table>
<hr>
<h4>Étoile de David</h4>
<p>Dessiner une étoile de David :</p>
<p><figure><img alt="" src="/media/galleries/3461/dad86845-edf8-429f-a70c-e7381fa703e9.png"><figcaption> </figcaption></figure></p>
<p>Voici une suggestion de méthode :</p>
<ul>
<li>
<p>Écrire une fonction <code>equilateral(R, t)</code> qui renvoie les coordonnées des sommets du triangle équilatéral inscrit dans le cercle de centre <code>(0, 0)</code> et de rayon <code>R</code> et dont un des sommets fait un angle polaire <code>t</code> ; il faut regarder les angles et savoir que le côté d'un tel triangle vaut <span>$\mathtt{R\sqrt 3}$</span> ; on utilisera la fonction <code>position</code> du module <code>turtle</code> ;</p>
</li>
<li>
<p>Ecrire une fonction <code>fill_quadri(sommets)</code> qui colorie l'intérieur d'un quadrilatère convexe.</p>
</li>
<li>
<p>Ecrire une fonction <code>fill_equi(inside, outside)</code> qui appelle <code>fill_quadri(sommets)</code> pour colorier la zone comprise entre deux triangles emboîtés.</p>
</li>
</ul>
<hr>
<h4>Dessine-moi la lune !</h4>
<p>Dessiner un croissant de lune :</p>
<p><figure><img alt="" src="/media/galleries/3461/44300f34-b8d4-439e-9e9f-22fbf854a4d2.png"><figcaption> </figcaption></figure></p>
<p>On utilisera les couleur <code>"gold"</code> et <code>"white"</code>.</p>Vos réalisations, vos exercices et plus encore !, message #1055972016-04-11T14:13:22+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/5782/vos-realisations-vos-exercices-et-plus-encore/?page=1#p105597<p>Bonjour à tous !</p>
<p>Comme expliqué à la fin du <a href="https://zestedesavoir.com/tutoriels/944/a-la-decouverte-de-turtle/">tutoriel sur le module turtle de Python</a>, voici un sujet pour permettre à quiconque le souhaite de <strong>partager ses réalisations, d'en discuter ou même de proposer des exercices</strong> autour de la fameuse tortue !</p>
<h5>Pourquoi ?</h5>
<p>Dans la programmation comme dans beaucoup de choses, pratiquer est important. Grâce à ce sujet, vous pourrez montrer ce que vous avez fait (ce qui est toujours sympa), obtenir des retours, ainsi qu'avoir d'autres idées à réaliser.</p>
<h5>Comment ?</h5>
<p>Pour vos réalisations, je vous invite à partager le code source accompagné d'une voire plusieurs images ainsi que de quelques explications si besoin.
Pour vos propositions d'exercice, il faut qu'ils soient bien expliqués.</p>
<p>Voilà, si vous avez une question ou une suggestion, n'hésitez pas à la faire partager. Bon code !</p>Fermeture fenêtre suivie de réouverture, message #962622016-01-28T12:40:44+01:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/5246/fermeture-fenetre-suivie-de-reouverture/?page=1#p96262<p>Hello,</p>
<p>J'ai une question par rapport à turtle. En effet, il arrive (quand j'utilise les événements jusqu'à présent) que lorsque je ferme la fenêtre elle se rouvre (et plante) si le traçage ou le coloriage qui était en cours n'était pas fini. Cela m'arrive avec le code ci-dessous : lorsque je déplace le point et que je ferme avant la prise en compte de tous les événements. Cela m'arrive aussi avec mon programme du jeu des allumettes (que je peux poster si besoin) lorsque je ferme alors que les allumettes sont en train d'être dessinées.</p>
<p>Même certains programmes de <kbd>turtledemo</kbd> souffrent du même problème (exemple : <kbd>chaos</kbd>), d'autres non. Je ne comprends pas pourquoi. </p>
<p>Merci pour votre aide !</p>
<table class="codehilitetable"><tr><td class="linenos"><div class="linenodiv"><pre> 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</pre></div></td><td class="code"><div class="codehilite"><pre><span class="kn">import</span> <span class="nn">turtle</span>
<span class="sd">'''Fonction pour se déplacer à un point sans tracer'''</span>
<span class="k">def</span> <span class="nf">deplacer_sans_tracer</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="bp">None</span><span class="p">):</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">up</span><span class="p">()</span>
<span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="nb">tuple</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">goto</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">goto</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">down</span><span class="p">()</span>
<span class="sd">'''Fonction pour afficher seulement la balle'''</span>
<span class="k">def</span> <span class="nf">affiche_point</span><span class="p">(</span><span class="n">diametre</span><span class="p">,</span> <span class="n">couleur</span><span class="p">):</span>
<span class="n">deplacer_sans_tracer</span><span class="p">(</span><span class="n">pos_x</span><span class="p">,</span> <span class="n">pos_y</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">diametre</span><span class="p">,</span> <span class="n">couleur</span><span class="p">)</span>
<span class="sd">'''Fonction pour réinitialiser la balle'''</span>
<span class="k">def</span> <span class="nf">move_reset</span><span class="p">():</span>
<span class="k">global</span> <span class="n">pos_x</span><span class="p">,</span> <span class="n">pos_y</span>
<span class="n">pos_x</span> <span class="o">=</span> <span class="n">pos_y</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">affiche_point</span><span class="p">(</span><span class="n">diametre_balle</span><span class="p">,</span> <span class="n">couleur_balle</span><span class="p">)</span>
<span class="sd">'''Fonction pour changer la coordonnée x de la balle'''</span>
<span class="k">def</span> <span class="nf">move_x</span><span class="p">(</span><span class="n">num</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="k">global</span> <span class="n">pos_x</span>
<span class="n">pos_x</span> <span class="o">+=</span> <span class="n">num</span>
<span class="n">affiche_point</span><span class="p">(</span><span class="n">diametre_balle</span><span class="p">,</span> <span class="n">couleur_balle</span><span class="p">)</span>
<span class="sd">'''Fonction pour changer la coordonnée y de la balle'''</span>
<span class="k">def</span> <span class="nf">move_y</span><span class="p">(</span><span class="n">num</span> <span class="o">=</span> <span class="mi">0</span><span class="p">):</span>
<span class="k">global</span> <span class="n">pos_y</span>
<span class="n">pos_y</span> <span class="o">+=</span> <span class="n">num</span>
<span class="n">affiche_point</span><span class="p">(</span><span class="n">diametre_balle</span><span class="p">,</span> <span class="n">couleur_balle</span><span class="p">)</span>
<span class="sd">'''Boucle principale'''</span>
<span class="k">if</span> <span class="n">__name__</span> <span class="o">==</span> <span class="s">"__main__"</span><span class="p">:</span>
<span class="n">pos_x</span><span class="p">,</span> <span class="n">pos_y</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span>
<span class="n">diametre_balle</span><span class="p">,</span> <span class="n">couleur_balle</span> <span class="o">=</span> <span class="mi">20</span><span class="p">,</span> <span class="s">'red'</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">hideturtle</span><span class="p">()</span>
<span class="n">affiche_point</span><span class="p">(</span><span class="n">diametre_balle</span><span class="p">,</span> <span class="n">couleur_balle</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">listen</span><span class="p">()</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">onkeypress</span><span class="p">(</span><span class="k">lambda</span> <span class="p">:</span> <span class="n">move_x</span><span class="p">(</span><span class="o">-</span><span class="mi">10</span><span class="p">),</span> <span class="s">"Left"</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">onkeypress</span><span class="p">(</span><span class="k">lambda</span> <span class="p">:</span> <span class="n">move_x</span><span class="p">(</span><span class="mi">10</span><span class="p">),</span> <span class="s">"Right"</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">onkeypress</span><span class="p">(</span><span class="k">lambda</span> <span class="p">:</span> <span class="n">move_y</span><span class="p">(</span><span class="mi">10</span><span class="p">),</span> <span class="s">"Up"</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">onkeypress</span><span class="p">(</span><span class="k">lambda</span> <span class="p">:</span> <span class="n">move_y</span><span class="p">(</span><span class="o">-</span><span class="mi">10</span><span class="p">),</span> <span class="s">"Down"</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">onkeyrelease</span><span class="p">(</span><span class="n">move_reset</span><span class="p">,</span> <span class="s">"space"</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">mainloop</span><span class="p">()</span>
</pre></div>
</td></tr></table>