From b297368fc60e3487123a9e31bd2fb4034b485361 Mon Sep 17 00:00:00 2001
From: "mathieu.schiess@edu.ge.ch" <mathieu.schiess@posteo.ch>
Date: Thu, 27 Mar 2025 02:16:54 +0100
Subject: [PATCH] =?UTF-8?q?compl=C3=A9ment=20et=20s=C3=A9parations=20du=20?=
 =?UTF-8?q?NB=20sur=20les=20boucle=20while?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 Notebooks/07_Boucle_while_partie1.ipynb |   1 +
 Notebooks/07_Boucle_while_partie2.ipynb |   1 +
 Notebooks/imgs_chap7/while-loop.png     | Bin 0 -> 24745 bytes
 3 files changed, 2 insertions(+)
 create mode 100644 Notebooks/07_Boucle_while_partie1.ipynb
 create mode 100644 Notebooks/07_Boucle_while_partie2.ipynb
 create mode 100644 Notebooks/imgs_chap7/while-loop.png

diff --git a/Notebooks/07_Boucle_while_partie1.ipynb b/Notebooks/07_Boucle_while_partie1.ipynb
new file mode 100644
index 0000000..b61285e
--- /dev/null
+++ b/Notebooks/07_Boucle_while_partie1.ipynb
@@ -0,0 +1 @@
+{"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## Boucles « tant que »\nNous avons déjà rencontré d'une part la structure de la boucle `for`, qui permet d'effectuer un nombre prédéfini d'itérations d'un bloc d'instructions, et d'autre part le branchement conditionnel `if`, qui permet d'exécuter ou non un bloc d'instructions en fonction d'un test effectué sur le moment.\n\nLes boucles « tant que », ou boucle `while`, combinent ces deux principes d'une nouvelle manière en conditionnant la poursuite des itérations à un test effectué préalablement à chaque tour de boucle."},{"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":"## Boucles « tant que » en  Python\n\nLa syntaxe de la boucle while est :\n\n![Sytaxe d'une boucle while](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap7/while-loop.png)\noù `condition` a pour valeur `True` ou `False`.\n\n\n## Lien avec les boucle `for`\n\nIl est toujours possible de remplacer une boucle `for` par une boucle `while` comme ceci est illustré dans l'exemple suivant.\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":true},"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":"Avec une boucle `for`, on pourrait réécrire le programme comme "},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"compteur = 1\nfor _ in range(10):\n    print(compteur)\n    compteur = compteur + 1","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Ou plus simplement en utilisant l'indice"},{"metadata":{"trusted":true,"scrolled":true},"cell_type":"code","source":"for i in range(10):\n    print(i+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Écrire un programme avec une boucle `while` qui affiche les nombres de 0 à 50."},{"metadata":{"trusted":true},"cell_type":"code","source":"# votre programme\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 2: Compteur pair </h3> \n\nTester ci-dessous le programme suivant:\n```python\nx = 0\nfor _ in range(26):\n    print(x)\n    x = x + 2\n```\nPuis réécrire ce programme en remplaçant la boucle `for` par une boucle `while`."},{"metadata":{"trusted":true},"cell_type":"code","source":"# votre programme\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 3: Compteur décroissant </h3> \n\nÉcrire un programme qui affiche une compte à rebour de 20 à 0"},{"metadata":{"trusted":true},"cell_type":"code","source":"# votre programme\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Quand utiliser une boucle `while`\n\n!!! info Utilisation\n\nBien qu'il est possible d'utiliser une boucle `while` à la place d'une boucle `for`, il est recommendé d'utiliser systématiquement la boucle `for` lorsqu'elle est suffisante et de limiter l'usage de la boucle `while` aux cas dans lesquels on ne connait pas à l'avance le nombre d'itérations ou les valeurs de la variable de la boucle.\n\nLa boucle while est typiquement utilisée pour traiter des problèmes tels que :\n\n👉 Faire quelque chose tant qu'une condition est vraie\n!!!"},{"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":true},"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 4: Faire une moyenne</h3> \n\n1. En utilisant l'exemple du programme précédent, compléter le programme suivant en remplaçant les ... afin d'avoir un programme qui permet de calculer des moyennes.\n\n2. Utiliser le programme pour calculer votre moyenne générale au premier semestre."},{"metadata":{"trusted":true},"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":"raw","source":"Votre  moyenne générale au premier semestre est :\n    Réponse : "},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 5: Les interêts </h3> \n\nOn place un capital de 500CHF sur un compte rémunéré à 3% par an. \n\nLe programme ci-dessous a pour but de calculer le nombre d'années au bout desquelles le capital\nsera doublé (plus grand que 1000CHF).\n\n```Python\nS = 500\nannee = 0\nwhile S < 1000 :\n    S = S + (3/100) * S\nannee = annee + 1\n\nprint(\"Le capital sera doublé après \",annee, \" ans\")\n```\nLe problème est que le programme contient une erreur !\n\n1. Corriger le programme afin qu’il atteigne le but espéré, puis le tester."},{"metadata":{"trusted":true},"cell_type":"code","source":"# version à corriger du programme\nS = 500\nannee = 0\nwhile S < 1000 :\n    S = S + (3/100) * S\nannee = annee + 1\n\nprint(\"Le capital sera doublé après \",annee, \" ans\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"Après combien d'année le capital aura doublé?\n    Réponse: "},{"metadata":{},"cell_type":"markdown","source":"2. Modifier le programme précédent de telle sorte que le capital et le taux de rémunération soient saisis en entrée (instruction `input`). Tester le programme pour savoir au bout de combien d'année un capital de 5 CHF aura doublé si il est rémunéré à 4% par an."},{"metadata":{"trusted":true},"cell_type":"code","source":"# version du programme avec des input\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"Après combien d'année un capital de 5 CHF rémunéré à 4% aura doublé?\n    Réponse: "},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Les pièges\n\n### Piège 1: oublier d'initialiser les variables présenta dans la condition du `while`\n\nOn veut un programme qui demande un mot de passe qui reste bloqué tant que le bon mot de passe n'est par fourni. On serait tenter d'écrire"},{"metadata":{"trusted":true},"cell_type":"code","source":"while mot_de_passe != \"123456\" :\n    mot_de_passe = input(\"Entrez le mot de passe : \")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Le programme génère une erreur car pour tester la condition `mot_de_passe != \"123456\"` il faut en premier attribuer une valeur à la variable `mot_de_passe` comme cela est fait dans le programme suivant:"},{"metadata":{"trusted":true},"cell_type":"code","source":"mot_de_passe = \"\"  # Initialisation de la variable\nwhile mot_de_passe != \"123456\" :\n    mot_de_passe = input(\"Entrez le mot de passe : \")","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 5: Saisie sécurisée </h3> \n\nEcrire une programme qui demande une note. Tant que la note n'est pas valable (c'est-à-dire entre 0 et 6), le programme repose la question (`input`)."},{"metadata":{"trusted":true},"cell_type":"code","source":"# mon programme\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Piège 2: tomber dans une boucle infinie\n\nIl est fréquent d'oublier une ligne de code, et d'écrire une boucle while qui ne se termine pas.\n\nPar exemple, dans le programme\n\n```python\nn = 0\nwhile n < 10 :\n    print(n)\n```\nLa condition `n < 10` sera toujours vraie car on a oublié d'incrémenter la variable. Il aurait fallut écrire\n```python\nn = 0\nwhile n < 10 :\n    print(n)\n    n = n + 1\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 \nParmi les programme suivant choisi celui qui part en boucle infini.\n\n   <input type=\"checkbox\" >  **Programme A**\n```python\ni = A - 1\nwhile i < A :\n   i = i - 1\n```\n   <input type=\"checkbox\" >  **Programme B**\n```python\ni = A + 1\nwhile i < A :\n   i = i - 1\n```\n\n   <input type=\"checkbox\" >  **Programme C**\n```python\ni = A + 1\nwhile i < A :\n   i = i + 1\n```\n\n   <input type=\"checkbox\" >  **Programme D**\n```python\ni = A - 1\nwhile i < A :\n   i = i + 1\n```"},{"metadata":{},"cell_type":"markdown","source":"<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nRéponse\n</summary>  \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">Programme A) car i est décrémenté, donc il devient de plus en plus petit et il ne dépassera jamais A et la condition i < A sera toujours vraie\n</div>\n</details>\n                "},{"metadata":{},"cell_type":"markdown","source":"## Simuler l'exécution d'une boucle while\n\nIl est parfois difficile de debugger un programme avec une boucle `while`.  Dans cette optique, il est utile de simuler l'exécution de la boucle en notant l'évolution des variables et de la condition d'arrêt dans un tableau.\n\n<h3 > Exemple 3: Simuler l'exécution d'un programme</h3>\n\nLe programme suivant\n\n```python\nn = 100\np = 1\nwhile p < n:\n    p = 2 * p\n    print(p)\n```\ncherche la première puissance de 2 plus grande qu’un entier `n` donné. La boucle fait prendre à `p` les valeurs 2, 4, 8, 16,. . . Elle s’arrête dès que la puissance de 2 est supérieure ou égale à `n`, donc ici ce programme affiche toutes les puissante jusqu'à 128 (compris). Le détail de l’exécution du programme est résumé dans le tableau ci-dessous:\n\n| `p`   |   `n`   | `p < n ` |\n| :---: |:-------:| :-------:|\n|   1   |  100    |   `True` |\n|   2   |  100    |   `True` |\n|   4   |  100    |   `True` |\n|   8   |  100    |   `True` |\n|   16  |  100    |   `True` |\n|   32  |  100    |   `True` |\n|   64  |  100    |   `True` |\n|   128 |  100    |   `False` |\n\nDans les notebook, on peut toujours vérifier l'exécution d'un programme avec le module `tutor`. \n\n!!! info Utilisation de tutor\n\nPou  exécuter un programme \"pas à pas\", il suffit d'importer le module `tutor` au début de votre programme avec l'instruction `from tutor import tutor` puis de terminer le programme avec l'instruction `tutor()`\n!!!\n\n**A faire:**\nVérifier que le tableau ci-dessus est correct en éxécutant le programme ci-dessous:"},{"metadata":{"trusted":true},"cell_type":"code","source":"from tutor import tutor\n\nn = 100\np = 1\nwhile p < n:\n    p = 2 * p\n    print(p)\n\ntutor()","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> &nbsp; Quizz </h3> \n \nQuelle est la valeur affichée par le programme ci-dessous ?\n\n```python\nu = 5\nn = 0\nwhile u != 656:\n    u = 5 * u + 1\n    n = n + 1\nprint ( n )\n```"},{"metadata":{},"cell_type":"raw","source":"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'est 3 car après 3 itérations  u vaut 656\n</div>\n</details>\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 \nQuelle est la valeur affichée par le programme ci-dessous ?\n\n\n```python\nu = 5\nv = 12\ni = 1\nwhile u < v:\n    u = 3 * u + 2\n    v = 2 * v + 3\n    i = i + 1\nprint ( i )\n```"},{"metadata":{},"cell_type":"raw","source":"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'est 3 car après 3 itérations  u vaut 656\n</div>\n</details>\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 \nQuelle valeur faut-il donner à la variable `k` pour que le programme ci-dessous affiche 7?\n\n\n```python\nk = int(input(\"Quel valeur pour k ? \"))\nn = 0\nwhile k != 1:\n   n = n + 1\n   k = k / 2\nprint ( n )\n```"},{"metadata":{},"cell_type":"raw","source":"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'est 128. En effet il faut diviser 7 fois 128 par 2 pour avoir 1.\n    \n</div>\n</details>\n                "},{"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> Exemple 4: 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":true},"cell_type":"code","source":"nombre = int(input('Entrez un entier: '))\ni = 2\n\nprint(nombre, \"=\", end=\" \")\n\nwhile i < nombre:\n    if nombre % i == 0:   # % est le reste de la division entière\n        print(i, \"·\", end=\" \")\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 > Exemple 5: En code binaire</h3>\n\nLe programme transforme l'entier en code binaire.\n\n"},{"metadata":{"trusted":true},"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":"## 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 avoir une boucle où la condition est testée à la fin.\n\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"while True:\n    mot_de_passe = input(\"Entrez le mot de passe : \")\n    if mot_de_passe == \"123456\":\n        print(\"Mot de passe valide\")\n        break\n    print(\"Mot de passe invalide\")","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:  nombre de chiffre d'un nombre </h3> \n\nEcrire un programme qui demande un nombre à l'utilisateur puis affiche le combien de chiffre sont nécessaires pour écrire ce nombre. Par exemple, le nombre 74613 s'écrit avec 5 chiffres\n\n*Indication : Faites des divisions entières par 10 successivement*\n"},{"metadata":{"trusted":true},"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":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 9:    Ratrapper la tortue </h3> \n\n\nUne tortue s'élance sur une piste de 10 mètres de long. Le jour, elle parcourt 1 mètre, la nuit, elle\nse repose.\n\nSeulement, voilà, la piste, en caoutchouc, s'étire toutes les nuits de 10 mètres. Ainsi, au deuxième\nmatin, la tortue se retrouve à deux mètres du début de la piste, mais à 18 mètres de son extrémité.\n\nLorsqu'elle s'endort le soir, il lui reste encore 17 mètres à parcourir. Et lorsqu'elle se réveille le matin suivant, la piste a 30 mètres de long, dont plus de 25 mètres sont\ndevant elle!\n\n    a) La tortue arrivera-t-elle au bout de la piste?\n    b) Si oui, en combien de temps?\n    c) Rédiger un script qui détermine le nombre de jours.\n    \n*Indication : calculer la fraction de la piste que la tortue parcours chaque jour.*"},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 10:  La balle rebondissante </h3> \n\n\nUne balle rebondissante est lâchée du haut d'un immeuble de 10 mètres. A chaque rebond la hauteur diminue d'un tiers. Combien de fois la personne du premier niveau dont la fenêtre est située à 1 mètre 50 du sol verra elle passer la balle ?"},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 11:  La suite de Syracuse </h3> \n\nOn définit une suite $u_n$ de la manière suivante : \n\n- $u_0 = 1000$\n- si $u_n = 1$, alors la suite est finie et u n est son dernier élément (on arrête de calculer d’autres\néléments)\n- si $u_n$ est pair, alors $u_{n+1} = u_n / 2$\n- si $u_n$ est impair et distinct de 1, alors $u_{n+1} = 3 u_n + 1$\n\nÉcrire un programme qui affiche les termes de la suite u.\n\nCette suite est-elle finie ?\n\nPour aller plus loin, aller vous renseigner sur la Conjecture de Syracuse https://fr.wikipedia.org/wiki/Conjecture_de_Syracuse."},{"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
diff --git a/Notebooks/07_Boucle_while_partie2.ipynb b/Notebooks/07_Boucle_while_partie2.ipynb
new file mode 100644
index 0000000..597eb07
--- /dev/null
+++ b/Notebooks/07_Boucle_while_partie2.ipynb
@@ -0,0 +1 @@
+{"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.1 - Boucle `while`, partie 2\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## Boucles « tant que »\nNous avons déjà rencontré d'une part la structure de la boucle `for`, qui permet d'effectuer un nombre prédéfini d'itérations d'un bloc d'instructions, et d'autre part le branchement conditionnel `if`, qui permet d'exécuter ou non un bloc d'instructions en fonction d'un test effectué sur le moment.\n\nLes boucles « tant que », ou boucle `while`, combinent ces deux principes d'une nouvelle manière en conditionnant la poursuite des itérations à un test effectué préalablement à chaque tour de boucle."},{"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":"## Boucles « tant que » en  Python\n\nLa syntaxe de la boucle while est :\n\n![Sytaxe d'une boucle while](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap7/while-loop.png)\noù `condition` a pour valeur `True` ou `False`.\n\n\n## Lien avec les boucle `for`\n\nIl est toujours possible de remplacer une boucle `for` par une boucle `while` comme ceci est illustré dans l'exemple suivant.\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":"Avec une boucle `for`, on pourrait réécrire le programme comme "},{"metadata":{"trusted":false,"scrolled":true},"cell_type":"code","source":"compteur = 1\nfor _ in range(10):\n    print(compteur)\n    compteur = compteur + 1","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Ou plus simplement en utilisant l'indice"},{"metadata":{"trusted":false,"scrolled":true},"cell_type":"code","source":"for i in range(10):\n    print(i+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Écrire un programme avec une boucle `while` qui affiche les nombres de 0 à 50."},{"metadata":{"trusted":false},"cell_type":"code","source":"# votre programme\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 2: Compteur pair </h3> \n\nTester ci-dessous le programme suivant:\n```python\nx = 0\nfor _ in range(26):\n    print(x)\n    x = x + 2\n```\nPuis réécrire ce programme en remplaçant la boucle `for` par une boucle `while`."},{"metadata":{"trusted":false},"cell_type":"code","source":"# votre programme\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 3: Compteur décroissant </h3> \n\nÉcrire un programme qui affiche une compte à rebour de 20 à 0"},{"metadata":{"trusted":false},"cell_type":"code","source":"# votre programme\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Quand utiliser une boucle `while`\n\n!!! info Utilisation\n\nBien qu'il est possible d'utiliser une boucle `while` à la place d'une boucle `for`, il est recommendé d'utiliser systématiquement la boucle `for` lorsqu'elle est suffisante et de limiter l'usage de la boucle `while` aux cas dans lesquels on ne connait pas à l'avance le nombre d'itérations ou les valeurs de la variable de la boucle.\n\nLa boucle while est typiquement utilisée pour traiter des problèmes tels que :\n\n👉 Faire quelque chose tant qu'une condition est vraie\n!!!"},{"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 4: Faire une moyenne</h3> \n\n1. En utilisant l'exemple du programme précédent, compléter le programme suivant en remplaçant les ... afin d'avoir un programme qui permet de calculer des moyennes.\n\n2. Utiliser le programme pour calculer votre moyenne générale au premier semestre."},{"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":"raw","source":"Votre  moyenne générale au premier semestre est :\n    Réponse : "},{"metadata":{},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 5: Les interêts </h3> \n\nOn place un capital de 500CHF sur un compte rémunéré à 3% par an. \n\nLe programme ci-dessous a pour but de calculer le nombre d'années au bout desquelles le capital\nsera doublé (plus grand que 1000CHF).\n\n```Python\nS = 500\nannee = 0\nwhile S < 1000 :\n    S = S + (3/100) * S\nannee = annee + 1\n\nprint(\"Le capital sera doublé après \",annee, \" ans\")\n```\nLe problème est que le programme contient une erreur !\n\n1. Corriger le programme afin qu’il atteigne le but espéré, puis le tester."},{"metadata":{"trusted":false},"cell_type":"code","source":"# version à corriger du programme\nS = 500\nannee = 0\nwhile S < 1000 :\n    S = S + (3/100) * S\nannee = annee + 1\n\nprint(\"Le capital sera doublé après \",annee, \" ans\")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"Après combien d'année le capital aura doublé?\n    Réponse: "},{"metadata":{},"cell_type":"markdown","source":"2. Modifier le programme précédent de telle sorte que le capital et le taux de rémunération soient saisis en entrée (instruction `input`). Tester le programme pour savoir au bout de combien d'année un capital de 5 CHF aura doublé si il est rémunéré à 4% par an."},{"metadata":{"trusted":false},"cell_type":"code","source":"# version du programme avec des input\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"raw","source":"Après combien d'année un capital de 5 CHF rémunéré à 4% aura doublé?\n    Réponse: "},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"## Les pièges\n\n### Piège 1: oublier d'initialiser les variables présenta dans la condition du `while`\n\nOn veut un programme qui demande un mot de passe qui reste bloqué tant que le bon mot de passe n'est par fourni. On serait tenter d'écrire"},{"metadata":{"trusted":false},"cell_type":"code","source":"while mot_de_passe != \"123456\" :\n    mot_de_passe = input(\"Entrez le mot de passe : \")","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Le programme génère une erreur car pour tester la condition `mot_de_passe != \"123456\"` il faut en premier attribuer une valeur à la variable `mot_de_passe` comme cela est fait dans le programme suivant:"},{"metadata":{"trusted":false},"cell_type":"code","source":"mot_de_passe = \"\"  # Initialisation de la variable\nwhile mot_de_passe != \"123456\" :\n    mot_de_passe = input(\"Entrez le mot de passe : \")","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 5: Saisie sécurisée </h3> \n\nEcrire une programme qui demande une note. Tant que la note n'est pas valable (c'est-à-dire entre 0 et 6), le programme repose la question (`input`)."},{"metadata":{"trusted":false},"cell_type":"code","source":"# mon programme\n","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"### Piège 2: tomber dans une boucle infinie\n\nIl est fréquent d'oublier une ligne de code, et d'écrire une boucle while qui ne se termine pas.\n\nPar exemple, dans le programme\n\n```python\nn = 0\nwhile n < 10 :\n    print(n)\n```\nLa condition `n < 10` sera toujours vraie car on a oublié d'incrémenter la variable. Il aurait fallut écrire\n```python\nn = 0\nwhile n < 10 :\n    print(n)\n    n = n + 1\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 \nParmi les programme suivant choisi celui qui part en boucle infini.\n\n   <input type=\"checkbox\" >  **Programme A**\n```python\ni = A - 1\nwhile i < A :\n   i = i - 1\n```\n   <input type=\"checkbox\" >  **Programme B**\n```python\ni = A + 1\nwhile i < A :\n   i = i - 1\n```\n\n   <input type=\"checkbox\" >  **Programme C**\n```python\ni = A + 1\nwhile i < A :\n   i = i + 1\n```\n\n   <input type=\"checkbox\" >  **Programme D**\n```python\ni = A - 1\nwhile i < A :\n   i = i + 1\n```"},{"metadata":{},"cell_type":"markdown","source":"<details>\n<summary style=\"border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8\"> \nRéponse\n</summary>  \n\n<div style=\"border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8\">Programme A) car i est décrémenté, donc il devient de plus en plus petit et il ne dépassera jamais A et la condition i < A sera toujours vraie\n</div>\n</details>\n                "},{"metadata":{},"cell_type":"markdown","source":"## Simuler l'exécution d'une boucle while\n\nIl est parfois difficile de debugger un programme avec une boucle `while`.  Dans cette optique, il est utile de simuler l'exécution de la boucle en notant l'évolution des variables et de la condition d'arrêt dans un tableau.\n\n<h3 > Exemple 3: Simuler l'exécution d'un programme</h3>\n\nLe programme suivant\n\n```python\nn = 100\np = 1\nwhile p < n:\n    p = 2 * p\n    print(p)\n```\ncherche la première puissance de 2 plus grande qu’un entier `n` donné. La boucle fait prendre à `p` les valeurs 2, 4, 8, 16,. . . Elle s’arrête dès que la puissance de 2 est supérieure ou égale à `n`, donc ici ce programme affiche toutes les puissante jusqu'à 128 (compris). Le détail de l’exécution du programme est résumé dans le tableau ci-dessous:\n\n| `p`   |   `n`   | `p < n ` |\n| :---: |:-------:| :-------:|\n|   1   |  100    |   `True` |\n|   2   |  100    |   `True` |\n|   4   |  100    |   `True` |\n|   8   |  100    |   `True` |\n|   16  |  100    |   `True` |\n|   32  |  100    |   `True` |\n|   64  |  100    |   `True` |\n|   128 |  100    |   `False` |\n\nDans les notebook, on peut toujours vérifier l'exécution d'un programme avec le module `tutor`. \n\n!!! info Utilisation de tutor\n\nPou  exécuter un programme \"pas à pas\", il suffit d'importer le module `tutor` au début de votre programme avec l'instruction `from tutor import tutor` puis de terminer le programme avec l'instruction `tutor()`\n!!!\n\n**A faire:**\nVérifier que le tableau ci-dessus est correct en éxécutant le programme ci-dessous:"},{"metadata":{"trusted":false},"cell_type":"code","source":"from tutor import tutor\n\nn = 100\np = 1\nwhile p < n:\n    p = 2 * p\n    print(p)\n\ntutor()","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> &nbsp; Quizz </h3> \n \nQuelle est la valeur affichée par le programme ci-dessous ?\n\n```python\nu = 5\nn = 0\nwhile u != 656:\n    u = 5 * u + 1\n    n = n + 1\nprint ( n )\n```"},{"metadata":{},"cell_type":"raw","source":"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'est 3 car après 3 itérations  u vaut 656\n</div>\n</details>\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 \nQuelle est la valeur affichée par le programme ci-dessous ?\n\n\n```python\nu = 5\nv = 12\ni = 1\nwhile u < v:\n    u = 3 * u + 2\n    v = 2 * v + 3\n    i = i + 1\nprint ( i )\n```"},{"metadata":{},"cell_type":"raw","source":"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'est 3 car après 3 itérations  u vaut 656\n</div>\n</details>\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 \nQuelle valeur faut-il donner à la variable `k` pour que le programme ci-dessous affiche 7?\n\n\n```python\nk = int(input(\"Quel valeur pour k ? \"))\nn = 0\nwhile k != 1:\n   n = n + 1\n   k = k / 2\nprint ( n )\n```"},{"metadata":{},"cell_type":"raw","source":"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'est 128. En effet il faut diviser 7 fois 128 par 2 pour avoir 1.\n    \n</div>\n</details>\n                "},{"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> Exemple 4: 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\nprint(nombre, \"=\", end=\" \")\n\nwhile i < nombre:\n    if nombre % i == 0:   # % est le reste de la division entière\n        print(i, \"·\", end=\" \")\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 > Exemple 5: 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":"## 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 avoir une boucle où la condition est testée à la fin.\n\n"},{"metadata":{"trusted":false},"cell_type":"code","source":"while True:\n    mot_de_passe = input(\"Entrez le mot de passe : \")\n    if mot_de_passe == \"123456\":\n        print(\"Mot de passe valide\")\n        break\n    print(\"Mot de passe invalide\")","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:  nombre de chiffre d'un nombre </h3> \n\nEcrire un programme qui demande un nombre à l'utilisateur puis affiche le combien de chiffre sont nécessaires pour écrire ce nombre. Par exemple, le nombre 74613 s'écrit avec 5 chiffres\n\n*Indication : Faites des divisions entières par 10 successivement*\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":{"trusted":false},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 9:    Ratrapper la tortue </h3> \n\n\nUne tortue s'élance sur une piste de 10 mètres de long. Le jour, elle parcourt 1 mètre, la nuit, elle\nse repose.\n\nSeulement, voilà, la piste, en caoutchouc, s'étire toutes les nuits de 10 mètres. Ainsi, au deuxième\nmatin, la tortue se retrouve à deux mètres du début de la piste, mais à 18 mètres de son extrémité.\n\nLorsqu'elle s'endort le soir, il lui reste encore 17 mètres à parcourir. Et lorsqu'elle se réveille le matin suivant, la piste a 30 mètres de long, dont plus de 25 mètres sont\ndevant elle!\n\n    a) La tortue arrivera-t-elle au bout de la piste?\n    b) Si oui, en combien de temps?\n    c) Rédiger un script qui détermine le nombre de jours.\n    \n*Indication : calculer la fraction de la piste que la tortue parcours chaque jour.*"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 10:  La balle rebondissante </h3> \n\n\nUne balle rebondissante est lâchée du haut d'un immeuble de 10 mètres. A chaque rebond la hauteur diminue d'un tiers. Combien de fois la personne du premier niveau dont la fenêtre est située à 1 mètre 50 du sol verra elle passer la balle ?"},{"metadata":{"trusted":false},"cell_type":"code","source":"","execution_count":null,"outputs":[]},{"metadata":{"trusted":false},"cell_type":"markdown","source":"<h3 style=\"color:teal;background-color:azure;\" > <i class=\"fa fa-pencil\" aria-hidden=\"true\"> </i> &nbsp; Exercice 11:  La suite de Syracuse </h3> \n\nOn définit une suite $u_n$ de la manière suivante : \n\n- $u_0 = 1000$\n- si $u_n = 1$, alors la suite est finie et u n est son dernier élément (on arrête de calculer d’autres\néléments)\n- si $u_n$ est pair, alors $u_{n+1} = u_n / 2$\n- si $u_n$ est impair et distinct de 1, alors $u_{n+1} = 3 u_n + 1$\n\nÉcrire un programme qui affiche les termes de la suite u.\n\nCette suite est-elle finie ?\n\nPour aller plus loin, aller vous renseigner sur la Conjecture de Syracuse https://fr.wikipedia.org/wiki/Conjecture_de_Syracuse."},{"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
diff --git a/Notebooks/imgs_chap7/while-loop.png b/Notebooks/imgs_chap7/while-loop.png
new file mode 100644
index 0000000000000000000000000000000000000000..db45cf245bd068abf7a2422b2242e565a3817515
GIT binary patch
literal 24745
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
Zj4#3tEiT^}$-uzC;OXk;vd$@?2>`l>A%6e>

literal 0
HcmV?d00001

-- 
GitLab