Aller au contenu

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⚓︎

🐍 Script Python
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⚓︎

🐍 Script Python
nb = 1
while nb <= 5:
    print(nb)
    nb += 1
📋 Texte
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.

📋 Texte
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.
🐍 Script Python
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.

🐍 Script Python
for i in range(5):
    print(i)
est équivalent à :

🐍 Script Python
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,

🐍 Script Python
msg = 'Bonjour'
for lettre in msg:
    print(lettre)
est équivalent à :

🐍 Script Python
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⚓︎

🐍 Script Python
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.

🐍 Script Python
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=" ")
📋 Texte
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.

🐍 Script Python
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")
📋 Texte
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.

🐍 Script Python
L = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche']
for jour in L:
    pass
🐍 Script Python
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⚓︎

📋 Texte
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 ?

🐍 Script Python
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.

🐍 Script Python
x = 10
while x > 0:
    print(x-1)

Exercice 2⚓︎

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

  1. La condition de la boucle doit devenir fausse à un moment donné.
  2. 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".