commit 2f51299024bfaa684a0fc0cfb952d2e1454af462
parent 9b3e22dc5d5d2869436953b3022937e2ed77ea89
Author: Léo Villeveygoux <l@vgx.fr>
Date: Wed, 6 Jan 2021 02:32:57 +0100
Ajout d'un TP d'intro à la programmation en python
Diffstat:
A | prog/TP-turtle.html | | | 169 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
A | prog/TP-turtle.md | | | 257 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
2 files changed, 426 insertions(+), 0 deletions(-)
diff --git a/prog/TP-turtle.html b/prog/TP-turtle.html
@@ -0,0 +1,169 @@
+<h1 id="le-module-turtle">Le module <code>turtle</code></h1>
+<p>Le module python <code>turtle</code> permet de dessiner des formes en faisant bouger une flèche (historiquement c’était une tortue).</p>
+<p>Ça va nous permettre de voir les bases de la programmation en Python.</p>
+<ol type="1">
+<li>Ouvrez l’<strong>éditeur Mu</strong> en mode Python3 (c’est le mode de base).</li>
+<li>Créez un nouveau fichier avec le bouton <em>Nouveau</em> et enregistrez-le.</li>
+<li>Écrivez <code>from turtle import *</code> sur la première ligne pour charger la bibliothèque</li>
+<li>Lancez votre script (bouton <em>Lancer</em>)</li>
+</ol>
+<p>Il ne se passe rien sauf qu’une fenêtre devrait s’ouvrir en base de l’écran avec les caractères <code>>>></code>. C’est la <strong>console Python</strong>, c’est là que sont affichés les messages (par exemples les messages d’erreur), mais on peut aussi y écrire du code python qui sera exécuté directement sans être enregistré dans le programme.</p>
+<ol start="5" type="1">
+<li>Écrivez <code>forward(100)</code> dans la consle et appuyez sur <em>Entrée</em>.</li>
+</ol>
+<p>Une fenêtre devrait s’ouvrir avec une flèche qui dessine un trait. En fait on a fait avancer la tortue (<code>forward</code> = <em>en avant</em> en anglais) d’une distance de 100 pixels, et elle dessine son chemin.</p>
+<p>Voici quelques fonctions de base pour manipuler la tortue :</p>
+<div class="sourceCode" id="cb1"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a>forward(distance) <span class="co"># faire avancer la tortue</span></span>
+<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a>backward(distance) <span class="co"># faire reculer la tortue</span></span>
+<span id="cb1-4"><a href="#cb1-4" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb1-5"><a href="#cb1-5" aria-hidden="true" tabindex="-1"></a>right(angle) <span class="co"># faire se tourner la tortue vers sa droite</span></span>
+<span id="cb1-6"><a href="#cb1-6" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb1-7"><a href="#cb1-7" aria-hidden="true" tabindex="-1"></a>left(angle) <span class="co"># faire se tourner la tortue vers sa gauche</span></span>
+<span id="cb1-8"><a href="#cb1-8" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb1-9"><a href="#cb1-9" aria-hidden="true" tabindex="-1"></a><span class="co"># ces angles sont donnés en degrés</span></span></code></pre></div>
+<ol start="6" type="1">
+<li>Essayez ces fonctions dans la console (en mettant des nombres à la place de <code>distance</code> et <code>angle</code>).</li>
+</ol>
+<h1 id="séquence-dinstructions">Séquence d’instructions</h1>
+<p>On veut faire dessiner des formes géométriques simples à la tortue, voici un programme qui dessine un triangle équilatéral :</p>
+<div class="sourceCode" id="cb2"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb2-1"><a href="#cb2-1" aria-hidden="true" tabindex="-1"></a><span class="im">from</span> turtle <span class="im">import</span> <span class="op">*</span></span>
+<span id="cb2-2"><a href="#cb2-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb2-3"><a href="#cb2-3" aria-hidden="true" tabindex="-1"></a>forward(<span class="dv">100</span>)</span>
+<span id="cb2-4"><a href="#cb2-4" aria-hidden="true" tabindex="-1"></a>left(<span class="dv">120</span>)</span>
+<span id="cb2-5"><a href="#cb2-5" aria-hidden="true" tabindex="-1"></a>forward(<span class="dv">100</span>)</span>
+<span id="cb2-6"><a href="#cb2-6" aria-hidden="true" tabindex="-1"></a>left(<span class="dv">120</span>)</span>
+<span id="cb2-7"><a href="#cb2-7" aria-hidden="true" tabindex="-1"></a>forward(<span class="dv">100</span>)</span></code></pre></div>
+<ol type="1">
+<li>Modifiez le code pour dessiner un carré.</li>
+<li>modifiez le code pour dessiner une maison (un carré avec un triangle dessus).</li>
+</ol>
+<h1 id="variables">Variables</h1>
+<p>Une variable est une boîte qui a un nom et qui contient une valeur (un nombre, du texte, etc.). Par exemple dans ce code :</p>
+<div class="sourceCode" id="cb3"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb3-1"><a href="#cb3-1" aria-hidden="true" tabindex="-1"></a>truc <span class="op">=</span> <span class="dv">42</span></span></code></pre></div>
+<p>On crée une variable qui s’appelle <code>truc</code> (c’est son <em>nom</em>) et qui contient <code>42</code> (c’est sa <em>valeur</em>).</p>
+<p>On peut ensuite écrire le nom de la variable dans le code et il sera remplacé par la valeur de la variable à l’exécution.</p>
+<p>Exemple :</p>
+<div class="sourceCode" id="cb4"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb4-1"><a href="#cb4-1" aria-hidden="true" tabindex="-1"></a><span class="im">from</span> turtle <span class="im">import</span> <span class="op">*</span></span>
+<span id="cb4-2"><a href="#cb4-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb4-3"><a href="#cb4-3" aria-hidden="true" tabindex="-1"></a>taille <span class="op">=</span> <span class="dv">100</span></span>
+<span id="cb4-4"><a href="#cb4-4" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb4-5"><a href="#cb4-5" aria-hidden="true" tabindex="-1"></a><span class="bu">print</span>(taille) <span class="co"># affiche le contenu de la variable dans la console</span></span>
+<span id="cb4-6"><a href="#cb4-6" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb4-7"><a href="#cb4-7" aria-hidden="true" tabindex="-1"></a>forward(taille) <span class="co"># la tortue va avancer de 100 pixels</span></span></code></pre></div>
+<ol type="1">
+<li>Crééz une variable <code>taille</code> en lui donnant comme valeur 80</li>
+<li>Modifiez le code qui dessine le carré ou celui qui dessine le triangle pour que chaque <code>forward(100)</code> soit remplacé par <code>forward(taille)</code>.</li>
+<li>Lancez le programme, puis modifiez la valeur de la variable et relancez le programme</li>
+</ol>
+<p>Ça devrait avoir dessiné la forme à des tailles différentes.</p>
+<h1 id="entrée-de-lutilisateur">Entrée de l’utilisateur</h1>
+<p>En plus d’envoyer des messages dans la console en utilisant <code>print()</code>, on peut demander à l’utilisateur de taper du texte dans la console pour le récupérer.</p>
+<p>Pour cela on utilise la fonction <code>input()</code>, exemple :</p>
+<div class="sourceCode" id="cb5"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb5-1"><a href="#cb5-1" aria-hidden="true" tabindex="-1"></a><span class="co"># On récupère une chaîne de caractères et on la met dans une variable 'nom'</span></span>
+<span id="cb5-2"><a href="#cb5-2" aria-hidden="true" tabindex="-1"></a>nom <span class="op">=</span> <span class="bu">input</span>(<span class="st">"Écris ton nom : "</span>)</span>
+<span id="cb5-3"><a href="#cb5-3" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb5-4"><a href="#cb5-4" aria-hidden="true" tabindex="-1"></a><span class="co"># On affiche le contenu de cette variable dans la console</span></span>
+<span id="cb5-5"><a href="#cb5-5" aria-hidden="true" tabindex="-1"></a><span class="bu">print</span>(<span class="st">"Bonjour"</span>, nom)</span></code></pre></div>
+<ol type="1">
+<li>Testez ce code dans la console ou dans un nouveau programme.</li>
+</ol>
+<p>La valeur de retour de <code>input()</code> (donc dans l’exemple le contenu de <code>nom</code>) est du texte. Pour le transformer en nombre il faut ajouter un appel à <code>int()</code> de cette manière :</p>
+<div class="sourceCode" id="cb6"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb6-1"><a href="#cb6-1" aria-hidden="true" tabindex="-1"></a>nombre <span class="op">=</span> <span class="bu">int</span>(<span class="bu">input</span>(<span class="st">"Écris un nombre : "</span>))</span></code></pre></div>
+<p>Maintenant le contenu de la variable sera un nombre, et la variable pourra être utilisée dans le code là où on a besoin d’un nombre.</p>
+<ol start="2" type="1">
+<li>Reprenez le code qui dessine une forme avec une variable <code>taille</code> : modifiez la ligne où vous créez la variable pour y mettre une valeur obtenue avec <code>int(input())</code> au lieu d’un nombre écrit directement dans le code.</li>
+</ol>
+<h1 id="instructions-conditionnelles">Instructions conditionnelles</h1>
+<p>On peut vouloir exécuter des lignes de code seulement dans certaines conditions, <em>si</em> une variable a la bonne valeur par exemple. On utilise alors une structure <strong>conditionnelle</strong> (<em>si … alors … sinon …</em>).</p>
+<p>Exemple en python :</p>
+<div class="sourceCode" id="cb7"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb7-1"><a href="#cb7-1" aria-hidden="true" tabindex="-1"></a>nombre <span class="op">=</span> <span class="bu">int</span>(<span class="bu">input</span>(<span class="st">"Écris un nombre"</span>))</span>
+<span id="cb7-2"><a href="#cb7-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb7-3"><a href="#cb7-3" aria-hidden="true" tabindex="-1"></a><span class="co"># attention à bien mettre 2 signes '=' et un ':' à la fin</span></span>
+<span id="cb7-4"><a href="#cb7-4" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> nombre <span class="op">==</span> <span class="dv">42</span>:</span>
+<span id="cb7-5"><a href="#cb7-5" aria-hidden="true" tabindex="-1"></a> <span class="co"># ça ne sera exécuté que si le nombre est 42</span></span>
+<span id="cb7-6"><a href="#cb7-6" aria-hidden="true" tabindex="-1"></a> <span class="co"># le code est "décalé" à droite, on dit qu'il est "indenté"</span></span>
+<span id="cb7-7"><a href="#cb7-7" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"Ton nombre est 42"</span>)</span>
+<span id="cb7-8"><a href="#cb7-8" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb7-9"><a href="#cb7-9" aria-hidden="true" tabindex="-1"></a><span class="bu">print</span>(<span class="st">"Au revoir"</span>) <span class="co"># ce code est aligné à gauche, il est en dehors du 'if'</span></span></code></pre></div>
+<p>Exemple avec un <em>sinon</em> :</p>
+<div class="sourceCode" id="cb8"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb8-1"><a href="#cb8-1" aria-hidden="true" tabindex="-1"></a>prenom <span class="op">=</span> <span class="bu">input</span>(<span class="st">"Ton prénom : "</span>)</span>
+<span id="cb8-2"><a href="#cb8-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb8-3"><a href="#cb8-3" aria-hidden="true" tabindex="-1"></a><span class="cf">if</span> prenom <span class="op">==</span> <span class="st">"Léo"</span>:</span>
+<span id="cb8-4"><a href="#cb8-4" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"tu as le meilleur prénom"</span>)</span>
+<span id="cb8-5"><a href="#cb8-5" aria-hidden="true" tabindex="-1"></a><span class="cf">else</span>:</span>
+<span id="cb8-6"><a href="#cb8-6" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"Tu as un prénom moyen ..."</span>)</span></code></pre></div>
+<p>On peut changer la couleur du trait de la tortue avec la fonction <code>color()</code>.</p>
+<p>Par exemple :</p>
+<div class="sourceCode" id="cb9"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb9-1"><a href="#cb9-1" aria-hidden="true" tabindex="-1"></a><span class="im">from</span> turtle <span class="im">import</span> <span class="op">*</span></span>
+<span id="cb9-2"><a href="#cb9-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb9-3"><a href="#cb9-3" aria-hidden="true" tabindex="-1"></a>color(<span class="st">"red"</span>)</span>
+<span id="cb9-4"><a href="#cb9-4" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb9-5"><a href="#cb9-5" aria-hidden="true" tabindex="-1"></a>forward(<span class="dv">100</span>)</span></code></pre></div>
+<p>dessinera un trait rouge.</p>
+<ol type="1">
+<li>Dans le code dessinant une forme dont la tille est demandée à l’utilisateur, changez la couleur à rouge si la taille est supérieure (signe <code>></code>) à 100.</li>
+<li>Créez une variable <code>forme</code> où vous demanderez à l’utilisateur d’écrire du texte (donc avec <code>inpu()</code> mais sans <code>int()</code>). Si le texte est <code>"carre"</code> dessinez un carré, sinon dessinez un triangle.</li>
+</ol>
+<h1 id="boucles-for">Boucles <code>for</code></h1>
+<p>Les boucles <code>for</code> permettent de répetter une action ou une séquence d’actions un nombre précis de fois, exemple :</p>
+<div class="sourceCode" id="cb10"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb10-1"><a href="#cb10-1" aria-hidden="true" tabindex="-1"></a><span class="co"># affiche 10 fois "lol" dans la console</span></span>
+<span id="cb10-2"><a href="#cb10-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb10-3"><a href="#cb10-3" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> i <span class="kw">in</span> <span class="bu">range</span>(<span class="dv">10</span>):</span>
+<span id="cb10-4"><a href="#cb10-4" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"lol"</span>)</span></code></pre></div>
+<p>On remarque qu’on a encore une fois une ligne qui finit par ‘:’, suivie d’un bloc de code indenté (une suite de lignes décalées à droite).</p>
+<p>On peut s’en servir pour dessiner le carré plus efficacement :</p>
+<div class="sourceCode" id="cb11"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb11-1"><a href="#cb11-1" aria-hidden="true" tabindex="-1"></a><span class="im">from</span> turtle <span class="im">import</span> <span class="op">*</span></span>
+<span id="cb11-2"><a href="#cb11-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb11-3"><a href="#cb11-3" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> i <span class="kw">in</span> <span class="bu">range</span>(<span class="dv">4</span>):</span>
+<span id="cb11-4"><a href="#cb11-4" aria-hidden="true" tabindex="-1"></a> forward(<span class="dv">100</span>)</span>
+<span id="cb11-5"><a href="#cb11-5" aria-hidden="true" tabindex="-1"></a> left(<span class="dv">90</span>)</span></code></pre></div>
+<ol type="1">
+<li>Utilisez une boucle for pour dessiner une étoile à 5 branches (l’angle est de 144°)</li>
+<li>Dessinez une étoile à 36 branches (170°)</li>
+<li>Dessinez une ligne de 10 carrés de 10 px de coté.</li>
+<li>dessinez une grille de 10x10 carrés chacun de 10px de coté.</li>
+</ol>
+<h1 id="boucles-while">Boucles <code>while</code></h1>
+<p>Parfois on veut répéter une action, mais on ne sais pas encore combien de fois, alors on ne peut pas utiliser de boucle <code>for</code>, il faut vérifier à chaque répétition si on veut s’arrêter ou non : c’est ce à quoi sert la boucle <code>while</code> (boucle <em>tant que</em>).</p>
+<p>Exemple :</p>
+<div class="sourceCode" id="cb12"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb12-1"><a href="#cb12-1" aria-hidden="true" tabindex="-1"></a>nombre <span class="op">=</span> <span class="bu">int</span>(<span class="bu">input</span>(<span class="st">"choisis un nombre : "</span>))</span>
+<span id="cb12-2"><a href="#cb12-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb12-3"><a href="#cb12-3" aria-hidden="true" tabindex="-1"></a><span class="cf">while</span> nombre <span class="op">!=</span> <span class="dv">42</span>: <span class="co"># '!=' veut dir 'est différent de'</span></span>
+<span id="cb12-4"><a href="#cb12-4" aria-hidden="true" tabindex="-1"></a> <span class="bu">print</span>(<span class="st">"Mauvais nombre, essaye encore"</span>)</span>
+<span id="cb12-5"><a href="#cb12-5" aria-hidden="true" tabindex="-1"></a> </span>
+<span id="cb12-6"><a href="#cb12-6" aria-hidden="true" tabindex="-1"></a> <span class="co"># il faut maintenant changer la variable nombre,</span></span>
+<span id="cb12-7"><a href="#cb12-7" aria-hidden="true" tabindex="-1"></a> <span class="co"># sinon on ça recommence à l'infini !</span></span>
+<span id="cb12-8"><a href="#cb12-8" aria-hidden="true" tabindex="-1"></a> nombre <span class="op">=</span> <span class="bu">int</span>(<span class="bu">input</span>(<span class="st">"re-choisis un nombre : "</span>))</span>
+<span id="cb12-9"><a href="#cb12-9" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb12-10"><a href="#cb12-10" aria-hidden="true" tabindex="-1"></a><span class="co"># Si on est ici c'est qu'on a réussi à sortir de la boucle while</span></span>
+<span id="cb12-11"><a href="#cb12-11" aria-hidden="true" tabindex="-1"></a><span class="bu">print</span>(<span class="st">"bravo, tu as choisi 42 !"</span>)</span></code></pre></div>
+<ol type="1">
+<li>Dans le code où on demande la taille pour dessiner une forme, redemandez la taille tant qu’elle est inférieure à 10 (et affichez “taille trop petite”), puis seulement quand la taille est assez grande, dessinez la forme.</li>
+</ol>
+<p>On peut faire un boucle qui ne se termine jamais et continue à l’infini en écrivant <code>while True:</code> (tant que <em>vrai</em>, et True sera toujours <em>vrai</em>).</p>
+<p>On peut éffacer l’écran et remettre la tortue au départ avec <code>reset()</code>.</p>
+<ol start="2" type="1">
+<li>Écrivez un programme qui demande à l’utilisateur une forme (entre triangle et carré) et une taille et qui <code>reset()</code> l’écran et dessine cette forme. Une fois la forme dessinée, ça doit recommencer et directement redemander une forme. (indice : il faut mettre tout le code de demande à l’utilisateur, dessin, etc. dans une boucle <code>while True:</code>)</li>
+</ol>
+<h1 id="fonctions">Fonctions</h1>
+<p>Une fonction est un bloc de code qu’on met de coté pour l’utiliser plus tard. Le moment ou on l’écrit et le met de coté s’appelle la <em>définition</em>, le moment où on l’utilise s’appelle <em>l’appel</em> de fontion.</p>
+<p>On a appelé plein de fonctions depuis le début, par exemple <code>forward(100)</code> est un appel de fonction, mais ces fonctions sont définies par d’autres personnes dans le module <code>turtle</code>.</p>
+<p>Voyons comment définir nous même une fonction :</p>
+<div class="sourceCode" id="cb13"><pre class="sourceCode python"><code class="sourceCode python"><span id="cb13-1"><a href="#cb13-1" aria-hidden="true" tabindex="-1"></a><span class="im">from</span> turtle <span class="im">import</span> <span class="op">*</span></span>
+<span id="cb13-2"><a href="#cb13-2" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb13-3"><a href="#cb13-3" aria-hidden="true" tabindex="-1"></a><span class="co"># On définit une fonction trait, elle n'est pas appellée pour l'instant</span></span>
+<span id="cb13-4"><a href="#cb13-4" aria-hidden="true" tabindex="-1"></a><span class="kw">def</span> trait():</span>
+<span id="cb13-5"><a href="#cb13-5" aria-hidden="true" tabindex="-1"></a> forward(<span class="dv">100</span>)</span>
+<span id="cb13-6"><a href="#cb13-6" aria-hidden="true" tabindex="-1"></a> backward(<span class="dv">100</span>) <span class="co"># pour revenir au début</span></span>
+<span id="cb13-7"><a href="#cb13-7" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb13-8"><a href="#cb13-8" aria-hidden="true" tabindex="-1"></a><span class="co"># on appelle cette fonction, ça dessine un trait maintenant</span></span>
+<span id="cb13-9"><a href="#cb13-9" aria-hidden="true" tabindex="-1"></a>trait()</span>
+<span id="cb13-10"><a href="#cb13-10" aria-hidden="true" tabindex="-1"></a></span>
+<span id="cb13-11"><a href="#cb13-11" aria-hidden="true" tabindex="-1"></a><span class="co"># on peut l'appeler plusieurs fois :</span></span>
+<span id="cb13-12"><a href="#cb13-12" aria-hidden="true" tabindex="-1"></a><span class="cf">for</span> i <span class="kw">in</span> <span class="bu">range</span>(<span class="dv">10</span>):</span>
+<span id="cb13-13"><a href="#cb13-13" aria-hidden="true" tabindex="-1"></a> trait()</span>
+<span id="cb13-14"><a href="#cb13-14" aria-hidden="true" tabindex="-1"></a> left(<span class="dv">36</span>)</span></code></pre></div>
+<ol type="1">
+<li>Mettez le code pour dessiner un carré dans une fonction <code>carre</code> et celui pour dessiner un triangle dans une fonction <code>triangle</code>, appelez ces fonction dans la boucle <code>while</code> ou lieu d’y mettre directement le code pour dessiner les formes.</li>
+</ol>
diff --git a/prog/TP-turtle.md b/prog/TP-turtle.md
@@ -0,0 +1,257 @@
+---
+title: Programmation en Python avec turtle
+---
+
+# Le module `turtle`
+
+Le module python `turtle` permet de dessiner des formes
+en faisant bouger une flèche (historiquement c'était une tortue).
+
+Ça va nous permettre de voir les bases de la programmation en Python.
+
+1. Ouvrez l'**éditeur Mu** en mode Python3 (c'est le mode de base).
+2. Créez un nouveau fichier avec le bouton *Nouveau* et enregistrez-le.
+3. Écrivez `from turtle import *` sur la première ligne pour charger la bibliothèque
+4. Lancez votre script (bouton *Lancer*)
+
+Il ne se passe rien sauf qu'une fenêtre devrait s'ouvrir en base de l'écran avec les caractères `>>> `.
+C'est la **console Python**, c'est là que sont affichés les messages (par exemples les messages d'erreur),
+mais on peut aussi y écrire du code python qui sera exécuté directement sans être enregistré dans le programme.
+
+5. Écrivez `forward(100)` dans la consle et appuyez sur *Entrée*.
+
+Une fenêtre devrait s'ouvrir avec une flèche qui dessine un trait.
+En fait on a fait avancer la tortue (`forward` = *en avant* en anglais)
+d'une distance de 100 pixels, et elle dessine son chemin.
+
+Voici quelques fonctions de base pour manipuler la tortue :
+
+~~~python
+forward(distance) # faire avancer la tortue
+
+backward(distance) # faire reculer la tortue
+
+right(angle) # faire se tourner la tortue vers sa droite
+
+left(angle) # faire se tourner la tortue vers sa gauche
+
+# ces angles sont donnés en degrés
+~~~
+
+6. Essayez ces fonctions dans la console (en mettant des nombres à la place de `distance` et `angle`).
+
+# Séquence d'instructions
+
+On veut faire dessiner des formes géométriques simples à la tortue, voici un programme qui dessine un triangle équilatéral :
+
+~~~python
+from turtle import *
+
+forward(100)
+left(120)
+forward(100)
+left(120)
+forward(100)
+~~~
+
+1. Modifiez le code pour dessiner un carré.
+2. modifiez le code pour dessiner une maison (un carré avec un triangle dessus).
+
+# Variables
+
+Une variable est une boîte qui a un nom et qui contient une valeur (un nombre, du texte, etc.).
+Par exemple dans ce code :
+
+~~~python
+truc = 42
+~~~
+
+On crée une variable qui s'appelle `truc` (c'est son *nom*) et qui contient `42` (c'est sa *valeur*).
+
+On peut ensuite écrire le nom de la variable dans le code et il sera remplacé par la valeur de la variable à l'exécution.
+
+Exemple :
+
+~~~python
+from turtle import *
+
+taille = 100
+
+print(taille) # affiche le contenu de la variable dans la console
+
+forward(taille) # la tortue va avancer de 100 pixels
+~~~
+
+1. Crééz une variable `taille` en lui donnant comme valeur 80
+2. Modifiez le code qui dessine le carré ou celui qui dessine le triangle pour que chaque `forward(100)` soit remplacé par `forward(taille)`.
+3. Lancez le programme, puis modifiez la valeur de la variable et relancez le programme
+
+Ça devrait avoir dessiné la forme à des tailles différentes.
+
+# Entrée de l'utilisateur
+
+En plus d'envoyer des messages dans la console en utilisant `print()`, on peut demander à l'utilisateur de taper du texte dans la console pour le récupérer.
+
+Pour cela on utilise la fonction `input()`, exemple :
+
+~~~python
+# On récupère une chaîne de caractères et on la met dans une variable 'nom'
+nom = input("Écris ton nom : ")
+
+# On affiche le contenu de cette variable dans la console
+print("Bonjour", nom)
+~~~
+
+1. Testez ce code dans la console ou dans un nouveau programme.
+
+La valeur de retour de `input()` (donc dans l'exemple le contenu de `nom`) est du texte.
+Pour le transformer en nombre il faut ajouter un appel à `int()` de cette manière :
+
+~~~python
+nombre = int(input("Écris un nombre : "))
+~~~
+
+Maintenant le contenu de la variable sera un nombre, et la variable pourra être utilisée dans le code là où on a besoin d'un nombre.
+
+2. Reprenez le code qui dessine une forme avec une variable `taille` :
+ modifiez la ligne où vous créez la variable pour y mettre une valeur obtenue avec `int(input())` au lieu d'un nombre écrit directement dans le code.
+
+
+# Instructions conditionnelles
+
+On peut vouloir exécuter des lignes de code seulement dans certaines conditions, *si* une variable a la bonne valeur par exemple.
+On utilise alors une structure **conditionnelle** (*si ... alors ... sinon ...*).
+
+Exemple en python :
+
+~~~python
+nombre = int(input("Écris un nombre"))
+
+# attention à bien mettre 2 signes '=' et un ':' à la fin
+if nombre == 42:
+ # ça ne sera exécuté que si le nombre est 42
+ # le code est "décalé" à droite, on dit qu'il est "indenté"
+ print("Ton nombre est 42")
+
+print("Au revoir") # ce code est aligné à gauche, il est en dehors du 'if'
+~~~
+
+Exemple avec un *sinon* :
+
+~~~python
+prenom = input("Ton prénom : ")
+
+if prenom == "Léo":
+ print("tu as le meilleur prénom")
+else:
+ print("Tu as un prénom moyen ...")
+~~~
+
+On peut changer la couleur du trait de la tortue avec la fonction `color()`.
+
+Par exemple :
+
+~~~python
+from turtle import *
+
+color("red")
+
+forward(100)
+~~~
+
+dessinera un trait rouge.
+
+1. Dans le code dessinant une forme dont la tille est demandée à l'utilisateur, changez la couleur à rouge si la taille est supérieure (signe `>`) à 100.
+2. Créez une variable `forme` où vous demanderez à l'utilisateur d'écrire du texte (donc avec `inpu()` mais sans `int()`). Si le texte est `"carre"` dessinez un carré, sinon dessinez un triangle.
+
+# Boucles `for`
+
+Les boucles `for` permettent de répetter une action ou une séquence d'actions un nombre précis de fois, exemple :
+
+~~~python
+# affiche 10 fois "lol" dans la console
+
+for i in range(10):
+ print("lol")
+~~~
+
+On remarque qu'on a encore une fois une ligne qui finit par ':', suivie d'un bloc de code indenté (une suite de lignes décalées à droite).
+
+On peut s'en servir pour dessiner le carré plus efficacement :
+
+~~~python
+from turtle import *
+
+for i in range(4):
+ forward(100)
+ left(90)
+~~~
+
+1. Utilisez une boucle for pour dessiner une étoile à 5 branches (l'angle est de 144°)
+2. Dessinez une étoile à 36 branches (170°)
+3. Dessinez une ligne de 10 carrés de 10 px de coté.
+4. dessinez une grille de 10x10 carrés chacun de 10px de coté.
+
+# Boucles `while`
+
+Parfois on veut répéter une action, mais on ne sais pas encore combien de fois,
+alors on ne peut pas utiliser de boucle `for`,
+il faut vérifier à chaque répétition si on veut s'arrêter ou non :
+c'est ce à quoi sert la boucle `while` (boucle *tant que*).
+
+Exemple :
+
+~~~python
+nombre = int(input("choisis un nombre : "))
+
+while nombre != 42: # '!=' veut dir 'est différent de'
+ print("Mauvais nombre, essaye encore")
+
+ # il faut maintenant changer la variable nombre,
+ # sinon on ça recommence à l'infini !
+ nombre = int(input("re-choisis un nombre : "))
+
+# Si on est ici c'est qu'on a réussi à sortir de la boucle while
+print("bravo, tu as choisi 42 !")
+~~~
+
+1. Dans le code où on demande la taille pour dessiner une forme, redemandez la taille tant qu'elle est inférieure à 10 (et affichez "taille trop petite"),
+ puis seulement quand la taille est assez grande, dessinez la forme.
+
+On peut faire un boucle qui ne se termine jamais et continue à l'infini en écrivant `while True:` (tant que *vrai*, et True sera toujours *vrai*).
+
+On peut éffacer l'écran et remettre la tortue au départ avec `reset()`.
+
+2. Écrivez un programme qui demande à l'utilisateur une forme (entre triangle et carré) et une taille et qui `reset()` l'écran et dessine cette forme.
+ Une fois la forme dessinée, ça doit recommencer et directement redemander une forme.
+ (indice : il faut mettre tout le code de demande à l'utilisateur, dessin, etc. dans une boucle `while True:`)
+
+# Fonctions
+
+Une fonction est un bloc de code qu'on met de coté pour l'utiliser plus tard.
+Le moment ou on l'écrit et le met de coté s'appelle la *définition*, le moment où on l'utilise s'appelle *l'appel* de fontion.
+
+On a appelé plein de fonctions depuis le début, par exemple `forward(100)` est un appel de fonction,
+mais ces fonctions sont définies par d'autres personnes dans le module `turtle`.
+
+Voyons comment définir nous même une fonction :
+
+~~~python
+from turtle import *
+
+# On définit une fonction trait, elle n'est pas appellée pour l'instant
+def trait():
+ forward(100)
+ backward(100) # pour revenir au début
+
+# on appelle cette fonction, ça dessine un trait maintenant
+trait()
+
+# on peut l'appeler plusieurs fois :
+for i in range(10):
+ trait()
+ left(36)
+~~~
+
+1. Mettez le code pour dessiner un carré dans une fonction `carre` et celui pour dessiner un triangle dans une fonction `triangle`,
+ appelez ces fonction dans la boucle `while` ou lieu d'y mettre directement le code pour dessiner les formes.