Passer au contenu principal
eLearner.app
Module 2 · Leçon 2 sur 46/36 dans le cours~8 min
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

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

Le 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 :

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

Boucle infinie + condition de sortie interne — utile lorsque la condition est évaluée après avoir fait quelque chose :

Python
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 :

Python
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

Exercice#python.m2.l2.e1
Tentatives : 0Chargement…

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).

Chargement de l'éditeur…
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

Exercice#python.m2.l2.e2
Tentatives : 0Chargement…

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`.

Chargement de l'éditeur…
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

Exercice#python.m2.l2.e3
Tentatives : 0Chargement…

É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.

Chargement de l'éditeur…
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