diff --git a/Notebooks/02_Boucle_for.ipynb b/Notebooks/02_Boucle_for.ipynb index 7a5ba9e9a4f4b75f75ef30f77681bdffe18e895a..63bfb1c5bda2dfcb09ad2be9a32e5452a0f72bba 100755 --- a/Notebooks/02_Boucle_for.ipynb +++ b/Notebooks/02_Boucle_for.ipynb @@ -1 +1,847 @@ -{"cells":[{"metadata":{},"cell_type":"markdown","source":"<div class = \"alert alert-danger\"> \n \nAttention: **veillez à bien sauvegarder votre travail** dans le bon dossier du disque réseau (dossier document) avec le bon nom (et l'extension *.ipynb*), **sinon toutes les modifications seront perdues!**\n\nPour reprendre votre travail, il suffit d'ouvrir le fichier .ipynb en cliquant sur *Fichier ouvrir*\n</div>"},{"metadata":{},"cell_type":"markdown","source":"# 2. Répéter - `for`\n\nDans ce chapitre, nous découvrons comment utiliser une boucle `for` pour répéter un bloc d'instructions un certain nombre de fois. Nous allons voir que :\n\n* la boucle `for` permet de répéter des instructions,\n* la structure `for _ in range(n):` permet de répéter un bloc un nombre `n` fois,\n* les instructions, qui sont répétées, sont celles qui suivent le `:` et qui sont indentées (décalées à droite). En effet, le langage python, n'a pas de end for pour indiquer la fin de la boucle. Le langage utilise l'indentation pour signifier qu'une suite d'instruction fait partie de la boucle.\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n \n```\nUne boucle informatique est\n\nA) une instruction\nB) un passage ondulé\nC) une section de code répétée\nD) une protection thermique\nE) un cercle dessiné par \"Turtle\"\n```"},{"metadata":{},"cell_type":"markdown","source":"<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nRéponse\n</summary> \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\n\nC) une section de code répétée\n</div>\n</details>"},{"metadata":{},"cell_type":"markdown","source":"## 2.1 La répétition\n\nRevenons vers un exemple simple : dessiner un carré.\n\nSi nous regardons le code de près, nous pouvons voir que nous répétons 4 fois les mêmes deux instructions `forward()` et `left()`.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\nd = 100\n\nforward(d)\nleft(90)\nforward(d)\nleft(90)\nforward(d)\nleft(90)\nforward(d)\nleft(90)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Ne serait-ce pas pratique de pouvoir dire à la tortue de répéter ces instructions 4 fois ?\nCeci est possible avec une boucle `for`. \n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 1 </h3>Transformez le rectangle en triangle.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\nd = 100\n\nfor _ in range(4):\n forward(d)\n left(90)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<div class=\"alert alert-block alert-warning\"><b>A savoir:</b> \n \nPour distinguer les instructions qui seront répétées de celles qui ne le seront pas, on indente le code, c'est-à-dire que toutes les instructions qui suivent le `for` qui commencent par un espacement seront répétées le nombre de fois explicité dans le `range`. Après les répétitions le programme exécutera la permière instruction qui n'est pas indentée.\n\nNB: Vous être libre de choisir l'espace d'indentation mais soyez rigoureux avec votre choix et garder la même valeur pour tout votre programme. Nous utilisons en général un espace de 4 caractères pour rendre les codes plus lisible.\n</div>"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n \n```\n\nUne indentation de texte est\n\nA) un décalage vers la gauche\nB) un décalage vers la droite\nC) une mise en paragraphe\nD) une mise en sous-section\n```"},{"metadata":{},"cell_type":"markdown","source":"<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nRéponse\n</summary> \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\n\nB) un décalage vers la droite\n</div>\n</details>"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n \n```\nAvez-vous compris la notion d'indentation ?\nDans l'exemple ci-dessous (juste après la question/réponses) combien de fois le texte \"Au revoir\" va être affiché ?\nEssayer de répondre avant d'exécuter le code qui suit!\n\nA) 0 fois\nB) 1 fois\nC) 5 fois\nD) le code fera une une erreur à cause de l'indentation dans la boucle for\n```"},{"metadata":{"trusted":true},"cell_type":"code","source":"# Dans cette exemple l'instruction B ne fait pas partie de la boucle.\n\nfor _ in range(5):\n print(\"Hello\")\n print(\"----------\")\nprint(\"Au revoir\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## 2.3 Faire des figures avec les boucles\n\n### Polygone régulier\nAvec une boucle `for`, nous pouvons simplifier le dessin des formes symétriques."},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 2 </h3>\n\n1. Utiliser une boucle pour réécrire le programme ci-dessous \n2. Quelle est la figure dessinée ?"},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"from turtle import *\n\nforward(100)\nleft(60)\nforward(100)\nleft(60)\nforward(100)\nleft(60)\nforward(100)\nleft(60)\nforward(100)\nleft(60)\nforward(100)\nleft(60)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 3 </h3>\n\nCompléter le programme ci-dessous pour tracer un octogone. Un octogone est un polygone à huit sommets, donc huit côtés."},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nforward(100)\nleft(45)\n\n# à compléter\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Escalier\n\nPour dessiner un escalier, il faut simplement répéter dans une boucle le dessin pour une seule marche.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nfor _ in range(5):\n forward(20)\n left(90)\n forward(20)\n right(90)\n\nforward(100)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Pour dessiner des dents de scie, il faut simplement répéter dans une boucle le dessin pour une seule dent.\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 4 </h3>\n\nDessinez une usine avec un toit en dents de scie.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nfor _ in range(4):\n left(45)\n forward(71)\n right(135)\n forward(50)\n left(90)\n\nforward(80)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Éventail\n\nQue se passe-t-il si nous dessinons une ligne (`forward()`/`backward()`) et tournons chaque fois d'un petit angle ?\nC'est un peu comme un éventail qui s'ouvre.\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 5 </h3>\n\nDoublez l'angle de rotation dans `left()`."},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nfor _ in range(18):\n forward(100)\n backward(100)\n left(10)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Que se passe-t-il si nous avançons plus que nous reculons ?\nUne toute petite modification du programme peut faire une chouette différence."},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 6 </h3>\n\nModifiez les valeurs dans `forward()` et `backward()`.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nfor _ in range(18):\n forward(100)\n backward(90)\n left(20)\n\ndone()\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Étoile\n\nVoici une autre façon de toujours avancer, mais en tournant chaque fois d'un angle un peu plus petit que 180°.\nEssayons !\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 7 </h3>\n\nChangez le nombre de pics de l'étoile."},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nfor _ in range(9):\n forward(200)\n left(160)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## 2.4 Explorer \"La tortue\"\n\nRappel sur les fonctions de base avec la tortue.\n\n| Fonction |Exemple|Commentaire|\n|:-------- |:------|:----------|\n|forward(x)|forward(150)|Trace un trait de 150 points|\n|backward(x)|backward(150)|Trace un trait “à reculons” de 150 points|\n|left(n)|left(60)|Tourne sur place la tortue de 60° à gauche|\n|right(n)|right(60)|Tourne sur place la tortue de 60° à droite|\n|width(x)|width(5)|Change l’épaisseur à 5 points|\n|color(\"c\")|color(\"yellow\")|Change la couleur du trait (mais aucun trait n’est tracé à ce moment). Notez les guillemets !|\n|penup()|penup()|Lève la tortue (permet de se déplacer sans dessiner)|\n|pendown()|pendown()|Baisse le stylo|\n\n\nDans la suite nous allons explorer des nouvelles fonctions."},{"metadata":{},"cell_type":"markdown","source":"### Les arcs et les cercles\nSi on souhaite que la tortue se déplace sans écrire (sans dessiner), on utilise l'instruction penup() ou up(), puis pour reprendre l'écriture, on utilise la fonction pendown() ou down()."},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 8 </h3>\n\nLa fonction `circle(R, A)` permet de dessiner un arc de cercle de rayon R et d'angle A.\n\nModifier le code suivant pour comprendre comment la fonction circle(R, A) dessine. Essayer et modifer le code suvant avec les valeurs:\n* ``circle(100, 180)``\n* ``circle(100, 90)``\n\nEnsuite changer l'angle avant de dessiner, par exemple right(90) avant d'utiliser circle(100, 180)"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\ncircle(100, 180)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 9 </h3>\n\nCompléter la boucle for pour dessiner trois cercles rouge de rayon 50 coller les uns aux autres comme sur le dessin:\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\ncolor('red')\nfor _ in range(3):\n \n\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Estampe\n\nVous pouvez laisser une impression de la tortue à sa position actuelle avec la fonction `stamp()`.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\nshape('turtle')\n\nfor _ in range(6):\n forward(100)\n left(60)\n stamp()\n\ndone()\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Forme\n\nVous pouvez changer la forme de votre tortue avec la fonction `shape()`.\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 10 </h3>Essayez les formes `'triangle'` et `'arrow'`.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\nbackward(200)\n\nstamp()\nshape('turtle')\nforward(100)\n\nstamp()\nshape('circle')\nforward(100)\n\nstamp()\nshape('square')\nforward(100)\n\ndone()\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## 2.5 Les erreurs\n\nIl est important de bien lire et comprendre les messages d'erreur.\nDans cette section, vous allez découvrir les différentes catégories d'erreur et comment les corriger.\n\n"},{"metadata":{},"cell_type":"markdown","source":"### ImportError\n\nCette erreur survient lorsque vous essayez d'importer un module qui n'existe pas.\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 11 </h3>Corrigez l'erreur d'importation.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtl import *\n\nfor _ in range(3):\n forward(100)\n left(120)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### <font color='red'>SyntaxError</font>\n\nCette erreur survient lorsque vous écrivez mal un mot-clé, ou si vous oubliez une ponctuation. Dans ce cas, le mot-clé mal écrit n'est pas reconnu et il n'est pas colorié correctement dans votre code.\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 12 </h3>Corrigez les trois erreurs de syntaxe et remarquez les éventuelles différences de stylisation.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"fro turtle import *\n\nfore i in range(3)\n forward(100)\n left(120)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### <font color='red'>NameError</font>\n\nCette erreur survient lorsque vous écrivez mal le nom d'une variable ou fonction.\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 13 </h3>Corrigez les trois erreurs de nom.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nfor _ in range(n):\n forwarde(100)\n lefft(120)\n\ndone()\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### <font color='red'>TypeError</font>\n\nCette erreur survient lorsque vous ne mettez pas le nombre d'arguments corrects pour une fonction.\n\n"},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 14 </h3>Corrigez les trois erreurs de type.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nfor _ in range():\n forward()\n left(100, 120)\n\ndone()\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Exercices d'entraînement "},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 15 </h3>\n\nRéécrire le code suivant en remplaçant par une boucle `for` partout où c’est possible.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\nforward(20)\nright(40)\nforward(20)\nright(40)\nforward(20)\nright(40)\nforward(20)\nright(40)\nforward(-40)\nleft(30)\nforward(-40)\nleft(30)\nforward(20)\nright(40)\nforward(20)\nright(40)\nforward(-40)\nleft(30)\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 16 </h3>\n\nÀ l'aide des fonctions:\n* `circle(angle,rayon)`\n* `color(\"choix_de_couleur\")`\n* `penup()`\n* `pendown()`\n* `width(épaisseur)`\n* `forward(pixel)`\nDessiner les deux cercles suivants d'épaisseur 5 en choississant 2 couleurs pour le premier cercle et 4 couleurs pour le deuxième:\n\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\n# à compléter\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 17 </h3>\n\nÉcrivez un programme qui dessine une voiture de couleur bleue avec des roues noires plus épaisse.\n\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"from turtle import *\n\n# à compléter\n\ndone()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 15 </h3>\n\nUtiliser votre identifiant EEL et le mot de passe *Sismondi2024* pour faire les exercices de la **série B** de la plateforme [AlgoPython](https://www.algopython.fr/login). [](https://www.algopython.fr/login)\n\n\n"},{"metadata":{},"cell_type":"markdown","source":"---\n\n#### Remarque générale\n\nCe document est une adaptation d'un ressource pédagogique tiré du catalogue modulo https://modulo-info.ch/. Il est sous license Creative Commons [BY-NC-SA](https://creativecommons.org/licenses/?lang=fr)\n\n"}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":2} \ No newline at end of file +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<div class = \"alert alert-danger\"> \n", + " \n", + "Attention: **veillez à bien sauvegarder votre travail** dans le bon dossier du disque réseau (dossier document) avec le bon nom (et l'extension *.ipynb*), **sinon toutes les modifications seront perdues!**\n", + "\n", + "Pour reprendre votre travail, il suffit d'ouvrir le fichier .ipynb en cliquant sur *Fichier ouvrir*\n", + "</div>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Rappel de quelques fonction de Turtle avec des exemples qui pourront vous servir\n", + "\n", + "| Fonction |Exemple|Commentaire|\n", + "|:-------- |:------|:----------|\n", + "|forward(x)|forward(150)|Trace un trait de 150 points|\n", + "|backward(x)|backward(150)|Trace un trait “à reculons” de 150 points|\n", + "|left(n)|left(60)|Tourne sur place la tortue de 60° à gauche|\n", + "|right(n)|right(60)|Tourne sur place la tortue de 60° à droite|\n", + "|width(x)|width(5)|Change l’épaisseur à 5 points|\n", + "|color(\"c\")|color(\"yellow\")|Change la couleur du trait (mais aucun trait n’est tracé à ce moment). Notez les guillemets !|\n", + "|penup()|penup()|Lève la tortue (permet de se déplacer sans dessiner)|\n", + "|pendown()|pendown()|Baisse le stylo|" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Répéter - `for`\n", + "\n", + "Dans ce chapitre, nous découvrons comment utiliser une boucle `for` pour répéter un bloc d'instructions un certain nombre de fois. Nous allons voir que :\n", + "\n", + "* la boucle `for` permet de répéter des instructions,\n", + "* la structure `for _ in range(n):` permet de répéter un bloc un nombre `n` fois,\n", + "* les instructions, qui sont répétées, sont celles qui suivent le `:` et qui sont indentées (décalées à droite). En effet, le langage python, n'a pas de end for pour indiquer la fin de la boucle. Le langage utilise l'indentation pour signifier qu'une suite d'instruction fait partie de la boucle.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n", + " \n", + "```\n", + "Une boucle informatique est\n", + "\n", + "A) une instruction\n", + "B) un passage ondulé\n", + "C) une section de code répétée\n", + "D) une protection thermique\n", + "E) un cercle dessiné par \"Turtle\"\n", + "```" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "Ta réponse : " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<details>\n", + "<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \n", + "Réponse (Cliquer pour dévoiler)\n", + "</summary> \n", + "\n", + "<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\n", + "\n", + "C) une section de code répétée\n", + "</div>\n", + "</details>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.1 La répétition\n", + "\n", + "Revenons vers un exemple simple : dessiner un carré.\n", + "\n", + "Si nous regardons le code de près, nous pouvons voir que nous répétons 4 fois les mêmes deux instructions `forward()` et `left()`.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "forward(100)\n", + "left(90)\n", + "forward(100)\n", + "left(90)\n", + "forward(100)\n", + "left(90)\n", + "forward(100)\n", + "left(90)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Ne serait-ce pas pratique de pouvoir dire à la tortue de répéter ces instructions 4 fois ?\n", + "Ceci est possible avec une boucle `for`. \n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 1 </h3>Transformez le rectangle en triangle.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "for _ in range(4):\n", + " forward(100)\n", + " left(90)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<div class=\"alert alert-block alert-warning\"><b>A savoir:</b> \n", + " \n", + "Pour distinguer les instructions qui seront répétées de celles qui ne le seront pas, on <b>indente</b> le code, c'est-à-dire que toutes les instructions qui suivent le `for` qui commencent par un espacement seront répétées le nombre de fois explicité dans le `range`. Après les répétitions le programme exécutera la permière instruction qui n'est pas indentée.\n", + "\n", + "NB: Vous être libre de choisir l'espace d'indentation mais soyez rigoureux avec votre choix et garder la même valeur pour tout votre programme. Nous utilisons en général un espace de 4 caractères ou la <b>touche Tabulation</b> pour rendre les codes plus lisibles.\n", + "</div>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n", + " \n", + "```\n", + "\n", + "Une indentation de texte est\n", + "\n", + "A) un décalage vers la gauche\n", + "B) un décalage vers la droite\n", + "C) une mise en paragraphe\n", + "D) une mise en sous-section\n", + "```" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "Ta réponse : " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<details>\n", + "<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \n", + "Réponse (Cliquer pour dévoiler)\n", + "</summary> \n", + "\n", + "<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\n", + "\n", + "B) un décalage vers la droite\n", + "</div>\n", + "</details>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n", + " \n", + "```\n", + "Avez-vous compris la notion d'indentation ?\n", + "Dans l'exemple ci-dessous (juste après la question/réponses) combien de fois le texte \"Au revoir\" va être affiché ?\n", + "Essayer de répondre puis exécuter le programme qui suit pour vérifier votre réponse\n", + "\n", + "A) 0 fois\n", + "B) 1 fois\n", + "C) 5 fois\n", + "D) le code fera une une erreur à cause de l'indentation dans la boucle for\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Dans cette exemple l'instruction B ne fait pas partie de la boucle.\n", + "\n", + "for _ in range(5):\n", + " print(\"Hello\")\n", + " print(\"----------\")\n", + "print(\"Au revoir\")" + ] + }, + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "Ta réponse : " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<details>\n", + "<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \n", + "Réponse (Cliquer pour dévoiler)\n", + "</summary> \n", + "\n", + "<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">\n", + "\n", + "B) 1 fois\n", + "</div>\n", + "</details>" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.3 Faire des figures avec les boucles\n", + "\n", + "### Polygone régulier\n", + "Avec une boucle `for`, nous pouvons simplifier le dessin des formes symétriques." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 2 </h3>\n", + "\n", + "1. Utiliser une boucle pour réécrire le programme ci-dessous \n", + "2. Quelle est la figure dessinée ?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "forward(100)\n", + "left(60)\n", + "forward(100)\n", + "left(60)\n", + "forward(100)\n", + "left(60)\n", + "forward(100)\n", + "left(60)\n", + "forward(100)\n", + "left(60)\n", + "forward(100)\n", + "left(60)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 3 </h3>\n", + "\n", + "Compléter le programme ci-dessous pour tracer un octogone. Un octogone est un polygone à huit sommets, donc huit côtés." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "forward(100)\n", + "left(45)\n", + "\n", + "# à compléter\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Escalier\n", + "\n", + "Pour dessiner un escalier, il faut simplement répéter dans une boucle le dessin pour une seule marche.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "for _ in range(5):\n", + " forward(20)\n", + " left(90)\n", + " forward(20)\n", + " right(90)\n", + "\n", + "forward(100)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Pour dessiner des dents de scie, il faut simplement répéter dans une boucle le dessin pour une seule dent.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 4 </h3>\n", + "\n", + "Dessinez une usine avec un toit en dents de scie.\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "for _ in range(4):\n", + " left(45)\n", + " forward(71)\n", + " right(135)\n", + " forward(50)\n", + " left(90)\n", + "\n", + "forward(80)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Éventail\n", + "\n", + "Que se passe-t-il si nous dessinons une ligne (`forward()`/`backward()`) et tournons chaque fois d'un petit angle ?\n", + "C'est un peu comme un éventail qui s'ouvre.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 5 </h3>\n", + "\n", + "Doublez l'angle de rotation dans `left()`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "for _ in range(18):\n", + " forward(100)\n", + " backward(100)\n", + " left(10)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 6 </h3>\n", + "\n", + "Que se passe-t-il si nous avançons plus que nous reculons ?\n", + "Une toute petite modification du programme peut faire une chouette différence.\n", + "\n", + "Modifiez les valeurs dans `forward()` et `backward()`.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "for _ in range(18):\n", + " forward(100)\n", + " backward(90)\n", + " left(20)\n", + "\n", + "done()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Étoile\n", + "\n", + "Voici une autre façon de toujours avancer, mais en tournant chaque fois d'un angle un peu plus petit que 180°.\n", + "Essayons !\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 7 </h3>\n", + "\n", + "Essayez de changer le nombre de pics de l'étoile." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "for _ in range(9):\n", + " forward(200)\n", + " left(160)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Cercle\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 8 </h3>\n", + "\n", + "Compléter la boucle for pour dessiner trois cercles rouge de rayon 50 collés les uns aux autres comme sur le dessin:\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "##### Rappel: \n", + "\n", + "La fonction circle(R, A) permet de dessiner un arc de cercle de rayon R et d'angle A.\n", + "\n", + "Exemple: circle(100, 360) dessine un cercle de rayon 100.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "color('red')\n", + "for _ in range(3):\n", + " \n", + "\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.4 Explorer \"La tortue\"\n", + "\n", + "Voici quelques fonctions de la tortue.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Estampe\n", + "\n", + "Vous pouvez laisser une impression de la tortue à sa position actuelle avec la fonction `stamp()`.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "shape('turtle')\n", + "\n", + "for _ in range(6):\n", + " forward(100)\n", + " left(60)\n", + " stamp()\n", + "\n", + "done()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Forme\n", + "\n", + "Vous pouvez changer la forme de votre tortue avec la fonction `shape()`.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 9 </h3>Essayez les formes 'triangle', 'arrow', 'circle' et 'square'.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "shape('turtle')\n", + "\n", + "for _ in range(6):\n", + " forward(100)\n", + " left(60)\n", + " stamp()\n", + "\n", + "done()\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.5 Les erreurs\n", + "\n", + "Il est important de bien lire et comprendre les messages d'erreur.\n", + "Dans cette section, vous allez découvrir les différentes catégories d'erreur et comment les corriger.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### ImportError\n", + "\n", + "Cette erreur survient lorsque vous essayez d'importer un module qui n'existe pas.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 10 </h3>Corrigez l'erreur d'importation.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtl import *\n", + "\n", + "for i in range(3):\n", + " forward(100)\n", + " left(120)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### <font color='red'>SyntaxError</font>\n", + "\n", + "Cette erreur survient lorsque vous écrivez mal un mot-clé, ou si vous oubliez une ponctuation. Dans ce cas, le mot-clé mal écrit n'est pas reconnu et il n'est pas colorié correctement dans votre code.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 11 </h3>Corrigez les trois erreurs de syntaxe et remarquez les éventuelles différences de stylisation.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "fro turtle import *\n", + "\n", + "fore i in range(3)\n", + " forward(100)\n", + " left(120)\n", + "\n", + "done()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### <font color='red'>NameError</font>\n", + "\n", + "Cette erreur survient lorsque vous écrivez mal le nom d'une variable ou fonction.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 12 </h3>Corrigez les trois erreurs de nom.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "for _ in range(n):\n", + " forwarde(100)\n", + " lefft(120)\n", + "\n", + "done()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### <font color='red'>TypeError</font>\n", + "\n", + "Cette erreur survient lorsque vous ne mettez pas le nombre d'arguments corrects pour une fonction.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 13 </h3>Corrigez les trois erreurs de type.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "for _ in range():\n", + " forward()\n", + " left(100, 120)\n", + "\n", + "done()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Exercices d'entraînement " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 14 </h3>\n", + "\n", + "Réécrire le code suivant en remplaçant par une boucle `for` partout où c’est possible.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from turtle import *\n", + "\n", + "forward(20)\n", + "right(40)\n", + "forward(20)\n", + "right(40)\n", + "forward(20)\n", + "right(40)\n", + "forward(20)\n", + "right(40)\n", + "forward(-40)\n", + "left(30)\n", + "forward(-40)\n", + "left(30)\n", + "forward(20)\n", + "right(40)\n", + "forward(20)\n", + "right(40)\n", + "forward(-40)\n", + "left(30)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 15 </h3>\n", + "\n", + "Utiliser votre identifiant EEL et le mot de passe *Sismondi2024* pour faire les exercices de la **série B** de la plateforme [AlgoPython](https://www.algopython.fr/login). [](https://www.algopython.fr/login)\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "---\n", + "\n", + "#### Remarque générale\n", + "\n", + "Ce document est une adaptation d'un ressource pédagogique tiré du catalogue modulo https://modulo-info.ch/. Il est sous license Creative Commons [BY-NC-SA](https://creativecommons.org/licenses/?lang=fr)\n", + "\n" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.2" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}