La boucle `while` : répéter tant que
Quand on ne sait pas combien de fois
for est parfait quand on connaît à l'avance ce qu'on parcourt. Mais parfois, on ne sait pas combien de tours il faudra :
- économiser chaque mois jusqu'à atteindre 100 000 FCFA ;
- redemander le mot de passe tant qu'il est faux ;
- lancer un dé jusqu'à obtenir un 6.
epargne = 0
mois = 0
while epargne < 100000:
epargne += 15000
mois += 1
print(f"Objectif atteint en {mois} mois")
Déroulé : 15 000 (1 mois), 30 000, 45 000, 60 000, 75 000, 90 000, 105 000 (7 mois). À ce moment, epargne < 100000 devient faux : on sort. Résultat : 7 mois.
Un while ressemble à un if qui se répète : même :, même bloc indenté.
Le danger : la boucle infinie
epargne = 0
while epargne < 100000:
print("J'économise...") # on a oublié d'augmenter epargne !
epargne reste à 0 pour toujours, donc la condition reste vraie pour toujours.
Que faire si ça arrive ?
- dans un vrai terminal :
Ctrl + Carrête le programme (tu te souviens, le « arrête tout » du premier module) ; - dans l'appli : elle arrête automatiquement tout programme qui tourne plus de 6 secondes, et te prévient.
Sortir plus tôt : break et continue
| Mot-clé | Effet |
|---|---|
break |
sort immédiatement de la boucle, même si la condition est encore vraie |
continue |
saute la fin de l'itération en cours et passe directement à la suivante |
Ils marchent dans les while comme dans les for. Par exemple, pour chercher le premier nombre négatif d'une liste et s'arrêter dès qu'on le trouve, break évite de parcourir la suite pour rien.
Exercice : L'objectif d'épargne
Tu économises par_mois FCFA chaque mois. Calcule dans mois le nombre de mois nécessaires pour atteindre au moins objectif. Utilise une boucle while.
Voir une solution
objectif = 100000 # donné
par_mois = 15000 # donné
epargne = 0
mois = 0
while epargne < objectif:
epargne += par_mois
mois += 1Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Répare : la boucle infinie
Ce programme devrait afficher 1, 2, 3, 4, 5. Il tourne à l'infini (l'appli va l'arrêter au bout de 6 secondes). Trouve ce qui manque.
Voir une solution
i = 1
while i <= 5:
print(i)
i += 1Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Chercher avec `break`
Parcours la liste temperatures avec une boucle for et range dans premiere_canicule la première température supérieure ou égale à 40. Arrête la boucle dès qu'elle est trouvée avec break.
S'il n'y en a aucune, premiere_canicule doit valoir None (la valeur « rien »).
Voir une solution
temperatures = [31, 35, 38, 41, 39, 43] # donné
premiere_canicule = None
for t in temperatures:
if t >= 40:
premiere_canicule = t
breakDans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Défi : la suite de Collatz
Partant de n, applique la règle de Collatz jusqu'à atteindre 1. Compte dans etapes le nombre de transformations nécessaires.
Pour 6 : 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1, soit 8 étapes.
Bonus facultatif : affiche aussi chaque nombre de la suite.
Voir une solution
n = 6 # donné
etapes = 0
while n != 1:
if n % 2 == 0:
n = n // 2
else:
n = 3 * n + 1
etapes += 1Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Teste-toi
Combien de fois ce code affiche-t-il « Tour » ?
python n = 10 while n > 0: print("Tour") n -= 3
- 3 fois
- 4 fois (bonne réponse)
- 10 fois
- Une infinité de fois
Au début de chaque tour, n vaut 10, 7, 4, 1 : 4 tours. Ensuite n vaut -2, la condition est fausse, on sort.