diff --git a/Notebooks/06_Les_conditions.ipynb b/Notebooks/06_Les_conditions.ipynb index 1de04da512dc963e104f1e74b6d6d3c0b3a18ca6..3cff33fe65e91701033eabbbdb90e23a65a8382e 100644 --- a/Notebooks/06_Les_conditions.ipynb +++ b/Notebooks/06_Les_conditions.ipynb @@ -3,878 +3,316 @@ { "cell_type": "markdown", "metadata": {}, - "source": [ - "<div style=\"padding:20px;background-color:papayawhip;\" > \n", - "<h3 style=\"color:chocolate\"> <i class=\"fa fa-info\" aria-hidden=\"true\"> </i> Remarque introductive <i class=\"fa fa-info\" aria-hidden=\"true\"></h3> \n", - "<p> Ce fichier est fait pour être lu sur le site <a href=\"https://notebook.basthon.fr/\"><img src='https://notebook.basthon.fr/assets/efede5218c9087496f16.png' style=\"border: 0; display:inline; margin: 0 5px; height:30px\" alt=\"Basthon\"/></a>. <br>\n", - " \n", - "Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>\n", - "Veuillez cliquez sur <a href=\"https://notebook.basthon.fr/\">ce lien</a> et y charger ce fichier à l'aide du bouton \"Ouvrir\" <i class=\"fa fa-folder\" aria-hidden=\"true\"> </i>\n", - "</p> </div> " - ] + "source": "<div style=\"padding:20px;background-color:papayawhip;\" > \n<h3 style=\"color:chocolate\"> <i class=\"fa fa-info\" aria-hidden=\"true\"> </i> Remarque introductive <i class=\"fa fa-info\" aria-hidden=\"true\"></h3> \n<p> Ce fichier est fait pour être lu sur le site <a href=\"https://notebook.basthon.fr/\"><img src='https://notebook.basthon.fr/assets/efede5218c9087496f16.png' style=\"border: 0; display:inline; margin: 0 5px; height:30px\" alt=\"Basthon\"/></a>. <br>\n \nSi vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>\nVeuillez cliquez sur <a href=\"https://notebook.basthon.fr/\">ce lien</a> et y charger ce fichier à l'aide du bouton \"Ouvrir\" <i class=\"fa fa-folder\" aria-hidden=\"true\"> </i>\n</p> </div> " }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "# Décider - `if`\n", - "\n", - "Dans ce chapitre, nous allons voir comment un programme peut faire des choix, et comment il peut exécuter du code de façon sélective. Nous allons voir que :\n", - "\n", - "- le mot-clé `if` permet une exécution conditionnelle,\n", - "- le mot-clé `if-else` permet de choisir entre deux alternatives,\n", - "- le mot-clé `elif` (else if) permet d'ajouter différentes conditions.\n", - "\n" - ] + "source": "# Les Conditions\n\nDans ce chapitre, nous allons voir comment un programme peut faire des choix, et comment il peut exécuter du code de façon sélective.\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", - "En Python, `if` est suivi\n", - "\n", - "A) d'un bloc\n", - "B) d'une condition\n", - "C) de parenthèses\n", - "D) d'un deux-points\n", - "```" - ] + "source": "## I) Comparaisons\n\nUn programme doit parfois comparer deux valeurs.\nPython connait six types de comparaisons :\n\n- plus petit (`<`),\n- plus petit ou égal (`<=`),\n- égal (`==`),\n- différent (`!=`),\n- plus grand (`>`),\n- plus grand ou égal (`>=`).\n\nDans des formules mathématiques nous utilisons les symboles ≤, ≥ et ≠. En Python vous devez utiliser deux symboles: `<=`, `>=` et `!=` à la place.\n\nLe résultat d'une comparaison est une valeur booléenne, soit `True` soit `False`.\n\n\n" }, { - "cell_type": "raw", + "cell_type": "markdown", "metadata": {}, - "source": [ - "Ma réponse : " - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 1 </h3>Testez les lignes ci-dessous et ajoutez des exemples avec les autres 5 comparateurs.\n\n" + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": "# Variable x\nx = 3\nprint('x =', x)\n\n# 6 exemples de comparaisons\nprint('(x < 2) =', x < 2)\n\n\n\n\n" }, { "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\n", - "</summary> \n", - "\n", - "<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">B) d'une condition\n", - "</div>\n", - "</details>\n", - " \n" - ] + "source": "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n \n```\nL'expression `x == 2`\n\nA) met la valeur 2 dans la variable x\nB) compare deux valeurs\nC) affecte la variable x avec une valeur\nD) retourne True ou False\n```" }, { - "cell_type": "markdown", + "cell_type": "raw", "metadata": {}, - "source": [ - "## Comparer\n", - "\n", - "Un programme doit parfois comparer deux valeurs.\n", - "Python connait six types de comparaisons :\n", - "\n", - "- plus petit (`<`),\n", - "- plus petit ou égal (`<=`),\n", - "- égal (`==`),\n", - "- différent (`!=`),\n", - "- plus grand (`>`),\n", - "- plus grand ou égal (`>=`).\n", - "\n", - "Dans des formules mathématiques nous utilisons les symboles ≤, ≥ et ≠. En Python vous devez utiliser deux symboles: `<=`, `>=` et `!=` à la place.\n", - "\n" - ] + "source": "Ma réponse : " }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 1 </h3>Ajoutez des exemples avec les autres 5 comparateurs.\n", - "\n" - ] + "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\">D) retourne True ou False\n</div>\n</details>\n " }, { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "x = 3\n", - "(x < 2) = False\n" - ] - } - ], - "source": [ - "x = 3\n", - "print('x =', x)\n", - "print('(x < 2) =', x < 2)\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", - "L'expression `x == 2`\n", - "\n", - "A) met la valeur 2 dans la variable x\n", - "B) compare deux valeurs\n", - "C) affecte la variable x avec une valeur\n", - "D) retourne True ou False\n", - "```" - ] + "cell_type": "markdown", + "metadata": {}, + "source": "\n\n```{caution}\n!! Il ne faut pas confondre l'opérateur d'affectation (`x = 2`) avec l'opérateur de comparaison (`x == 2`) !!\n```\n\n<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 2 </h3>Que se passe-t-il si vous échangez les deux éléments dans `x == 2` ? \nEt si vous échangez les deux éléments dans `x = 2` ?\n\n" }, { - "cell_type": "raw", - "metadata": {}, - "source": [ - "Ma réponse : " - ] + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": "x = 2 # affectation\nx == 2 # comparaison\n" }, { "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\n", - "</summary> \n", - "\n", - "<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">D) retourne True ou False\n", - "</div>\n", - "</details>\n", - " \n", - "```{caution}\n", - "!! Il ne faut pas confondre l'opérateur d'affectation (`x = 2`) avec l'opérateur de comparaison (`x == 2`) !!\n", - "```\n", - "\n", - "Le résultat d'une comparaison est une valeur booléenne, soit `True` soit `False`.\n", - "\n" - ] + "source": "## II) Conditions (`if`)\n\nAfin d'exécuter du code de façon sélective, on utilise le mot-clé `if`.\n\nNous allons voir que :\n\n- le mot-clé `if` permet une exécution conditionnelle,\n- le mot-clé `if-else` permet de choisir entre deux alternatives,\n- le mot-clé `elif` (else if) permet d'ajouter différentes conditions.\n\n" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 2 </h3>Que se passe-t-il si vous échangez les deux éléments dans `x == 2` ? \n", - "Et si vous échangez les deux éléments dans `x = 2` ?\n", - "\n" - ] + "source": "### Exécution conditionnelle `if`\n\nLa structure `if` ci-dessous permet d'exécuter une action seulement si `condition` est `True`.\n\n``` python\nif condition:\n action\n```\n\nDans notre exemple nous affichons \"Bravo!\" si la valeur entrée est positive.\n" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "x = 2 # affectation\n", - "x == 2 # comparaison\n", - "print(x)\n", - "print(x == 2)\n" - ] + "source": "n = int(input('Entrez un nombre positif: '))\n\nif n > 0:\n print('Bravo !')" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "### Êtes-vous majeur ?\n", - "\n", - "Basé sur votre âge, le programme exécute soit le premier bloc (`if`) soit le deuxième bloc (`else`). Il affiche si vous êtes majeur ou pas.\n", - "\n" - ] + "source": "### Choix binaire `if - else`\n\nLa structure `if - else` ci-dessous permet d'exécuter une **action_1** seulement si une **condition** est vraie et une **action_2** sinon : \n\n``` python\nif condition:\n action_1\nelse:\n action_2\n```\n\nDans l'exemple ci-dessous, on affiche si un nombre entré est positif ou négatif :\n\n" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "age = input('Entrez votre âge: ')\n", - "\n", - "if int(age) < 18:\n", - " print('accès interdit - vous êtes mineur')\n", - "else:\n", - " print('accès OK - vous êtes majeur')\n" - ] + "source": "n = int(input('Entrez un nombre: '))\n\nif n > 0:\n print('positif')\nelse:\n print('négatif')" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "### Le signe d'un nombre\n", - "\n", - "Le mot-clé `elif` est une contraction de **else if** et permet de continuer à tester d'autres conditions.\n", - "Trouvez le signe d'un nombre.\n", - "\n" - ] + "source": "### Choix multiple (`if - elif - else`)\n\nLe mot-clé `elif` est une contraction de **else if** et permet de continuer à tester d'autres conditions : \n\n``` python\nif condition1 :\n action_1\nelif condition2 :\n action_2\nelse:\n action_3\n```\n\nDans l'exemple ci-dessous, on affiche si un nombre entré est positif, négatif ou nul :\n\n" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "n = input('Entrez un nombre: ')\n", - "n = int(n)\n", - "\n", - "if n > 0:\n", - " print('positif')\n", - "elif n < 0:\n", - " print('négatif')\n", - "else:\n", - " print('zéro')\n" - ] + "source": "n = int(input('Entrez un nombre: '))\n\nif n > 0:\n print('positif')\nelif n < 0:\n print('négatif')\nelse:\n print('zéro')\n" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "Sans le mot-clé `elif` nous devrions mettre le bloc `if` à l'intérieur du bloc `else` en indentation.\n", - "Avec multiples conditions, les blocs se décalent de plus en plus et rendent le programme illisible.\n", - "\n" - ] + "source": "Sans le mot-clé `elif` nous devrions mettre le bloc `if` à l'intérieur du bloc `else` en indentation.\nAvec multiples conditions, les blocs se décalent de plus en plus et rendent le programme illisible, comme ci-dessous.\n\n" + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": "# !!! Exemple à éviter !!!!\nn = int(input('Entrez un nombre: '))\n\nif n > 0:\n print('positif')\nelse:\n if n < 0:\n print('négatif')\n else:\n print('zéro')\n" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 3 </h3>Testez le programme avec -2, 0, 3.\n", - "\n" - ] + "source": "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n \n```\nEn Python, `if` est suivi\n\nA) d'un bloc\nB) d'une condition\nC) de parenthèses\nD) d'un deux-points\n```" }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "raw", "metadata": {}, - "outputs": [], - "source": [ - "n = input('Entrez un nombre: ')\n", - "n = int(n)\n", - "\n", - "if n > 0:\n", - " print('positif')\n", - "else:\n", - " if n < 0:\n", - " print('négatif')\n", - " else:\n", - " print('zéro')\n" - ] + "source": "Ma réponse : " }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "## Visualiser la comparaison\n", - "\n", - "Dans l'exemple suivant, nous visualisons le résultat des 6 comparateurs en affichant graphiquement le résultat des 6 comparaisons du type `i < n`. \n", - "\n", - "- La variable `i` va de -9 à 9\n", - "- La variable `n` est marquée en rouge\n", - "- Le résultat `True ` est exprimé avec un grand point, `False` avec un petit\n", - "\n", - "Que fait l'expression `'red' if i == n else 'black'` ?\n", - "\n", - "Elle renvoie `'red'` si `i == n` et `'black'` autrement.\n", - "\n" - ] + "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\">B) d'une condition (Et ensuite de D), un deux-points)\n</div>\n</details>\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>Modifiez la variable `n` et exécutez le code de nouveau.\n", - "\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 3 </h3>Écrivez un petit programme qui demande son âge à l'utilisatrice et affiche si elle est mineure ou majeure.\n\nRappel : la fonction `int` transforme la réponse textuelle du `input` en nombre entier.\n\n" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "from turtle import *\n", - "d = 20 # dimension de base\n", - "n = 2 # valeur de comparaison\n", - "up()\n", - "\n", - "for j in range(7):\n", - " for i in range(-10, 10):\n", - " goto(i*d, 100-j*d)\n", - " color('red' if i == n else 'black')\n", - " if i == -10:\n", - " c = ('i', '< n', '<= n', '== n', '!= n', '>= n', '> n')[j]\n", - " write(c, font=(None, d//2), align='right')\n", - " elif j == 0:\n", - " write(i, font=(None, d//2), align='center')\n", - " else:\n", - " result = (0, i<n, i<=n, i==n, i!=n, i>=n, i>n)[j]\n", - " dot(d if result else d/4)\n", - "\n", - "done()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Une position aléatoire\n", - "\n", - "Dans ce chapitre nous allons prendre des décisions basées sur la position `(x, y)` d'un point.\n", - "Nous avons donc besoin d'un certain nombre de points, pour ensuite prendre des décisions.\n", - "\n" - ] + "source": "age = int(input(\"Bonjour, quel est votre âge ?\"))\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>Les variables `w, h` (width, height) représentent largeur et hauteur de la plage rectangulaire des valeurs aléatoires. \n", - "Modifiez-les vers `280, 180` et exécutez le code de nouveau.\n", - "\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 4 </h3>Écrivez un petit programme qui demande à l'utilisateur·ice s'il faut dessiner un triangle, un cercle ou un carré, puis qui fait le bon dessin.\n\n" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 300, 200\n", - "d, n = 10, 100\n", - "up()\n", - "speed(0)\n", - "\n", - "for i in range(n):\n", - " x, y = randint(-w, w), randint(-h, h)\n", - " goto(x, y)\n", - " dot(d)\n", - "\n", - "done()\n" - ] + "source": "from turtle import *\n\n\n\n\n\ndone()" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "## Exécution conditionnelle\n", - "\n", - "La structure `if` ci-dessous permet d'exécuter une action seulement si `condition` est `True`.\n", - "\n", - "``` python\n", - "if condition:\n", - " action\n", - "```\n", - "\n", - "Dans notre exemple nous affichons un point rouge seulement si x est positif (`x > 0`)\n", - "\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 5 </h3> \n" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 6 </h3>Ajoutez une deuxième condition `if` pour colorier un point en `lime` si `x < -100`.\n", - "\n" - ] + "source": "Définissez une fonction `temperature()` qui prend en paramètre une température entre -20 et 50 et affiche si cette température est :\n* glaciale\n* froide\n* normale\n* chaude\n* bouillante\n\n(à vous de choisir les bornes de chaque catégorie)\n" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 300, 200\n", - "d, n = 10, 100\n", - "up()\n", - "speed(0)\n", - "\n", - "for i in range(n):\n", - " x, y = randint(-w, w), randint(-h, h)\n", - " goto(x, y)\n", - " if x > 100:\n", - " dot(2*d, 'red')\n", - " dot(d)\n", - "\n", - "done()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## La structure `if else`\n", - "\n", - "La structure `if else` ci-dessous permet d'exécuter une **action_1** seulement si une **condition** est vraie et une **action_2** autrement\n", - "\n", - "``` python\n", - "if condition:\n", - " action_1\n", - "else:\n", - " action_2\n", - "```\n", - "\n", - "Dans l'exemple ci-dessous la condition de test est `y > 0`. \n", - "Si cette condition est vraie, le point est colorié en rouge, autrement en bleu.\n", - "\n" - ] + "source": "def temperature(t):\n ...\n \n \n \n \ntemp = int(input(\"Entrez une température entre -20 et 50 : \"))\ntemperature(temp)" }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 300, 200\n", - "d, n = 20, 300\n", - "up()\n", - "speed(0)\n", - "\n", - "for i in range(n):\n", - " x, y = randint(-w, w), randint(-h, h)\n", - " goto(x, y)\n", - " if y > 0:\n", - " dot(d, 'red')\n", - " else:\n", - " dot(d, 'blue')\n", - "\n", - "done()\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 6 </h3> " }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "## L'opération `and`\n", - "\n", - "L'opération logique `and` permet de connecter deux conditions.\n", - "Les deux conditions doivent être vraies pour que l'expression soit vraie.\n", - "\n", - "Pour accélérer le dessin, nous désactivons l'animation avec `tracer(0)`.\n", - "Pour afficher le résultat, nous devons alors appeler la fonction `update()` à la fin.\n", - "\n" - ] + "source": "Définissez une fonction `compare` qui prend en paramètres deux nombres `a` et `b`, puis qui dit lequel est le plus grand :\n- si le premier nombre est plus grand que le deuxième, le programme affichera « Le premier ! »\n- si le deuxième nombre est plus grand que le premier, le programme affichera « Le deuxième ! »\n- s'ils sont égaux, le programme affichera « Ils sont égaux. ».\n\n\nTestez-la avec deux nombres de votre choix." + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": "\n\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>Modifiez le code pour que les points aient une couleur différente dans chaque quadrant.\n", - "\n" - ] + "source": "## Les opérateurs `and`, `or` et `not`\n\nEn plus des comparateurs, les opérateurs `and`, `or` et `not` permettent de manipuler plusieurs conditions : \n* `X and Y` Les deux conditions doivent être vraies pour que l'expression soit vraie.\n* `X or Y` Une des deux conditions doit être vraies pour que l'expression soit vraie.\n* `not X` La condition X doit être fausse pour que l'expression soit vraie.\n\nTestez le code suivant : \n\n" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 280, 180\n", - "d, n = 10, 2000\n", - "tracer(0)\n", - "up()\n", - "\n", - "for i in range(n):\n", - " x, y = randint(-w, w), randint(-h, h)\n", - " goto(x, y)\n", - " if x > 0 and y > 0:\n", - " dot(d, 'red')\n", - " else:\n", - " dot(d, 'blue')\n", - "update()\n", - "\n", - "done()\n" - ] + "source": "nombre = 15\nif nombre > 10 and nombre < 20:\n print(\"Le nombre est entre 10 et 20.\")\n \n\nif nombre == 5 or nombre == 15:\n print(\"Le nombre est soit 15 soit 20.\")\n \nif not nombre > 15:\n print(\"Le nombre n'est pas supérieur à 15.\")" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "## Région en diagonale\n", - "\n" - ] + "source": "<h6 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-warning\" aria-hidden=\"true\"> </i> Note </h6>\nEn python, pour le premier cas : \n\n``` python\nif nombre > 10 and nombre < 20:\n print(\"Le nombre est entre 10 et 20.\")\n```\non peut aussi écrire :\n\n``` python\nif 10 < nombre < 20:\n print(\"Le nombre est entre 10 et 20.\")\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>Modifiez le code pour que les points aient 4 couleurs, divisées par les 2 diagonales.\n", - "\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 7 </h3>\n" }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 280, 180\n", - "d, n = 10, 1000\n", - "tracer(0)\n", - "up()\n", - "\n", - "for i in range(n):\n", - " x, y = randint(-w, w), randint(-h, h)\n", - " goto(x, y)\n", - " if x > y:\n", - " dot(d, 'red')\n", - " else:\n", - " dot(d, 'blue')\n", - "update()\n", - "\n", - "done()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dans un cercle\n", - "\n", - "Un cercle est défi par une distance donnée d'un point. \n", - "Le cercle autour de l'origine avec un rayon r est donné par la formule\n", - "\n", - "$ x^2 + y^2 = r^2 $\n", - "\n", - "Cette formule nous permet de décider si un point aléatoire est à l'intérieur ou à l'extérieur d'un cercle.\n", - "\n" - ] + "source": "Écrire un code qui traduit chacune des situations ci-après. Chaque programme commence par créer une variable pour chaque âge.\n\n**Situation 1 :** Si Camille est plus âgée qu’Antoinette ou que Bernard et si Antoinette est plus jeune que Bernard, on affiche l’âge d’Antoinette, mais si Antoinette a le même âge ou est plus âgée que Bernard, on affiche l’âge de Bernard.\nSinon on affiche l’âge de Camille.\n\n \n" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 280, 180\n", - "d, n = 10, 2000\n", - "tracer(0)\n", - "up()\n", - "\n", - "for i in range(n):\n", - " x, y = randint(-w, w), randint(-h, h)\n", - " goto(x, y)\n", - " if (x**2 + y**2) > 150**2 :\n", - " dot(d, 'red')\n", - " else:\n", - " dot(d, 'blue')\n", - "update()\n", - "\n", - "done()\n" - ] + "source": "" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "La fonction `in_circle(p, q, r)` vérifie si le point `p` se trouve\n", - "à l'intérieur d'un cercle de rayon `r` qui se trouve à la position `q`.\n", - "\n" - ] + "source": "**Situation 2:** Si Bernard et Camille ont le même âge, on affiche l’âge de la plus jeune des trois personnes." + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "trusted": true + }, + "outputs": [], + "source": "" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 9 </h3>Ajoutez un deuxième cercle avec un rayon r=100, colorié en rouge, qui se trouve à la position (100, -50).\n", - "\n" - ] + "source": "## Exercices récapitulatifs" }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 280, 180\n", - "d, n = 10, 2000\n", - "tracer(0)\n", - "up()\n", - "\n", - "def in_circle(p, q, r):\n", - " d = (p[0]-q[0])**2 + (p[1]-q[1])**2\n", - " return d < r**2\n", - "\n", - "for i in range(n):\n", - " p = randint(-w, w), randint(-h, h)\n", - " goto(p)\n", - " if in_circle(p, (-100, 50), 80):\n", - " dot(d, 'lime')\n", - " else:\n", - " dot(d, 'blue')\n", - "update()\n", - "\n", - "done()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Diagramme de Venne\n", - "\n", - "Avec les 3 opérateurs logiques:\n", - "\n", - "- `and`\n", - "- `or`\n", - "- `not` \n", - "\n", - "nous pouvons trouver des expressions pour trouver les points qui se trouvent dans l'intersection (`and`) ou dans l'union (`or`) de deux cercles.\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>Modifiez le code pour que les points appartenant à l'intersection des deux cercles soient dessinés en jaune.\n", - "\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 8 </h3> \n\n<b style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-warning\" aria-hidden=\"true\"> </i> Rappel : L'opérateur modulo (%) calcule le reste de la division entière. En conséquence, x % y vaut 0 quand x est divisible par y. <i class=\"fa fa-warning\" aria-hidden=\"true\"> </i> </b> \n\n\nÉcrivez un petit programme qui demande à l'utilisateur·ice un nombre et indique s'il est pair (divisible par 2) ou pas.\n" }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 280, 180\n", - "d, n = 10, 2000\n", - "tracer(0)\n", - "up()\n", - "r, q, q2 = 120, (-60, 0), (60, 0)\n", - "\n", - "def in_circle(p, q, r):\n", - " d = (p[0]-q[0])**2 + (p[1]-q[1])**2\n", - " return d < r**2\n", - "\n", - "for i in range(n):\n", - " p = randint(-w, w), randint(-h, h)\n", - " goto(p)\n", - " if in_circle(p, q, r) and not in_circle(p, q2, r):\n", - " dot(d, 'lime')\n", - " elif in_circle(p, q2, r):\n", - " dot(d, 'red')\n", - " else:\n", - " dot(d, 'blue')\n", - "update()\n", - "\n", - "done()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Dans un rectangle\n", - "\n", - "Dans des programmes interactifs, on doit souvent déterminer si un clic de la souris (x, y) a eu lieu à l'intérieur d'un bouton, qui est normalement une région rectangulaire.\n", - "\n", - "Pour tester si la valeur $x$ se trouve dans l'intervalle $[x_0, x_1]$ nous devons faire deux comparaisons.\n", - "\n", - "Python permet de remplacer `(x0 < x) and (x < x1)` par l'expression plus compacte `x0 < x < x1`.\n", - "\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 9 </h3>\nCorrigez le code suivant :" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "x0, x1 = 5, 10\n", - "x = 8\n", - "\n", - "if x0 < x < x1:\n", - " print(x, \"est entre\", x0, 'et', x1)\n", - "else:\n", - " print(x, \"n'est entre\", x0, 'et', x1)\n" - ] + "source": "age == 18\nrevenu == 25000\n\nif age >= 18\nif revenu < 25000\nprint(\"Vous êtes éligible à la subvention.\")\nelif revenu < 26000\nprint(\"Vous êtes presque éligible à la subvention, vous gagnez 1'000.- de trop.\")\nelse:\nprint(\"Vous n'êtes pas éligible à cause de vos revenus trop élevés.\")\nelse:\nif revenu < 25000\nprint(\"Vous n'êtes pas éligible à cause de votre âge, mais le seriez si vous étiez majeur·e.\")\nelse:\nprint(\"Vous n'êtes pas éligible à cause de vos revenus trop élevés et de votre âge.\")\n \n" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "La fonction `in_rect(p, x0, x1, y0, y1)` détermine si la position du point `p` est à l'intérieur du rectangle indiqué par les coordonnées `x0, x1, y0, y1`.\n", - "\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 10 </h3>" }, { "cell_type": "markdown", "metadata": {}, - "source": [ - "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 11 </h3>Ajoutez un deuxième rectangle ou les points ont une autre couleur.\n", - "\n" - ] + "source": "Écris une fonction bissextile dont l'argument est une année n, qui dit si cette année est bissextile (c'est-à-dire qu'elle comporte un 29 février).\nUne année est bissextile dans l'un des cas suivants :\n- c'est un multiple de 4 qui n'est pas un multiple de 100,\n- c'est un multiple de 400.\n\nLe programme doit renvoyer « Année bissextile » ou « Année non bissextile » suivant le cas. " }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 280, 180\n", - "d, n = 10, 2000\n", - "tracer(0)\n", - "up()\n", - "\n", - "def in_rect(p, x0, x1, y0, y1):\n", - " return x0 < p[0] < x1 and y0 < p[1] < y1\n", - "\n", - "for i in range(n):\n", - " p = randint(-w, w), randint(-h, h)\n", - " goto(p)\n", - " if in_rect(p, 50, 220, -50, 100):\n", - " dot(d, 'lime')\n", - " else:\n", - " dot(d, 'blue')\n", - "\n", - "update()\n", - "\n", - "done()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## À gauche d'une droite\n", - "\n", - "La fonction `is_left(p, q, q2)` est vraie si le point `p` se trouve à gauche de la droite définie par les deux points (q, q2).\n", - "\n" - ] + "source": "" }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 280, 180\n", - "d, n = 10, 2000\n", - "tracer(0)\n", - "up()\n", - "q, q2 = (-160, -100), (60, 0)\n", - "\n", - "def is_left(p, q, q2):\n", - " return (p[0]-q[0])*(q2[1]-q[1]) - (p[1]-q[1])*(q2[0]-q[0]) < 0\n", - "\n", - "for i in range(n):\n", - " p = randint(-w, w), randint(-h, h)\n", - " goto(p)\n", - " if is_left(p, q, q2):\n", - " dot(d, 'lime')\n", - " else:\n", - " dot(d, 'blue')\n", - "\n", - "for p in (q, q2):\n", - " goto(p)\n", - " dot(3*d, 'red')\n", - "\n", - "update()\n", - "\n", - "done()\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "La fonction `in_poly(p, poly)` est vraie si le point `p` se trouve à l'intérieur d'un polygone convexe dont les points sont dans l'ordre du sens de l'horloge.\n", - "\n" - ] + "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> Exercice 11 - Quizz </h3>\n\nCréez un quiz avec des questions à choix multiple sur un sujet de culture générale, dans le style des quiz sur le site Kahoot.\n\n- Complétez pour avoir 4 questions\n- Ajoutez le calcul du score" }, { "cell_type": "code", "execution_count": null, - "metadata": {}, + "metadata": { + "trusted": true + }, "outputs": [], - "source": [ - "from turtle import *\n", - "from random import *\n", - "\n", - "w, h = 280, 180\n", - "d, n = 10, 2000\n", - "tracer(0)\n", - "up()\n", - "\n", - "poly = ((-160, -100), (100, 100), (60, -100))\n", - "\n", - "def is_left(p, q, q2):\n", - " return (p[0]-q[0])*(q2[1]-q[1]) - (p[1]-q[1])*(q2[0]-q[0]) < 0\n", - "\n", - "def in_poly(p, poly):\n", - " n = len(poly)\n", - " for i in range(n):\n", - " q = poly[i]\n", - " q2 = poly[(i+1)%n]\n", - " if is_left(p, q, q2):\n", - " return False\n", - " return True\n", - "\n", - "for i in range(n):\n", - " p = randint(-w, w), randint(-h, h)\n", - " goto(p)\n", - " if in_poly(p, poly):\n", - " dot(d, 'lime')\n", - " else:\n", - " dot(d, 'blue')\n", - "\n", - "for p in poly:\n", - " goto(p)\n", - " dot(3*d, 'red')\n", - "\n", - "update()\n", - "\n", - "done()" - ] - }, - { - "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", - "\n", - " " - ] + "source": "print('Quiz sur le thème : ....')\n\nscore = 0\n\n# Question 1 \nprint()\nquestion = \"Quel est le nom du cowboy dans Toy Story ?\"\nreponse = 'Woody'\n\nreponse = input(question)\nif reponse == solution:\n ...\nelse:\n ...\n \n \n\n# Question 2\nprint()\n...\n\n\nprint('Votre score est', ...)" + }, + { + "cell_type": "markdown", + "metadata": {}, + "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\n " } ], "metadata": { @@ -897,5 +335,5 @@ } }, "nbformat": 4, - "nbformat_minor": 4 + "nbformat_minor": 2 }