3.4. Les boucles

Les boucles (« loops » en anglais) permettent au programme de répéter plusieurs instructions sans avoir à réécrire le code plusieurs fois. Elles sont donc utiles, voire nécessaires, en programmation car nous avons souvent besoin de répéter certaines opérations.

Il existe deux types de boucles : while et for. Nous parlerons uniquement de la première dans ce chapitre. La seconde sera introduite par la suite.

3.4.1. Tant que

En Python, while (« tant que ») est un mot réservé qui permet de répéter un bloc d’instructions tant qu’une condition est vraie. Le bloc est constitué des instructions qui devront être exécutées à chaque parcours (ou itération) de la boucle.

La syntaxe de la boucle while est la suivante.

while test_expression:
    instructions

La boucle commence par le mot réservé while, l’expression de test ou condition, et le symbole :. Puis suivent les instructions qui devront s’exécuter tant que l’expression de test est vérifiée. Ces instructions doivent être correctement indentées par rapport au while.

Note

Comme pour les structures conditionnelles, le bloc d’instructions (corps de la boucle) peut être constitué de plusieurs lignes. Chaque nouvel élément doit être ajouté à la ligne et au même niveau d’indentation que la première ligne du bloc. Chaque niveau d’indentation représente donc un bloc d’instructions. Il est évidemment possible pour une boucle d’être elle-même dans une boucle, ce qui va nécessiter un niveau d’indentation supplémentaire.

La figure 3.5 ci-dessous présente sous forme d’organigramme le schéma d’exécution de la structure conditionnelle while.

Boucle `while`

Fig. 3.5 Boucle while.

On pourra facilement utiliser une boucle pour afficher, par exemple, tous les nombres entiers entre 0 et 9.

a = 0

while a < 10:  # tant que `a` est plus petit que 10
    print(a)   # on l'affiche
    a = a + 1  # puis on l'incrémente de 1
0
1
2
3
4
5
6
7
8
9

Dans l’exemple ci-dessus, on commence par créer une variable a à laquelle on assigne la valeur de 0. Ensuite vient la boucle while. On lui associe la condition « a est-il plus petit que 10 ? », puis on indique les instructions à exécuter tant que cette condition est vraie. Ici, on affiche la valeur de a puis on l’ui ajoute 1 (on l”incrémente).

L’incrémentation, qui consiste à assigner à une variable sa propre valeur augmentée d’un nombre, généralement 1, est très courante en programmation. On l’écrit v = v + n, où v est la variable à incrémenter et n le nombre qu’on souhaite lui ajouter. Cette opération étant fréquemment utilisée, Python propose des raccourcis syntaxiques pour l’incrémentation ainsi que pour d’autre opérations courantes sur les variables. La table ci-dessous en mentionne quelques-uns.

Raccourcis syntaxiques

Raccourci

Équivalent

a += b

a = a + b

a -= b

a = a - b

a *= b

a = a * b

a /= b

a = a / b

3.4.2. Modifier le déroulement des boucles

Il arrive que l’on souhaite modifier le déroulement d’une boucle en cours de route. Considérons par exemple le cas du programme suivant qui calcule la somme de valeurs entrées par l’utilisateur jusqu’à ce que ce dernier entre la lettre q.

stop = False
total = 0
while not stop:  # variable booléenne utilisée comme condition d'arrêt
    n = input("Valeur suivante (ou 'q') : ")
    if n == 'q':
        stop = True
    else:
        total += float(n)
print("Total : " + str(total))
Valeur suivante (ou 'q') : 2
Valeur suivante (ou 'q') : 3
Valeur suivante (ou 'q') : 6
Valeur suivante (ou 'q') : q
Total : 11.0

Déclarer une condition d’arrêt en dehors de la boucle fonctionne comme prévu, mais Python propose une alternative qu’il est bon de connaître. On peut interrompre une boucle à tout moment grâce au mot-clé break. Un avantage de cette méthode est que la boucle s’interrompt instantanément et le reste du bloc d’instructions n’est pas exécuté.

total = 0
while True:  # boucle sans condition d'arrêt, dite "infinie"
    n = input("Valeur suivante (ou 'q') : ")
    if n == 'q':
        break
    total += float(n)
print("Total : " + str(total))

De la même manière, le mot-clé continue est un raccourci qui permet de passer immédiatement à l’itération suivante de la boucle, sans que le reste du bloc d’instructions ne soit exécuté. Cela permettra par exemple d’ignorer les valeurs négatives dans notre somme comme illustré ci-dessous (on notera que le même programme peut aisément être réalisé sans utiliser l’instruction continue).

total = 0
while True:
    n = input("Valeur suivante (ou 'q') : ")
    if n == 'q':
        break
    if float(n) < 0:
        continue
    total += float(n)
print("Total : " + str(total))

La figure 3.6 ci-dessous présente sous forme d’organigramme le principe d’utilisation des instructions break et continue dans une boucle while.

Instructions `break` et `continue` dans une boucle `while`

Fig. 3.6 Instructions break et continue dans une boucle while.