1.3 Boucle While⚓︎
1. Premiers exemples⚓︎
À la différence essentielle des boucles for, dont on peut savoir à l'avance combien de fois elles vont être exécutées, les boucles while sont des boucles dont on ne sort que lorsqu'une condition n'est plus satisfaite.
Avec donc le risque de rester infiniment bloqué à l'intérieur !

Exemple fondateur n°1
Le programme suivant :
1 2 3 4 5 | |
ok
ok
ok
fini
Analyse grâce à PythonTutor
Question
le code ci-dessous va-t-il donner un résultat différent ?
1 2 3 4 5 | |
Résultat du programme ⏬
ok
ok
ok
fini
Conclusion : l'évaluation de la condition ne se fait pas à chaque ligne mais bien au début de chaque tour de boucle. Si la variable qui déclenchera la sortie de boucle atteint sa valeur de sortie au milieu des instructions, les lignes restantes sont quand même exécutées.
2. Syntaxe générale⚓︎
Écriture d'une boucle while
while condition:
instruction1
instruction2
...
instructionN
2.1 La condition⚓︎
La condition est un booléen, c'est-à-dire une expression que Python évaluera à True ou à False.
Prenons une variable a égale à 10.
>>> a = 10
>>> a
10
Voici différents tests sur cette variable a. Chacun de ces tests va donner un booléen, qui sera égal à True ou à False.
La syntaxe de ces tests est à connaître par cœur.
>>> a > 8
True
>>> a > 12
False
>>> a == 10
True
>>> a != 7
True
>>> a != 10
False
>>> a >= 10
True
Un cours sur les booléens aura lieu ici.
2.2 Les instructions⚓︎
Les instructions instruction1 jusqu'à instructionN sont exécutées dans cet ordre à chaque tour de boucle.
Attention : ces instructions doivent obligatoirement avoir un impact sur la
condition évaluée après le while(dans le cours sur la dichotomie, nous évoquerons la notion de variant de boucle).
Voir le piège n°1 ...
3. Les pièges ...⚓︎
3.1 piège n°1 : ne JAMAIS SORTIR de la boucle⚓︎
Exemple fondateur n°2
Le programme suivant :
1 2 3 4 5 6 | |
ok et ne jamais s'arrêter
3.2 piège n°2 : ne JAMAIS ENTRER dans la boucle⚓︎
Exemple fondateur n°3
Le programme suivant :
1 2 3 4 5 6 | |
va écrire fini et s'arrêter.
Exercice 1
Trouver le plus petit nombre entier \(n\) tel que \(2^n\) soit supérieur à 1 milliard.
Correction
1 2 3 4 | |
4. Quelques remarques⚓︎
4.1 Lien entre while et for⚓︎

La boucle bornée for que nous avons étudiée est très pratique.
Mais nous pourrions nous en passer : toutes les boucles for peuvent en fait être ré-écrites en utilisant while. (alors que la réciproque est fausse)
Exercice 2
On considère le code ci-dessous :
1 2 | |
while.
Correction
1 2 3 4 | |
4.2 Les boucles infinies volontaires⚓︎

La boucle infinie a été présentée comme un danger qu'il faut éviter.
Pourtant, dans quelques situations, il est d'usage d'enfermer volontairement l'utilisateur dans une boucle infinie.
Observez et exécutez le code suivant :
1 2 3 4 5 6 | |
- le début du code :
while Trueest typique des boucles infinies volontaires. On aurait tout aussi bien pu écrirewhile 3 > 2(on rencontre même parfois deswhile 1) - vous avez découvert l'expression
breakqui comme son nom l'indique permet de casser la boucle (cela marche pourwhilecomme pourfor) et donc d'en sortir. Son emploi est controversé parmi les puristes de la programmation. Nous dirons juste que c'est une instruction bien pratique.
Exercice 3
Reprendre l'exemple précédent en faisant deviner un mot de passe (préalablement stocké dans une variable).
Correction
1 2 3 4 5 6 7 | |
mieux :
1 2 3 4 5 6 7 8 | |