Crédit photo de l’image illustrant l’article
Sommaire
- La boucle while
- Les erreurs à éviter
- La boucle for in range
- Parcourir une liste
- 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.