Skip to content
Snippets Groups Projects
Commit 78b4dc86 authored by Vincent Namy (EDU_GE)'s avatar Vincent Namy (EDU_GE)
Browse files

[NB7 while] Améliorations diverses

parent a1c2df6c
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<div style="padding:20px;background-color:papayawhip;" > <div style="padding:20px;background-color:papayawhip;" >
<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> <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>
<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> <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>
Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br> Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>
Veuillez 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> Veuillez 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>
</p> </div> </p> </div>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# 7 - Boucle `while` # 7 - Boucle `while`
Dans 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 : Dans 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 :
- la boucle `while` répète aussi longtemps qu'une condition est vraie, - la boucle `while` répète aussi longtemps qu'une condition est vraie,
- la fonction `sleep()` permet d'attendre et ralentir le programme,
- le mot-clé `break` permet de sortir de la boucle. - le mot-clé `break` permet de sortir de la boucle.
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3> <h3 style="color:chocolate;background-color:papayawhip;" > <i class="fa fa-question" aria-hidden="true"> </i> &nbsp; Quizz </h3>
``` ```
En Python, while est En Python, while permet de réaliser :
A) une fonction A) une fonction
B) une condition B) une condition
C) une boucle C) une boucle
D) un mot-clé D) aucune des réponses précédentes
``` ```
%% Cell type:raw id: tags: %% Cell type:raw id: tags:
Ma réponse: Ma réponse:
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<details> <details>
<summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8"> <summary style="border-left:3px solid #3c763d; border-radius:2pt; width:100%; color:#3c763d; padding:6px; background-color: #dff0d8">
Réponse Réponse
</summary> </summary>
<div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">D) un mot-clé <div style="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">C) une boucle
</div> </div>
</details> </details>
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 1: Compteur trivial</h3> ### Exemple 1 : Compteur trivial
L'exemple suivant permet d'afficher un compteur allant de 1 à 10. À chaque début L'exemple suivant permet d'afficher un compteur allant de 1 à 10. À chaque début
de boucle, le programme va évaluer la condition `compteur <= maxCompteur` puis exécuter le de boucle, le programme va évaluer la condition `compteur <= 10` puis exécuter le
bloc d'instruction si elle vaut `True` et sortir de la boucle si elle vaut `False`. bloc d'instruction si elle vaut `True` et sortir de la boucle si elle vaut `False`.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
maxCompteur = 10
compteur = 1 compteur = 1
while compteur <= maxCompteur: while compteur <= 10:
print(compteur) print(compteur)
compteur = compteur + 1 compteur = compteur + 1
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 2: Compte à rebours</h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 1: Compteur </h3>
💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 50.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
On peut utiliser la boucle `while` pour créer un compteur à rebours. <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 2: Compteur pair </h3>
Pour attendre une seconde, la fonction `sleep()` du module `time` est importée.
Tant que `n` est strictement plus grand que 0, les instructions indentées dans la boucle `while` sont executées. 💡 **Objectif** : Écrire un programme qui affiche les nombres pairs de 0 à 50.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from time import sleep ```
n = int(input('Entrez un entier: ')) # Rappel: input retourne une chaîne de caractère (str). %% Cell type:markdown id: tags:
while n > 0: <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 3: Compteur décroissant </h3>
print(n)
sleep(1) # On attend 1 seconde avant de continuer
n = n - 1
print('boum!!!') 💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 20, dans l'ordre décroissant.
%% Cell type:code id: tags:
``` python
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 3: Lister des noms</h3> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 4: Menu répétitif </h3>
💡 **Objectif** : Afficher le menu (ci-dessous) d'un programme jusqu'à ce que l'utilisateur-trice saisisse "q" pour quitter.
Nous utilisons une boucle `while` pour demander des noms à l'utilisateur-trice. ```Python
On 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'`). - Menu -
1. Salade mêlée
Entrez les noms de 3-4 de vos amis. 2. Tartiflette
q. Quitter
Choisissez une option :
```
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
nom = input("Entrez un nom: ")
autre_nom = ""
while autre_nom != "STOP":
autre_nom = input("Entrez un autre nom (ou 'STOP' pour terminer) : ")
if autre_nom != "STOP": # Vérification avant de l'ajouter
nom += ", " + autre_nom
print("Voici la liste des noms :", nom)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 4: Faire une somme</h3> <h3 > Exemple 2: Faire une somme</h3>
Nous utilisons une boucle `while` pour demander des nombres à l'utilisateur-trice. Nous utilisons une boucle `while` pour demander des nombres à l'utilisateur-trice.
On 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*). On 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.
Entrez les frais de vos 3 derniers achats. Entrez les frais de vos 3 derniers achats.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
somme = 0 somme = 0
nombre = input('Entrez un nombre: ') nombre = float(input('Entrez un nombre: '))
while nombre !='': while nombre != 0:
somme = somme + float(nombre) # nombre est une chaîne de caractère ! somme = somme + nombre
nombre = input('Entrez un nombre: ') nombre = float(input('Entrez un nombre: '))
print('somme =', somme) print('somme =', somme)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## **1️⃣ Exercice : Faire une moyenne** <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 5: Faire une moyenne</h3>
💡 **Objectif** : Nous utilisons une boucle `while` pour demander des nombres à l'utilisateur.
On 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 ... **Objectif** : Sur l'exemple du code précédent. Compléter le code suivant en remplaçant les ... afin de calculer une moyenne.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
somme = 0 somme = 0
nombre_de_note = 0 nombre_de_note = 0
note = float(input('Entrez une note: ')) note = float(input('Entrez une note: '))
while note !='': while note != 0:
# compléter le code à la place des ... # compléter le code à la place des ...
somme = ... somme = ...
nombre_de_note = ... nombre_de_note = ...
note = input('Entrez un nombre: ') note = float(input('Entrez un nombre: ')
print('moyenne =', somme/nombre_de_note) print('moyenne =', somme/nombre_de_note)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<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> <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 6: Saisie sécurisée </h3>
💡 **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 id: tags:
``` python
```
%% Cell type:markdown id: tags:
---
# 🎯 **Conclusion : Quand utiliser `while` ?**
| Situation | `for` | `while` |
|-----------|-------|---------|
| Nombre d'itérations connu à l'avance | ✅ Oui | ❌ Non |
| Nombre d'itérations inconnu (dépend d'une condition) | ❌ Non | ✅ Oui |
| Répéter une action jusqu'à un événement spécifique | ❌ Non | ✅ Oui |
| Interaction utilisateur (ex: attendre une entrée correcte) | ❌ Non | ✅ Oui |
| Boucles infinies avec condition d’arrêt | ❌ Risqué | ✅ Plus adapté |
## 📌 **À retenir**
- **Utilise `for`** lorsque **le nombre d'itérations est fixé** (ex: parcourir une liste, boucle de comptage).
- **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).
- **Attention aux boucles infinies !** Toujours s'assurer que la condition de sortie est bien définie.
🚀 **Exercez-vous** en adaptant les exercices et en créant vos propres scénarios d'utilisation de `while` !
---
%% Cell type:markdown id: tags:
## Pour aller plus loin...
%% Cell type:markdown id: tags:
<h3> &nbsp; Exemple 3: Décomposer en facteurs premiers</h3>
Le programme suivant réalise la décomposition en facteurs premiers d'un nombre donné par l'utilisateur-trice. Le programme suivant réalise la décomposition en facteurs premiers d'un nombre donné par l'utilisateur-trice.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
nombre = int(input('Entrez un entier: ')) nombre = int(input('Entrez un entier: '))
i = 2 i = 2
while i < nombre: while i < nombre:
if nombre % i == 0: # % est le reste de la division entière if nombre % i == 0: # % est le reste de la division entière
print(i) print(i)
nombre = nombre // i # // correspond à la division entière nombre = nombre // i # // correspond à la division entière
else: else:
i = i + 1 i = i + 1
print(nombre) print(nombre)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exemple 6: En code binaire</h3> <h3 > &nbsp; Exemple 4: En code binaire</h3>
Le programme transforme l'entier en code binaire. Le programme transforme l'entier en code binaire.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
n = int(input('Entrez un entier: ')) n = int(input('Entrez un entier: '))
code = '' code = ''
while n > 0: while n > 0:
if n % 2 == 1: if n % 2 == 1:
code = '1' + code code = '1' + code
else: else:
code = '0' + code code = '0' + code
n = n // 2 n = n // 2
print(code) print(code)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
<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> <h3 > &nbsp; Exemple 5: Lancer un dé jusqu'à obtenir un 6 🎲</h3>
Lancer 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. Lancer 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.
`randint(min,max)` est une fonction qui retourne un nombre entier compris entre min et max. Dans notre cas min = 1 et max = 6. `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 id: tags: %% Cell type:code id: tags:
``` python ``` python
from random import * from random import *
tentatives = 0 tentatives = 0
resultat = 0 resultat = 0
while resultat != 6: while resultat != 6:
resultat = randint(1, 6) resultat = randint(1, 6)
tentatives = tentatives + 1 tentatives = tentatives + 1
print("Tentative:", tentatives, ":", resultat) print("Tentative:", tentatives, ":", resultat)
print("Vous avez obtenu un 6 après", tentatives, "essais.") print("Vous avez obtenu un 6 après", tentatives, "essais.")
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Sortir avec `break` <h3>Exemple 6: Compte à rebours</h3>
Le mot-clé `break`, seul sur une ligne, permet de sortir d'une boucle.
Souvent cette méthode est utilisée pour sortir d'une boucle infinie.
%% Cell type:code id: tags:
``` python
noms = []
while True:
nom = input('Entrez un nom: ')
if nom == '':
break
noms.append(nom)
print(noms)
```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
--- On peut utiliser la boucle `while` pour créer un compteur à rebours.
Pour attendre une seconde, la fonction `sleep()` du module `time` est importée.
# 🎯 **Conclusion : Quand utiliser `while` ?** Tant que `n` est strictement plus grand que 0, les instructions indentées dans la boucle `while` sont executées.
| Situation | `for` | `while` |
|-----------|-------|---------|
| Nombre d'itérations connu à l'avance | ✅ Oui | ❌ Non |
| Nombre d'itérations inconnu (dépend d'une condition) | ❌ Non | ✅ Oui |
| Répéter une action jusqu'à un événement spécifique | ❌ Non | ✅ Oui |
| Interaction utilisateur (ex: attendre une entrée correcte) | ❌ Non | ✅ Oui |
| Boucles infinies avec condition d’arrêt | ❌ Risqué | ✅ Plus adapté |
## 📌 **À retenir**
- **Utilise `for`** lorsque **le nombre d'itérations est fixé** (ex: parcourir une liste, boucle de comptage).
- **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).
- **Attention aux boucles infinies !** Toujours s'assurer que la condition de sortie est bien définie.
🚀 **Exercez-vous** en adaptant les exercices et en créant vos propres scénarios d'utilisation de `while` !
---
%% Cell type:markdown id: tags:
## **2️⃣ Série d'exercices simples**
💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 50.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` from time import sleep
%% Cell type:markdown id: tags:
💡 **Objectif** : Écrire un programme qui affiche les nombres pairs de 0 à 50. n = int(input('Entrez un entier: ')) # Rappel: input retourne une chaîne de caractère (str).
%% Cell type:code id: tags: while n > 0:
print(n)
sleep(1) # On attend 1 seconde avant de continuer
n = n - 1
``` python print('boum!!!')
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 20, dans l'ordre décroissant. ## Sortir avec `break`
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
💡 **Objectif** : Afficher le menu (ci-dessous) d'un programme jusqu'à ce que l'utilisateur-trice saisisse "q" pour quitter. Le mot-clé `break`, seul sur une ligne, permet de sortir d'une boucle.
```Python Souvent cette méthode est utilisée pour sortir d'une boucle infinie.
- Menu -
1. Option une
2. Option deux
q. Quitter
Choisissez une option :
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` noms = []
%% Cell type:markdown id: tags:
## **3️⃣ Exercice : Saisie sécurisée**
💡 **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 id: tags: while True:
nom = input('Entrez un nom: ')
if nom == '':
break
noms.append(nom)
``` python print(noms)
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## **4️⃣ Exercice : Lancer de dé jusqu'à obtenir un 6 🎲** <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>
💡 **Objectif** : Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives. 💡 **Objectif** : Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives.
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## **5️⃣ Exercice : Le trait qui tourne** <h3 style="color:teal;background-color:azure;" > <i class="fa fa-pencil" aria-hidden="true"> </i> &nbsp; Exercice 8: Le trait qui tourne </h3>
💡 **Objectif** : En répétant plusieurs fois je dessine un trait et je tourne d'un angle, je dessine une figure. 💡 **Objectif** : En répétant plusieurs fois je dessine un trait et je tourne d'un angle, je dessine une figure.
Suivre les indications suivantes: Suivre les indications suivantes:
- le stylo de couleur bleu avance sur un segment droit de longueur 5; - le stylo de couleur bleu avance sur un segment droit de longueur 5;
- puis tourne de 70° vers la droite. - puis tourne de 70° vers la droite.
- Ensuite, la longueur du segment est incrémentée (augmentée de 0.5). - Ensuite, la longueur du segment est incrémentée (augmentée de 0.5).
- Répéter ces étapes tant que la longueur du segment est inférieure à 150. - Répéter ces étapes tant que la longueur du segment est inférieure à 150.
Tester ensuite le programme avec une rotation de 89° au lieu de 70°. Tester ensuite le programme avec une rotation de 89° au lieu de 70°.
Dessinez une usine avec un toit en dents de scie. Dessinez une usine avec un toit en dents de scie.
![Image de tourbillon](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap7/tourbillon.png) ![Image de tourbillon](https://githepia.hesge.ch/info_sismondi/exercices-1ere/-/raw/main/Notebooks/imgs_chap7/tourbillon.png)
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
--- ---
#### Remarque générale #### 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) 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)
![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png) ![Licence Creative Commons](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment