diff --git a/Notebooks/02_Boucle_for.ipynb b/Notebooks/02_Boucle_for.ipynb index 7bcf54fc5c8c7b01df7c91a93c724a14c97abb74..ed85bdfbbac0ba83c268c25187d2dc4414c3feef 100755 --- a/Notebooks/02_Boucle_for.ipynb +++ b/Notebooks/02_Boucle_for.ipynb @@ -1 +1,839 @@ -{"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":"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|"},{"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":false},"cell_type":"code","source":"from turtle import *\n\nforward(100)\nleft(90)\nforward(100)\nleft(90)\nforward(100)\nleft(90)\nforward(100)\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":false},"cell_type":"code","source":"from turtle import *\n\nfor _ in range(4):\n forward(100)\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 puis exécuter le programme qui suit pour vérifier votre réponse\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":false},"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":false,"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":false},"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":false},"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":false},"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":false},"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":false},"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":false},"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":"### Cercle\nRappel: La fonction circle(R, A) permet de dessiner un arc de cercle de rayon R et d'angle A.\n\nExemple: circle(100, 360) dessine un cercle de rayon 100.\n\n"},{"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\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":false},"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":"## 2.4 Explorer \"La tortue\"\n\nVoici quelques fonctions de la tortue.\n\n"},{"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":false},"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 9 </h3>Essayez les formes `'triangle'` et `'arrow'`.\n\n"},{"metadata":{"trusted":false},"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 10 </h3>Corrigez l'erreur d'importation.\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"from turtl import *\n\nfor i 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 11 </h3>Corrigez les trois erreurs de syntaxe et remarquez les éventuelles différences de stylisation.\n\n"},{"metadata":{"trusted":false},"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 12 </h3>Corrigez les trois erreurs de nom.\n\n"},{"metadata":{"trusted":false},"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 13 </h3>Corrigez les trois erreurs de type.\n\n"},{"metadata":{"trusted":false},"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 14 </h3>\n\nRéécrire le code suivant en remplaçant par une boucle `for` partout où c’est possible.\n\n"},{"metadata":{"trusted":false},"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","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"},"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.12.3"}},"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" + ]Update + "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 +}