4. Les boucles en Python

Crédit photo de l’image illustrant l’article

Sommaire

  1. La boucle while
  2. Les erreurs à éviter
  3. La boucle for in range
  4. Parcourir une liste
  5. Interrompre une boucle avec l’instruction break

Dans un programme, il est parfois nécessaire de répéter une instruction un certain nombre de fois. Pour cela, on utilise des boucles. Prenons un exemple concret : une punition qu’un écolier doit recopier deux cents fois. Au siècle dernier, le pauvre cancre devait patiemment recopier la phrase qui lui permettait d’expier sa faute : « Je ne collerai plus mon chewing-gum sous mon pupitre ».

1. La boucle while

Aujourd’hui, pour celui qui maîtrise les boucles, ce genre de punition est une formalité. En Python, pour en créer une, on utilise le mot-clé while. Cela signifie Tant que… C’est à dire Tant que la condition est vraie (True), exécute cette instruction. Il faut aussi prévoir une variable d’incrémentation qui interrompra la boucle si la condition devient fausse. Nous retrouvons là encore les Booléens.

Retournons voir ce que notre cancre, féru d’informatique libre, est en train de manigancer pour se débarasser aussi vite que possible de sa punition. Analysons son code ligne par ligne:

4 : Il stocke la punition dans une variable nommée punition.

5 : Il créé la variable d’incrémentation nommée par convention i. Sa valeur de départ est 1.

7 : Il ouvre la boucle et il définit que la condition deviendra fausse au 201ème tour de boucle, ce qui va provoquer l’interruption de cette dernière. Prenez garde de ne pas oublier les deux petits points avant d’indenter votre bloc d’instructions!

8 : La boucle exécute l’instruction en utilisant un formatage de type f-string.

9 : La variable i est incrémentée. Elle stocke désormais la valeur 2. Retour au début de la boucle et vérification que la variable i est toujours inférieure à la condition. C’est le cas. Alors, c’est reparti pour un tour de manège!

#!/usr/bin/python3
# -*-coding: utf8 -*-

punition = "Je ne collerai plus mon chewing-gum sous mon pupitre."
i = 1

while i <= 200:
    print(f'{i} : {punition}')
    i += 1

J’exécute le code :

1 : Je ne collerai plus mon chewing-gum sous mon pupitre.
2 : Je ne collerai plus mon chewing-gum sous mon pupitre.
3 : Je ne collerai plus mon chewing-gum sous mon pupitre.
(...)
198 : Je ne collerai plus mon chewing-gum sous mon pupitre.
199 : Je ne collerai plus mon chewing-gum sous mon pupitre.
200 : Je ne collerai plus mon chewing-gum sous mon pupitre.

2. Les erreurs à éviter

Oublier les deux petits points

i = 1
while i <= 200
    print(i)
    i += 1
SyntaxError: invalid syntax

Oublier l’indentation du bloc d’instructions

i = 1
while i <= 200:
print(i)
i += 1
IndentationError: expected an indented block

Incrémenter la variable i à l’extérieur de la boucle.

Qu’est-ce que ça provoque? Eh bien, la boucle ne peut pas incrémenter une variable qui est hors de sa portée. La variable i conserve sa valeur d’origine et la condition est toujours vraie. Nous sommes en présence d’une boucle infinie qui va finir par occuper toute la mémoire de votre ordinateur avant de le freezer puis de créer un mini trou noir qui va tout avaler et conduire à la destruction de l’Univers. Par conséquent, soyez prudents! Si par mégarde vous créez une boucle infinie, Le seul moyen de l’interrompre est de presser les touches ctrl + C.

i = 0
while i < 1:
    print(i)
i += 1 # Incrémentation hors du bloc indenté => boucle infinie

3. La boucle for in range

Il existe une autre manière de créer une boucle, en utilisant les mots-clés for… in range. Il est inutile de déclarer ni d’incrémenter la variable i, la boucle for s’en charge toute seule.

for i in range(0, 10):
    print(i)
1
2
3
4
5
6
7
8
9

4. Parcourir une liste

Avec for, il est possible de parcourir une liste pour, par exemple, en extraire les élements. Nous n’avons pas encore vu les listes. Nous les découvrirons en détail dans un prochain chapitre mais sachez qu’une liste est une collection d’éléments entourée de crochets. Chaque élément correspond à un indice de la liste. Le premier éleément correspond à l’indice 0, le second à l’indice 1 etc… Eh oui! En informatique, on commence toujours à compter à partir du zéro. Exemple:

liste_fruits = ["pommes", "poires", "oranges"]
print(liste_fruits[0], liste_fruits[1], liste_fruits[2])
pommes poires oranges

Avec for… in:

 liste_fruits = ["pommes", "poires", "oranges"]
 for fruit in liste_fruits:
     print(f"J'aime bien manger des {fruit}.")
J'aime bien manger des pommes.
J'aime bien manger des poires.
J'aime bien manger des oranges.

Avec for… in enumerate():

Avec cette structure, vous pouvez accéder à un élément de la liste grâce à son indice.

 liste_fruits = ["pommes", "poires", "oranges"]
 for i, fruit in enumerate(liste_fruits):
     print(f"J'aime bien manger des {liste_fruits[i]}.")
J'aime bien manger des pommes.
J'aime bien manger des poires.
J'aime bien manger des oranges.

5. Interrompre une boucle avec l’instruction break

L’instruction break est utile pour interrompre une boucle dont la condition de départ est toujours vraie. Voici un exemple que nous allons décortiquer ensemble. Créez un fichier dans votre répertoire utilisateur. Nommez-le hasard.py et rendez-le exécutable avec chmod.

chmod ./hasard.py
./hasard.py   # ou /home/$USER/hasard.py
#!/usr/bin/python3
# -*-coding: utf8 -*-

import random
import time

while 1:
    if random.randint(0, 10) == 5:
        print("Boucle interrompue")
        break
    else:
        print("La boucle continue...")
        time.sleep(1)

Nous allons importer deux modules qui sont random et time. Le premier va nous permettre de générer un nombre aléatoire. Le second va nous permettre de mettre le programme en pause pendant une seconde à chaque tour de boucle. Je définis la condition de la boucle comme étant toujours vraie : while 1. J’aurais pu dire aussi while True. C’est la même chose. En forme longue, cela s’écrit : while 1 == True. Je vous rappelle que tout ce qui n’est pas égal à 0 ou tout ce qui n’est pas un ensemble vide (une liste [] par exemple) est considéré comme vrai.

Je lance la recherche aléatoire d’un nombre entre 0 et 10. Vous pouvez vous-même changer ces valeurs. Si le nombre obtenue est égal à 5, la boucle affiche le message « Boucle interrompue » et l’instruction break arrête la boucle. Attention! Si vous placez le break avant le message, celui-ci n’apparaitra pas puisque la boucle sera déjà interrompue.

Si le nombre aléatoire est différent de 5, le message « La boucle continue » s’affiche et le programme se met en pause une seconde. Je viens d’exécuter le programme et voici ce que j’obtiens:

La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
La boucle continue...
Boucle interrompue

Conclusion

Voilà pour les boucles. Vous allez utiliser très souvent cette structure de contrôle. N’oubliez pas de définir une condition fausse (False) pour pouvoir sortir de la boucle.

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s