"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": "# 6 - 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": "## 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": "markdown",
"metadata": {},
"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": false
},
"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": "<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n \nL'expression `x == 2` : \n\n A) <input type=\"checkbox\" > met la valeur 2 dans la variable x\n \n B) <input type=\"checkbox\" > compare deux valeurs\n \n C) <input type=\"checkbox\" > affecte la variable x avec une valeur\n \n D) <input type=\"checkbox\" > retourne True ou False"
"source": "!!! warning \nIl ne faut pas confondre l'opérateur d'affectation (`x = 2`) avec l'opérateur de comparaison (`x == 2`)\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"
"source": "#### Ctrl+enter pour continuer ..........."
},
{
"cell_type": "markdown",
"metadata": {},
"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": "### 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": {
"trusted": false
},
"outputs": [],
"source": "n = int(input('Entrez un nombre positif: '))\n\nif n > 0:\n print('Bravo !')"
},
{
"cell_type": "markdown",
"metadata": {},
"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": {
"trusted": false
},
"outputs": [],
"source": "n = int(input('Entrez un nombre: '))\n\nif n > 0:\n print('positif')\nelse:\n print('négatif')"
},
{
"cell_type": "markdown",
"metadata": {},
"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": {
"trusted": false
},
"outputs": [],
"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.\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": false
},
"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: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": "raw",
"metadata": {},
"source": "Ma 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\"> \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 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": {
"trusted": false
},
"outputs": [],
"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 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"
"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": {
"trusted": false
},
"outputs": [],
"source": "def temperature(t):\n ...\n \n \n \n \ntemp = int(input(\"Entrez une température entre -20 et 50 : \"))\ntemperature(temp)"
"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": false
},
"outputs": [],
"source": "\n\n\n"
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"breakpoint"
]
},
"source": "#### Ctrl+enter pour continuer ..........."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## III) 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": {
"trusted": false
},
"outputs": [],
"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": "<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```"
"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": {
"trusted": false
},
"outputs": [],
"source": ""
},
{
"cell_type": "markdown",
"metadata": {},
"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": false
},
"outputs": [],
"source": ""
},
{
"cell_type": "markdown",
"metadata": {
"tags": [
"breakpoint"
]
},
"source": "#### Ctrl+enter pour continuer ..........."
},
{
"cell_type": "markdown",
"metadata": {},
"source": "## Exercices récapitulatifs"
},
{
"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<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"
"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"
"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 afficher « Année bissextile » ou « Année non bissextile » suivant le cas. "
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"trusted": false
},
"outputs": [],
"source": ""
},
{
"cell_type": "markdown",
"metadata": {},
"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": {
"trusted": false
},
"outputs": [],
"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 ?\"\nsolution = '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": {
"celltoolbar": "Tags",
"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.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{"cells":[{"metadata":{"editable":false,"deletable":false},"cell_type":"markdown","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> "},{"metadata":{"editable":false,"deletable":false},"cell_type":"markdown","source":"# 6 - 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"},{"metadata":{"editable":false,"deletable":false},"cell_type":"markdown","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` (vrai) soit `False` (faux).\n\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>Testez les lignes ci-dessous et ajoutez des exemples avec les autres 5 comparateurs.\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"# Variable x\nx = 3\nprint('x =', x)\n\n# 6 exemples de comparaisons\nprint('(x < 2) =', x < 2)\n\n\n\n\n","execution_count":null,"outputs":[]},{"metadata":{"editable":false,"deletable":false},"cell_type":"markdown","source":"<h3 style=\"color:chocolate;background-color:papayawhip;\" > <i class=\"fa fa-question\" aria-hidden=\"true\"> </i> Quizz </h3> \n \nL'expression `x == 2` : \n\n A) <input type=\"checkbox\" > met la valeur 2 dans la variable x\n \n B) <input type=\"checkbox\" > compare deux valeurs\n \n C) <input type=\"checkbox\" > affecte la variable x avec une valeur\n \n D) <input type=\"checkbox\" > retourne True ou False"},{"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\">D) retourne True ou False\n</div>\n</details>\n "},{"metadata":{},"cell_type":"markdown","source":"!!! warning \nIl ne faut pas confondre l'opérateur d'affectation (`x = 2`) avec l'opérateur de comparaison (`x == 2`)\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"},{"metadata":{"trusted":false},"cell_type":"code","source":"x = 2 # affectation\nx == 2 # comparaison\n","execution_count":null,"outputs":[]},{"metadata":{"tags":["breakpoint"]},"cell_type":"markdown","source":"#### Ctrl+enter pour continuer ..........."},{"metadata":{},"cell_type":"markdown","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"},{"metadata":{},"cell_type":"markdown","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"},{"metadata":{"trusted":false},"cell_type":"code","source":"n = int(input('Entrez un nombre positif: '))\n\nif n > 0:\n print('Bravo !')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","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"},{"metadata":{"trusted":false},"cell_type":"code","source":"n = int(input('Entrez un nombre: '))\n\nif n > 0:\n print('positif')\nelse:\n print('négatif')","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","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"},{"metadata":{"trusted":false},"cell_type":"code","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","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","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"},{"metadata":{"trusted":false},"cell_type":"code","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","execution_count":null,"outputs":[]},{"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```\nEn Python, `if` est suivi\n\nA) d'un bloc\nB) d'une condition\nC) de parenthèses\nD) d'un deux-points\n```"},{"metadata":{},"cell_type":"raw","source":"Ma réponse : "},{"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\">B) d'une condition (Et ensuite de D), un deux-points)\n</div>\n</details>\n \n"},{"metadata":{},"cell_type":"markdown","source":"## 🚦 Attention aux branchements conditionnels ! 🚦\n\nLorsqu'on utilise une structure conditionnelle avec `if`, `elif`, `else`, **le programme sort du bloc dès qu'il trouve une condition vraie et que les instructions sous la condition sont exécutée**. C'est comme un **aiguillage de train** : \n\n- Le train (le programme) avance sur la voie principale (le `if`).\n- **Si** l'aiguillage (la condition `if`) est activé (vrai), le train dévie immédiatement sur cette voie et **ne teste pas les autres aiguillages** (`elif`, `else`).\n- **Sinon**, il continue tout droit vers la prochaine condition `elif`, puis éventuellement jusqu'au `else` s'il n'a trouvé aucun aiguillage actif.\n\n### 🚩 Exemple pour bien comprendre :\n\n```python\nx = 10\n\nif x > 5:\n print(\"Condition 1 : x est plus grand que 5\")\nelif x > 3:\n print(\"Condition 2 : x est plus grand que 3\")\nelse:\n print(\"Condition 3 : aucune des conditions précédentes n'est vraie\")\n\n"},{"metadata":{},"cell_type":"markdown","source":"### ✅ Ce qui se passe :\n- `x = 10` → La première condition `x > 5` est **vraie**, donc le message de la **Condition 1** s'affiche.\n- **Les autres conditions (`elif` et `else`) ne sont pas vérifiées du tout.**\n- Ensuite, le programme **poursuit son exécution après le bloc `if - elif - else`**, en continuant avec les instructions suivantes.\n\n### ⚠️ Piège à éviter :\nNe pensez pas que le programme va **tester toutes les conditions** à l'intérieur du bloc. **Dès qu'une condition est vraie, il exécute les instructions associées puis sort du bloc conditionnel**, sans vérifier les autres conditions.\n\n### 🎯 Astuce :\nSi vous avez besoin de **tester plusieurs conditions indépendamment**, utilisez plusieurs `if` séparés au lieu de `elif` :"},{"metadata":{"trusted":true},"cell_type":"code","source":"x = 10\nif x > 5:\n print(\"x est plus grand que 5\")\n\nif x > 3:\n print(\"x est aussi plus grand que 3\")","execution_count":1,"outputs":[{"output_type":"stream","text":"x est plus grand que 5\nx est aussi plus grand que 3\n","name":"stdout"}]},{"metadata":{},"cell_type":"markdown","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"},{"metadata":{"trusted":false},"cell_type":"code","source":"age = int(input(\"Bonjour, quel est votre âge ?\"))\n\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 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"},{"metadata":{"trusted":false},"cell_type":"code","source":"from turtle import *\n\n\n\n\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 5 </h3> \n"},{"metadata":{},"cell_type":"markdown","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"},{"metadata":{"trusted":false},"cell_type":"code","source":"def temperature(t):\n ...\n \n \n \n \ntemp = int(input(\"Entrez une température entre -20 et 50 : \"))\ntemperature(temp)","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 6 </h3> "},{"metadata":{},"cell_type":"markdown","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."},{"metadata":{"trusted":false},"cell_type":"code","source":"\n\n\n","execution_count":null,"outputs":[]},{"metadata":{"tags":["breakpoint"]},"cell_type":"markdown","source":"#### Ctrl+enter pour continuer ..........."},{"metadata":{},"cell_type":"markdown","source":"## III) 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"},{"metadata":{"trusted":false},"cell_type":"code","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.\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","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```"},{"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"},{"metadata":{},"cell_type":"markdown","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"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"**Situation 2:** Si Bernard et Camille ont le même âge, on affiche l’âge de la plus jeune des trois personnes."},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"tags":["breakpoint"]},"cell_type":"markdown","source":"#### Ctrl+enter pour continuer ..........."},{"metadata":{},"cell_type":"markdown","source":"## Exercices récapitulatifs"},{"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\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"},{"metadata":{"trusted":false},"cell_type":"code","source":"","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>\nCorrigez le code suivant :"},{"metadata":{"trusted":false},"cell_type":"code","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","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 10 </h3>"},{"metadata":{},"cell_type":"markdown","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 afficher « Année bissextile » ou « Année non bissextile » suivant le cas. "},{"metadata":{"trusted":false},"cell_type":"code","source":"","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 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"},{"metadata":{"trusted":false},"cell_type":"code","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 ?\"\nsolution = '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', ...)","execution_count":null,"outputs":[]},{"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\n "}],"metadata":{"celltoolbar":"Tags","kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":2}
<p> Ce fichier est fait pour être lu sur le site <ahref="https://notebook.basthon.fr/"><imgsrc='https://notebook.basthon.fr/assets/efede5218c9087496f16.png'style="border: 0; display:inline; margin: 0 5px; height:30px"alt="Basthon"/></a>. <br>
Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>
Veuillez cliquez sur <ahref="https://notebook.basthon.fr/">ce lien</a> et y charger ce fichier à l'aide du bouton "Ouvrir" <iclass="fa fa-folder"aria-hidden="true"></i>
</p></div>
%% Cell type:markdown id: tags:
# 6 - Les Conditions
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.
%% Cell type:markdown id: tags:
## I) Comparaisons
Un programme doit parfois comparer deux valeurs.
Python connait six types de comparaisons :
- plus petit (`<`),
- plus petit ou égal (`<=`),
- égal (`==`),
- différent (`!=`),
- plus grand (`>`),
- plus grand ou égal (`>=`).
Dans des formules mathématiques nous utilisons les symboles ≤, ≥ et ≠. En Python vous devez utiliser deux symboles: `<=`, `>=` et `!=` à la place.
Le résultat d'une comparaison est une valeur **booléenne**, soit `True` soit `False`.
Le résultat d'une comparaison est une valeur **booléenne**, soit `True`(vrai) soit `False` (faux).
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exercice 1 </h3>Testez les lignes ci-dessous et ajoutez des exemples avec les autres 5 comparateurs.
Il ne faut pas confondre l'opérateur d'affectation (`x = 2`) avec l'opérateur de comparaison (`x == 2`)
!!!
<h3style="color:teal;background-color:azure;"><iclass="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` ?
Et si vous échangez les deux éléments dans `x = 2` ?
%% Cell type:code id: tags:
``` python
x=2# affectation
x==2# comparaison
```
%% Cell type:markdown id: tags:breakpoint
#### Ctrl+enter pour continuer ...........
%% Cell type:markdown id: tags:
## II) Conditions (`if`)
Afin d'exécuter du code de façon sélective, on utilise le mot-clé `if`.
Nous allons voir que :
- le mot-clé `if` permet une exécution conditionnelle,
- le mot-clé `if-else` permet de choisir entre deux alternatives,
- le mot-clé `elif` (else if) permet d'ajouter différentes conditions.
%% Cell type:markdown id: tags:
### Exécution conditionnelle `if`
La structure `if` ci-dessous permet d'exécuter une action seulement si `condition` est `True`.
``` python
ifcondition:
action
```
Dans notre exemple nous affichons "Bravo!" si la valeur entrée est positive.
%% Cell type:code id: tags:
``` python
n=int(input('Entrez un nombre positif: '))
ifn>0:
print('Bravo !')
```
%% Cell type:markdown id: tags:
### Choix binaire `if - else`
La structure `if - else` ci-dessous permet d'exécuter une **action_1** seulement si une **condition** est vraie et une **action_2** sinon :
``` python
ifcondition:
action_1
else:
action_2
```
Dans l'exemple ci-dessous, on affiche si un nombre entré est positif ou négatif :
%% Cell type:code id: tags:
``` python
n=int(input('Entrez un nombre: '))
ifn>0:
print('positif')
else:
print('négatif')
```
%% Cell type:markdown id: tags:
### Choix multiple (`if - elif - else`)
Le mot-clé `elif` est une contraction de **else if** et permet de continuer à tester d'autres conditions :
``` python
ifcondition1:
action_1
elifcondition2:
action_2
else:
action_3
```
Dans l'exemple ci-dessous, on affiche si un nombre entré est positif, négatif ou nul :
%% Cell type:code id: tags:
``` python
n=int(input('Entrez un nombre: '))
ifn>0:
print('positif')
elifn<0:
print('négatif')
else:
print('zéro')
```
%% Cell type:markdown id: tags:
Sans le mot-clé `elif` nous devrions mettre le bloc `if` à l'intérieur du bloc `else` en indentation.
Avec multiples conditions, les blocs se décalent de plus en plus et rendent le programme illisible, comme ci-dessous.
<divstyle="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)
</div>
</details>
%% Cell type:markdown id: tags:
## 🚦 Attention aux branchements conditionnels ! 🚦
Lorsqu'on utilise une structure conditionnelle avec `if`, `elif`, `else`, **le programme sort du bloc dès qu'il trouve une condition vraie et que les instructions sous la condition sont exécutée**. C'est comme un **aiguillage de train** :
- Le train (le programme) avance sur la voie principale (le `if`).
-**Si** l'aiguillage (la condition `if`) est activé (vrai), le train dévie immédiatement sur cette voie et **ne teste pas les autres aiguillages** (`elif`, `else`).
-**Sinon**, il continue tout droit vers la prochaine condition `elif`, puis éventuellement jusqu'au `else` s'il n'a trouvé aucun aiguillage actif.
### 🚩 Exemple pour bien comprendre :
```python
x=10
ifx>5:
print("Condition 1 : x est plus grand que 5")
elifx>3:
print("Condition 2 : x est plus grand que 3")
else:
print("Condition 3 : aucune des conditions précédentes n'est vraie")
- **Les autres conditions (`elif` et `else`) ne sont pas vérifiées du tout.**
- Ensuite, le programme **poursuit son exécution après le bloc `if - elif - else`**, en continuant avec les instructions suivantes.
### ⚠️ Piège à éviter :
Ne pensez pas que le programme va **tester toutes les conditions** à l'intérieurdubloc.**Dèsqu'une condition est vraie, il exécute les instructions associées puis sort du bloc conditionnel**, sans vérifier les autres conditions.
### 🎯 Astuce :
Si vous avez besoin de **tester plusieurs conditions indépendamment**, utilisez plusieurs `if` séparés au lieu de `elif` :
%% Cell type:code id: tags:
``` python
x = 10
if x > 5:
print("x est plus grand que 5")
if x > 3:
print("x est aussi plus grand que 3")
```
%% Output
x est plus grand que 5
x est aussi plus grand que 3
%% Cell type:markdown id: tags:
<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.
Rappel : la fonction `int` transforme la réponse textuelle du `input` en nombre entier.
%% Cell type:code id: tags:
``` python
age = int(input("Bonjour, quel est votre âge ?"))
```
%% Cell type:markdown id: tags:
<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.
Écrire un code qui traduit chacune des situations ci-après. Chaque programme commence par créer une variable pour chaque âge.
**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.
Sinon on affiche l’âge de Camille.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
**Situation 2:** Si Bernard et Camille ont le même âge, on affiche l’âge de la plus jeune des trois personnes.
<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>
Écrivez un petit programme qui demande à l'utilisateur·ice un nombre et indique s'il est pair (divisible par 2) ou pas.
Cré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.
- Complétez pour avoir 4 questions
- Ajoutez le calcul du score
%% Cell type:code id: tags:
``` python
print('Quiz sur le thème : ....')
score = 0
# Question 1
print()
question = "Quel est le nom du cowboy dans Toy Story ?"
solution = 'Woody'
reponse = input(question)
if reponse == solution:
...
else:
...
# Question 2
print()
...
print('Votre score est', ...)
```
%% Cell type:markdown id: tags:
---
#### Remarque générale
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)