diff --git a/Notebooks/07_Boucle_while.ipynb b/Notebooks/07_Boucle_while.ipynb
index d67decad3d962f00ed7769804c8d51e99578b886..d793bdc64758a0e36b0ad9a1147b2b74c968824a 100644
--- a/Notebooks/07_Boucle_while.ipynb
+++ b/Notebooks/07_Boucle_while.ipynb
@@ -1,279 +1 @@
-{
- "cells": [
-  {
-   "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> &nbsp; Remarque introductive &nbsp;  <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\"  &nbsp; <i class=\"fa fa-folder\" aria-hidden=\"true\"> </i>\n</p> </div>    "
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "# 7 - Boucle `while`\n\nDans ce chapitre, nous découvrons un deuxième type de boucle, la boucle `while`. Elle est souvent utilisée pour attendre quelque chose. Nous allons voir que :\n\n- la boucle `while` répète aussi longtemps qu'une condition est vraie,\n- la fonction `sleep()` permet d'attendre et ralentir le programme,\n- le mot-clé `break` permet de sortir 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> &nbsp; Quizz </h3> \n \n```\nEn Python, while est\n\nA) une fonction\nB) une condition\nC) une boucle\nD) un mot-clé\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\">D) un mot-clé\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> &nbsp; Exemple 1: Compteur trivial</h3>\n\nL'exemple suivant permet d'afficher un compteur allant de 1 à 10. À chaque début\nde boucle, le programme va évaluer la condition `compteur <= maxCompteur` puis exécuter le\nbloc d'instruction si elle vaut `True` et sortir de la boucle si elle vaut `False`."
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "maxCompteur = 10\ncompteur = 1\n\nwhile compteur <= maxCompteur:\n    print(compteur)\n    compteur = compteur + 1"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exemple 2: Compte à rebours</h3>"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "On peut utiliser la boucle `while` pour créer un compteur à rebours.\nPour attendre une seconde, la fonction `sleep()` du module `time` est importée.\nTant que `n` est strictement plus grand que 0, les instructions indentées dans la boucle `while` sont executées."
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "from time import sleep\n\nn = int(input('Entrez un entier: ')) # Rappel: input retourne une chaîne de caractère (str).\n\nwhile n > 0:\n    print(n)\n    sleep(1)  # On attend 1 seconde avant de continuer\n    n = n - 1\n\nprint('boum!!!')\n"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exemple 3: Lister des noms</h3>\n\n\nNous utilisons une boucle `while` pour demander des noms à l'utilisateur-trice.\nOn ne peut pas savoir à l'avance combien de noms il y aura, donc ici nous ne pouvons pas utiliser la boucle `for`.  Nous prenons comme condition de terminaison une réponse avec la chaîne  (`'STOP'`).\n\nEntrez les noms de 3-4 de vos amis."
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "nom = input(\"Entrez un nom: \")\nautre_nom = \"\"\n\nwhile autre_nom != \"STOP\":\n    autre_nom = input(\"Entrez un autre nom (ou 'STOP' pour terminer) : \")\n    if autre_nom != \"STOP\":  # Vérification avant de l'ajouter\n        nom += \", \" + autre_nom\n\nprint(\"Voici la liste des noms :\", nom)"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exemple 4: Faire une somme</h3>\n\nNous utilisons une boucle `while` pour demander des nombres à l'utilisateur-trice.\nOn ne peut pas savoir à l'avance combien de nombres il y aura, et donc nous ne pouvons pas utiliser la boucle `for`. Nous prenons comme condition de terminaison une réponse avec une chaîne vide (`''`) en tapant juste sur entrée (*enter*).\n\nEntrez les frais de vos 3 derniers achats.\n"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "somme = 0\nnombre = input('Entrez un nombre: ')\n\nwhile nombre !='':\n    somme = somme + float(nombre)          # nombre est une chaîne de caractère !\n    nombre = input('Entrez un nombre: ')\n\nprint('somme =', somme)\n"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "\n## **1️⃣ Exercice : Faire une moyenne**\n💡 **Objectif** : Nous utilisons une boucle `while` pour demander des nombres à l'utilisateur.\nOn ne peut pas savoir à l'avance combien de nombres il y aura, et donc nous ne pouvons pas utiliser la boucle `for`.  Nous prenons comme condition de terminaison une réponse avec une chaîne vide (`''`). Compléter le code suivant en remplaçant les ...\n\n"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "somme = 0\nnombre_de_note = 0\nnote = float(input('Entrez une note: '))\n\nwhile note !='':\n    # compléter le code à la place des ...\n    somme = ...\n    nombre_de_note = ...\n    note = input('Entrez un nombre: ')\n\nprint('moyenne =', somme/nombre_de_note)\n"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exemple 5: Décomposer en facteurs premiers</h3>\n\nLe programme suivant réalise la décomposition en facteurs premiers d'un nombre donné par l'utilisateur-trice.\n"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "nombre = int(input('Entrez un entier: '))\ni = 2\n\nwhile i < nombre:\n    if nombre % i == 0:   # % est le reste de la division entière\n        print(i)\n        nombre = nombre // i   # // correspond à la division entière\n    else:\n        i = i + 1\n\nprint(nombre)\n"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exemple 6: En code binaire</h3>\n\nLe programme transforme l'entier en code binaire.\n\n"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "n = int(input('Entrez un entier: '))\n\ncode = ''\nwhile n > 0:\n    if n % 2 == 1:\n        code = '1' + code\n    else:\n        code = '0' + code\n    n = n // 2\n\nprint(code)\n"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exemple 7: Lancer un dé jusqu'à obtenir un 6 🎲</h3>\n\nLancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives. Pour simuler un lancé de dé, nous allons utiliser le module random en python.\n\n`randint(min,max)` est une fonction qui retourne un nombre entier compris entre min et max. Dans notre cas min = 1 et max = 6."
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "from random import *\n\ntentatives = 0\nresultat = 0\n\nwhile resultat != 6:\n    resultat = randint(1, 6)\n    tentatives = tentatives + 1\n    print(\"Tentative:\", tentatives, \":\", resultat)\n\nprint(\"Vous avez obtenu un 6 après\", tentatives, \"essais.\")"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "## Sortir avec `break`\n\nLe mot-clé `break`, seul sur une ligne, permet de sortir d'une boucle.\nSouvent cette méthode est utilisée pour sortir d'une boucle infinie.\n\n"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": "noms = []\n\nwhile True:\n    nom = input('Entrez un nom: ')\n    if nom == '':\n        break\n    noms.append(nom)\n\nprint(noms)"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "---\n\n# 🎯 **Conclusion : Quand utiliser `while` ?**\n\n| Situation | `for` | `while` |\n|-----------|-------|---------|\n| Nombre d'itérations connu à l'avance | ✅ Oui | ❌ Non |\n| Nombre d'itérations inconnu (dépend d'une condition) | ❌ Non | ✅ Oui |\n| Répéter une action jusqu'à un événement spécifique | ❌ Non | ✅ Oui |\n| Interaction utilisateur (ex: attendre une entrée correcte) | ❌ Non | ✅ Oui |\n| Boucles infinies avec condition d’arrêt | ❌ Risqué | ✅ Plus adapté |\n\n## 📌 **À retenir**  \n- **Utilise `for`** lorsque **le nombre d'itérations est fixé** (ex: parcourir une liste, boucle de comptage).\n- **Utilise `while`** lorsque **la boucle dépend d’une condition** qui peut varier (ex: entrée utilisateur, événement aléatoire, suivi d'une valeur dynamique).\n- **Attention aux boucles infinies !** Toujours s'assurer que la condition de sortie est bien définie.\n\n🚀 **Exercez-vous** en adaptant les exercices et en créant vos propres scénarios d'utilisation de `while` ! \n\n---\n"
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "## **2️⃣ Série d'exercices simples**\n\n💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 50."
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "💡 **Objectif** : Écrire un programme qui affiche les nombres pairs de 0 à 50."
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 20, dans l'ordre décroissant."
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "💡 **Objectif** : Afficher le menu (ci-dessous) d'un programme jusqu'à ce que l'utilisateur-trice saisisse \"q\" pour quitter.\n```Python\n- Menu -\n1. Option une\n2. Option deux\nq. Quitter\nChoisissez une option :"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "## **3️⃣ Exercice : Saisie sécurisée**\n💡 **Objectif** : Demander un nombre entre 1 et 10 jusqu'à obtenir une entrée valide. Tant que le nombre saisi n'est pas compris entre 1 et 10, on repose la question (input)."
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {
-    "trusted": true
-   },
-   "source": "## **4️⃣ Exercice : Lancer de dé jusqu'à obtenir un 6 🎲**  \n💡 **Objectif** : Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives.\n"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": "## **5️⃣ Exercice : Le trait qui tourne**  \n💡 **Objectif** : En répétant plusieurs fois je dessine un trait et je tourne d'un angle, je dessine une figure.\n\nSuivre les indications suivantes:\n- le stylo de couleur bleu avance sur un segment droit de longueur 5;\n- puis tourne de 70° vers la droite. \n- Ensuite, la longueur du segment est incrémentée (augmentée de 0.5).\n- Répéter ces étapes tant que la longueur du segment est inférieure à 150.\n\nTester ensuite le programme avec une rotation de 89° au lieu de 70°.\n\nDessinez une usine avec un toit en dents de scie.\n![Image de tourbillon](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap7/tourbillon.png)"
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {
-    "trusted": false
-   },
-   "outputs": [],
-   "source": ""
-  },
-  {
-   "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![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)\n\n    "
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "language": "python",
-   "name": "python3"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}
+{"cells":[{"metadata":{},"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> &nbsp; Remarque introductive &nbsp;  <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\"  &nbsp; <i class=\"fa fa-folder\" aria-hidden=\"true\"> </i>\n</p> </div>    "},{"metadata":{},"cell_type":"markdown","source":"# 7 - Boucle `while`\n\nDans ce chapitre, nous découvrons un deuxième type de boucle, la boucle `while`. Elle est souvent utilisée pour attendre quelque chose. Nous allons voir que :\n\n- la boucle `while` répète aussi longtemps qu'une condition est vraie,\n- le mot-clé `break` permet de sortir 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> &nbsp; Quizz </h3> \n \n```\nEn Python, while permet de réaliser :\n\nA) une fonction\nB) une condition\nC) une boucle\nD) aucune des réponses précédentes\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\">C) une boucle\n</div>\n</details>\n                \n"},{"metadata":{},"cell_type":"markdown","source":"### Exemple 1 :  Compteur trivial\n\nL'exemple suivant permet d'afficher un compteur allant de 1 à 10. À chaque début\nde boucle, le programme va évaluer la condition `compteur <= 10` puis exécuter le\nbloc d'instruction si elle vaut `True` et sortir de la boucle si elle vaut `False`."},{"metadata":{"trusted":false},"cell_type":"code","source":"compteur = 1\n\nwhile compteur <= 10:\n    print(compteur)\n    compteur = compteur + 1","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> &nbsp; Exercice 1: Compteur </h3> \n\n💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 50."},{"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> &nbsp; Exercice 2: Compteur pair </h3> \n\n💡 **Objectif** : Écrire un programme qui affiche les nombres pairs de 0 à 50."},{"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> &nbsp; Exercice 3: Compteur décroissant </h3> \n\n💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 20, dans l'ordre décroissant."},{"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> &nbsp; Exercice 4: Menu répétitif </h3> \n\n💡 **Objectif** : Afficher le menu (ci-dessous) d'un programme jusqu'à ce que l'utilisateur-trice saisisse \"q\" pour quitter.\n\n```Python\n- Menu -\n1. Salade mêlée\n2. Tartiflette\nq. Quitter\nChoisissez une option :\n```"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 > Exemple 2: Faire une somme</h3>\n\nNous utilisons une boucle `while` pour demander des nombres à l'utilisateur-trice.\nOn ne peut pas savoir à l'avance combien de nombres il y aura, et donc nous ne pouvons pas utiliser la boucle `for`. Nous prenons comme condition de terminaison une réponse avec le nombre 0.\n\nEntrez les frais de vos 3 derniers achats.\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"somme = 0\nnombre = float(input('Entrez un nombre: '))\n\nwhile nombre != 0:\n    somme = somme + nombre          \n    nombre = float(input('Entrez un nombre: '))\n\nprint('somme =', somme)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"\n<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 5: Faire une moyenne</h3> \n\n**Objectif** : Sur l'exemple du code précédent. Compléter le code suivant en remplaçant les ... afin de calculer une moyenne.\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"somme = 0\nnombre_de_note = 0\nnote = float(input('Entrez une note: '))\n\nwhile note != 0:\n    # compléter le code à la place des ...\n    somme = ...\n    nombre_de_note = ...\n    note = float(input('Entrez un nombre: ')\n\nprint('moyenne =', somme/nombre_de_note)\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> &nbsp; Exercice 6: Saisie sécurisée </h3> \n\n💡 **Objectif** : Demander un nombre entre 1 et 10 jusqu'à obtenir une entrée valide. Tant que le nombre saisi n'est pas compris entre 1 et 10, on repose la question (input)."},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"---\n\n# 🎯 **Conclusion : Quand utiliser `while` ?**\n\n| Situation | `for` | `while` |\n|-----------|-------|---------|\n| Nombre d'itérations connu à l'avance | ✅ Oui | ❌ Non |\n| Nombre d'itérations inconnu (dépend d'une condition) | ❌ Non | ✅ Oui |\n| Répéter une action jusqu'à un événement spécifique | ❌ Non | ✅ Oui |\n| Interaction utilisateur (ex: attendre une entrée correcte) | ❌ Non | ✅ Oui |\n| Boucles infinies avec condition d’arrêt | ❌ Risqué | ✅ Plus adapté |\n\n## 📌 **À retenir**  \n- **Utilise `for`** lorsque **le nombre d'itérations est fixé** (ex: parcourir une liste, boucle de comptage).\n- **Utilise `while`** lorsque **la boucle dépend d’une condition** qui peut varier (ex: entrée utilisateur, événement aléatoire, suivi d'une valeur dynamique).\n- **Attention aux boucles infinies !** Toujours s'assurer que la condition de sortie est bien définie.\n\n🚀 **Exercez-vous** en adaptant les exercices et en créant vos propres scénarios d'utilisation de `while` ! \n\n---\n"},{"metadata":{},"cell_type":"markdown","source":"## Pour aller plus loin..."},{"metadata":{},"cell_type":"markdown","source":"<h3> &nbsp; Exemple 3: Décomposer en facteurs premiers</h3>\n\nLe programme suivant réalise la décomposition en facteurs premiers d'un nombre donné par l'utilisateur-trice.\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"nombre = int(input('Entrez un entier: '))\ni = 2\n\nwhile i < nombre:\n    if nombre % i == 0:   # % est le reste de la division entière\n        print(i)\n        nombre = nombre // i   # // correspond à la division entière\n    else:\n        i = i + 1\n\nprint(nombre)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 > &nbsp; Exemple 4: En code binaire</h3>\n\nLe programme transforme l'entier en code binaire.\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"n = int(input('Entrez un entier: '))\n\ncode = ''\nwhile n > 0:\n    if n % 2 == 1:\n        code = '1' + code\n    else:\n        code = '0' + code\n    n = n // 2\n\nprint(code)\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3 > &nbsp; Exemple 5: Lancer un dé jusqu'à obtenir un 6 🎲</h3>\n\nLancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives. Pour simuler un lancé de dé, nous allons utiliser le module random en python.\n\n`randint(min,max)` est une fonction qui retourne un nombre entier compris entre min et max. Dans notre cas min = 1 et max = 6."},{"metadata":{"trusted":false},"cell_type":"code","source":"from random import *\n\ntentatives = 0\nresultat = 0\n\nwhile resultat != 6:\n    resultat = randint(1, 6)\n    tentatives = tentatives + 1\n    print(\"Tentative:\", tentatives, \":\", resultat)\n\nprint(\"Vous avez obtenu un 6 après\", tentatives, \"essais.\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"<h3>Exemple 6: Compte à rebours</h3>"},{"metadata":{},"cell_type":"markdown","source":"On peut utiliser la boucle `while` pour créer un compteur à rebours.\nPour attendre une seconde, la fonction `sleep()` du module `time` est importée.\nTant que `n` est strictement plus grand que 0, les instructions indentées dans la boucle `while` sont executées."},{"metadata":{"trusted":false},"cell_type":"code","source":"from time import sleep\n\nn = int(input('Entrez un entier: ')) # Rappel: input retourne une chaîne de caractère (str).\n\nwhile n > 0:\n    print(n)\n    sleep(1)  # On attend 1 seconde avant de continuer\n    n = n - 1\n\nprint('boum!!!')\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Sortir avec `break`\n\nLe mot-clé `break`, seul sur une ligne, permet de sortir d'une boucle.\nSouvent cette méthode est utilisée pour sortir d'une boucle infinie.\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"noms = []\n\nwhile True:\n    nom = input('Entrez un nom: ')\n    if nom == '':\n        break\n    noms.append(nom)\n\nprint(noms)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 7:  Lancer de dé jusqu'à obtenir un 6 🎲 </h3> \n\n💡 **Objectif** : Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives.\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> &nbsp; Exercice 8:    Le trait qui tourne  </h3> \n\n💡 **Objectif** : En répétant plusieurs fois je dessine un trait et je tourne d'un angle, je dessine une figure.\n\nSuivre les indications suivantes:\n- le stylo de couleur bleu avance sur un segment droit de longueur 5;\n- puis tourne de 70° vers la droite. \n- Ensuite, la longueur du segment est incrémentée (augmentée de 0.5).\n- Répéter ces étapes tant que la longueur du segment est inférieure à 150.\n\nTester ensuite le programme avec une rotation de 89° au lieu de 70°.\n\nDessinez une usine avec un toit en dents de scie.\n![Image de tourbillon](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap7/tourbillon.png)"},{"metadata":{"trusted":false},"cell_type":"code","source":"","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![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)\n\n    "}],"metadata":{"kernelspec":{"display_name":"Python 3 (ipykernel)","language":"python","name":"python3"}},"nbformat":4,"nbformat_minor":2}
\ No newline at end of file