12 Cours Boucle While
Boucle while⚓︎
En python, la boucle while est utilisée pour exécuter un bloc d’instructions à plusieurs reprises jusqu’à ce qu’une condition donnée soit remplie. Et lorsque la condition devient fausse, la ligne immédiatement après la boucle dans le programme est exécutée.
Syntaxe⚓︎
while condition/expression:
instructions
Toutes les instructions indentées par le même nombre d’espaces de caractères sont considérées comme faisant partie d’un seul bloc de code. Python utilise l’indentation comme méthode de regroupement des instructions.
Exemple⚓︎
nb = 1
while nb <= 5:
print(nb)
nb += 1
1
2
3
4
5
La boucle while est dite non bornée, on ne sait pas forcément d'avance combien de fois elle va s'exécuter. Il est même possible qu'elle ne s'arrête jamais si la condition ne devient jamais fausse.
Condition de la boucle While et arrêt⚓︎
La boucle while exécute le bloc tant que la condition est Vraie.
En conséquence, on sort de la boucle lorsque la condition est Fausse.
La condition d'arrêt est donc le contraire de la condition d'exécution de la boucle while.
Je souhaite afficher la valeur de x jusqu'à ce qu'il dépasse 20.
La condition d'arrêt est x > 20.
La condition de la boucle while est donc x <= 20.
x = 1
while x <= 20:
print(x)
x += 1
Transformer une boucle for en une boucle while⚓︎
On a donc deux types de boucles : les boucles bornées (for) et les boucles non bornées (while).
Il est toujours possible de remplacer une boucle for par une boucle while en tenant un compteur qui parcourt la séquence, et une condition de boucle qui vérifie qu'il reste des éléments à parcourir.
for i in range(5):
print(i)
i = 0
while i < 5:
print(i)
i += 1
C'est d'ailleurs en ce sens que, dans d'autres langages, la boucle for s'écrit for(i = 0 ; i < n ; i++).
On reconnaît l'initialisation du i (i = 0), la condition de la boucle while (i < n), et l'incrémentation du compteur i (i++).
De même,
msg = 'Bonjour'
for lettre in msg:
print(lettre)
msg = 'Bonjour'
i = 0
while i < len(msg):
print(msg[i])
i += 1
Attention, transformer une boucle while en boucle for n'est pas toujours possible (on rappelle que la boucle while est non bornée).
Boucles imbriquées⚓︎
Python permet d’utiliser une boucle dans une autre boucle (boucles imbriquées).
Syntaxe⚓︎
while condition1:
while condition2:
instructions
Exemples⚓︎
Remarque. On peut placer n’importe quel type de boucle à l’intérieur de tout autre type de boucle.
Par exemple, une boucle for peut être à l’intérieur d’une boucle while et vice versa.
Instructions de contrôle de boucle⚓︎
Les instructions de contrôle de boucle modifient l’exécution normale de la séquence.
Instruction continue⚓︎
Elle permet de passer prématurément au tour de boucle suivant sans exécuter ce qui suit l’itération en cours.
L = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
print("Voici les jours de la semaine sauf Jeudi et Vendredi :")
for i in range(len(L)):
if i == 3 or i == 4:
continue
print(L[i], end=" ")
Voici les jours de la semaine sauf Jeudi et Vendredi :
Lundi Mardi Mercredi Samedi Dimanche
Instruction break⚓︎
Elle termine la boucle courante et reprend l’exécution à la prochaine instruction après la boucle.
L = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
# Quitter si le jour est jeudi
for i in range(len(L)):
if i == 3:
break
print(L[i], end=" ")
print("\nC'est fini")
Lundi Mardi Mercredi
C'est fini
Instruction pass⚓︎
On utilise l’instruction pass pour écrire des boucles vides. pass est également utilisé pour des instructions de contrôle, les fonctions et les classes vides.
L = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
for jour in L:
pass
class ClasseVide:
pass
Pass⚓︎
En cas de besoin d’un bloc de code qui ne fait rien, on utilise le mot clé pass
Exemple : une boucle infinie⚓︎
condition = True
while condition:
pass
En pratique, vous n'avez pas forcément besoin pour coder.
En revanche, je l'utiliserai pour vous donner du code à compléter.
Terminaison de la boucle while⚓︎
Exercice 1⚓︎
La boucle while se termine-t-elle ?
x = 10
while x > 0:
print(x-1)
Solution
Non, elle ne se termine pas car, au départ, \(x = 10\), donc on rentre dans la boucle while, puis \(x\) n'est pas modifié. Donc la condition \(x > 0\) restera vraie indéfiniment.
x = 10
while x > 0:
print(x-1)
Exercice 2⚓︎
x = 10
while x > 0:
print(x)
x = x - 1
Solution
Oui, la boucle se termine.
Justification : x est décrémenté à chaque itération et atteindra donc forcément 0.
À retenir⚓︎
La terminaison d'une boucle while fait référence à la garantie que la boucle s'arrêtera à un moment donné et ne s'exécutera pas indéfiniment. Pour qu'une boucle while se termine, deux conditions doivent être remplies :
- La condition de la boucle doit devenir fausse à un moment donné.
- Le corps de la boucle doit modifier l'état du programme de manière à progresser vers la condition d'arrêt.
Si ces conditions ne sont pas remplies, la boucle risque de ne jamais se terminer, créant ce qu'on appelle une "boucle infinie".