"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_note = ...\n note = float(input('Entrez un nombre: '))\n\nprint('moyenne =', somme/nombre_de_note)\n"
"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"
<p> Ce fichier est fait pour être lu sur le site <ahref="https://notebook.basthon.fr/"><imgsrc='https://notebook.basthon.fr/assets/efede5218c9087496f16.png'style="border: 0; display:inline; margin: 0 5px; height:30px"alt="Basthon"/></a>. <br>
Si vous l'avez ouvert avec un autre programme, comme Jupyter notebook, vous riquez de rencontrer quelques bugs. <br>
Veuillez cliquez sur <ahref="https://notebook.basthon.fr/">ce lien</a> et y charger ce fichier à l'aide du bouton "Ouvrir" <iclass="fa fa-folder"aria-hidden="true"></i>
</p></div>
%% Cell type:markdown id: tags:
# 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 :
- 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.
<divstyle="border-left:3px solid #3c763d; border-radius:2pt; color:#3c763d; padding:6px; background-color: #eff0e8">D) un mot-clé
</div>
</details>
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exemple 1: Compteur trivial</h3>
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
bloc d'instruction si elle vaut `True` et sortir de la boucle si elle vaut `False`.
%% Cell type:code id: tags:
``` python
maxCompteur=10
compteur=1
whilecompteur<=maxCompteur:
print(compteur)
compteur=compteur+1
```
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exemple 2: Compte à rebours</h3>
%% 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.
Tant que `n` est strictement plus grand que 0, les instructions indentées dans la boucle `while` sont executées.
%% Cell type:code id: tags:
``` python
fromtimeimportsleep
n=int(input('Entrez un entier: '))# Rappel: input retourne une chaîne de caractère (str).
whilen>0:
print(n)
sleep(1)# On attend 1 seconde avant de continuer
n=n-1
print('boum!!!')
```
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exemple 3: Lister des noms</h3>
Nous utilisons une boucle `while` pour demander des noms à l'utilisateur-trice.
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'`).
Entrez les noms de 3-4 de vos amis.
%% Cell type:code id: tags:
``` python
nom=input("Entrez un nom: ")
autre_nom=""
whileautre_nom!="STOP":
autre_nom=input("Entrez un autre nom (ou 'STOP' pour terminer) : ")
ifautre_nom!="STOP":# Vérification avant de l'ajouter
nom+=", "+autre_nom
print("Voici la liste des noms :",nom)
```
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exemple 4: Faire une somme</h3>
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*).
Entrez les frais de vos 3 derniers achats.
%% Cell type:code id: tags:
``` python
somme=0
nombre=input('Entrez un nombre: ')
whilenombre!='':
somme=somme+float(nombre)# nombre est une chaîne de caractère !
nombre=input('Entrez un nombre: ')
print('somme =',somme)
```
%% Cell type:markdown id: tags:
## **1️⃣ Exercice : Faire une moyenne**
💡 **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 ...
%% Cell type:code id: tags:
``` python
somme=0
nombre_de_note=0
note=float(input('Entrez une note: '))
whilenote:
whilenote!='':
# compléter le code à la place des ...
somme=...
nombre_note=...
note=float(input('Entrez un nombre: '))
nombre_de_note=...
note=input('Entrez un nombre: ')
print('moyenne =',somme/nombre_de_note)
```
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exemple 5: 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.
%% Cell type:code id: tags:
``` python
nombre=int(input('Entrez un entier: '))
i=2
whilei<nombre:
ifnombre%i==0:# % est le reste de la division entière
print(i)
nombre=nombre//i# // correspond à la division entière
else:
i=i+1
print(nombre)
```
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exemple 6: En code binaire</h3>
Le programme transforme l'entier en code binaire.
%% Cell type:code id: tags:
``` python
n=int(input('Entrez un entier: '))
code=''
whilen>0:
ifn%2==1:
code='1'+code
else:
code='0'+code
n=n//2
print(code)
```
%% Cell type:markdown id: tags:
<h3style="color:teal;background-color:azure;"><iclass="fa fa-pencil"aria-hidden="true"></i> Exemple 7: 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.
`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:
``` python
fromrandomimport*
tentatives=0
resultat=0
whileresultat!=6:
resultat=randint(1,6)
tentatives=tentatives+1
print("Tentative:",tentatives,":",resultat)
print("Vous avez obtenu un 6 après",tentatives,"essais.")
```
%% Cell type:markdown id: tags:
## Sortir avec `break`
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=[]
whileTrue:
nom=input('Entrez un nom: ')
ifnom=='':
break
noms.append(nom)
print(noms)
```
%% 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:
## **2️⃣ Série d'exercices simples**
💡 **Objectif** : Écrire un programme qui affiche les nombres de 0 à 50.
💡 **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:
💡 **Objectif** : Afficher le menu (ci-dessous) d'un programme jusqu'à ce que l'utilisateur-trice saisisse "q" pour quitter.
```Python
- Menu -
1. Option une
2. Option deux
q. Quitter
Choisissez une option :
%% Cell type:code id: tags:
``` python
```
%%Celltype:markdownid:tags:
## **3️⃣ Exercice : Saisie sécurisée**
💡**Objectif**:Demanderunnombreentre1et10jusqu'à obtenir une entrée valide. Tant que le nombre saisi n'estpascomprisentre1et10,onreposelaquestion (input).
%%Celltype:codeid:tags:
``` python
```
%% Cell type:markdown id: tags:
## **4️⃣ Exercice : Lancer de dé jusqu'à obtenir un 6 🎲**
💡 **Objectif** : Lancer un dé jusqu'à obtenir un 6 et compter le nombre de tentatives.
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
## **5️⃣ Exercice : Le trait qui tourne**
💡 **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:
- le stylo de couleur bleu avance sur un segment droit de longueur 5;
- puis tourne de 70° vers la droite.
- 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.
Tester ensuite le programme avec une rotation de 89° au lieu de 70°.
Dessinez une usine avec un toit en dents de scie.

%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
---
#### Remarque générale
Ce document est une adaptation d'un ressource pédagogique tiré du catalogue modulo https://modulo-info.ch/. Il est sous license Creative Commons [BY-NC-SA](https://creativecommons.org/licenses/?lang=fr)