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 :
🐍 Script Python | |
---|---|
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 ?
🐍 Script Python | |
---|---|
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
.
Exemple de booléens résultant d'une évaluation :
>>> 1 < 3
True
>>> 5 > 7
False
>>> a = 10
>>> a > 8
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 :
🐍 Script Python | |
---|---|
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 :
🐍 Script Python | |
---|---|
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.
🐍 Script Python | |
---|---|
1 2 3 4 5 |
|
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 :
🐍 Script Python | |
---|---|
1 2 |
|
while
.
🐍 Script Python | |
---|---|
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.
C'est notamment le cas des codes Processing (ou p5) où la fonction draw()
est une boucle infinie dont on ne sort que lorsqu'un évènement est intercepté (par exemple, le clic sur la fermeture de la fenêtre d'affichage).
Observez et exécutez le code suivant :
🐍 Script Python | |
---|---|
1 2 3 4 5 6 |
|
- le début du code :
while True
est 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
break
qui comme son nom l'indique permet de casser la boucle (cela marche pourwhile
comme 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
Proposer un code qui choisit un nombre aléatoire entre 1 et 10, puis qui propose en boucle à l'utilisateur de le deviner, tant que celui-ci n'a pas trouvé.
Aides :
int()
permet de convertir une chaîne de caractères en nombre.- pour avoir un nombre
a
pseudo-aléatoire :
from random import randint
a = randint(1,10)
🐍 Script Python | |
---|---|
1 2 3 4 5 6 7 8 9 |
|