Leçons du module (2/4)
Boucles while
La boucle while répète un bloc tant qu'une condition reste vraie. Utilisez
while lorsque vous ne savez pas à l'avance de combien d'itérations vous aurez besoin :
le nombre de tours dépend de quelque chose qui change à l'intérieur de la boucle.
Syntaxe
n = 1
while n < 1000:
n = n * 2
n # 1024Le bloc indenté est exécuté à plusieurs reprises. Avant chaque itération, Python évalue la condition : dès qu'elle devient fausse, la boucle se termine et l'exécution continue après le bloc.
Modèles courants
Compteur manuel — équivalent à un for classique dans d'autres langages :
i = 0
while i < 5:
print(i)
i = i + 1Boucle infinie + condition de sortie interne — utile lorsque la condition est évaluée après avoir fait quelque chose :
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 is the first square > 100)break quitte immédiatement la boucle la plus interne.
L'erreur classique : la boucle infinie
Si la variable de la condition ne change pas à l'intérieur de la boucle,
le programme ne se termine jamais. C'est le bogue numéro un avec while :
n = 0
while n < 10:
print(n) # n is never modified → infinite loop!Dans nos exercices, il y a un délai d'exécution, donc une boucle infinie échouera avec un message clair au lieu de geler le navigateur. Mais en production, une boucle infinie est un bogue sérieux.
Risque de boucles infinités et conditions de terminaison
Une boucle while s'exécute tant que sa condition est évaluée à True. Si vous oubliez de mettre à jour les variables qui affectent la condition, votre boucle s'exécutera indéfiniment, gelant le runtime. Assurez-vous toujours que le corps de la boucle progresse vers la condition de sortie.
À vous de jouer
Trouvez le plus petit entier `n >= 1` tel que 2**n dépasse un million. Assignez-le à `result` et évaluez-le (il devrait être égal à 20).
Afficher l'indice
2**20 = 1 048 576 est le premier à dépasser 1 000 000.
Solution disponible après 3 tentatives
Exercice de révision
En partant de `n = 1000`, divisez par deux n avec division entière (n // 2) jusqu'à ce qu'il devienne 0. Comptez le nombre d'itérations nécessaires dans `steps`. Évaluez `steps`.
Afficher l'indice
1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0 : dix étapes.
Solution disponible après 3 tentatives
Défi supplémentaire
Étant donné la variable `n = 32`, écrivez une boucle `while` pour compter combien de fois vous pouvez diviser `n` par 2 (en utilisant la division entière `//`) avant que `n` ne devienne inférieur ou égal à 1. Stockez le compte dans `divisions` et évaluez-le.
Afficher l'indice
La condition du while est n > 1. Dans la boucle, divisez n par 2 et incrémentez divisions de 1.
Solution disponible après 3 tentatives