Imaginez que vous avez un bloc de code que vous voulez répéter plusieurs fois. Vous pouvez naturellement le stocker dans une fonction et appeler cette fonction autant de fois que nécessaire. Cela fonctionnerait, mais reviendrait un peu à chasser une mouche avec un bazooka : ça marche, mais ce n’est pas forcément la solution la plus optimale ;). D’autant plus que, généralement, on ne sait pas forcément à l’avance le nombre de fois que l’on va avoir besoin de répéter ledit bloc.
Les boucles permettent de résoudre cette problématique ! En programmation, une boucle est une structure qui permet de répéter une ou plusieurs instructions, sans avoir à les réécrire à chaque fois. Il existe deux types de boucles (for et while), que vous allez à présent expliciter.
“Bouclez” un nombre de fois fixé avec la boucle FOR
Les boucles for vont être utilisées lorsque l’on sait par avance le nombre de fois où une action va être répétée.
La boucle for sur une collection
L’utilisation classique des boucles en Python se fait en utilisant directement les différentes valeurs d’une collection. Voici un exemple avec une liste :
Le résultat affiché correspond à chaque élément de la liste pris un à un. Détaillez un peu ce qui a été réalisé dans le code ci-dessus :
Vous avez créé une liste
myList
contenant 4 éléments : 7, 2, 4 et 10.La boucle va stocker la première valeur de la liste (ici 7) dans la variable
elt
.Ensuite, l’ensemble du bloc de code associé à la boucle for (défini via l’indentation... encore !) est exécuté avec
elt
ayant la première valeur. Ici, ce bloc consiste juste à afficherelt
.Une fois cela fait,
elt
va prendre la seconde valeur de la liste (ici 2) et l’on réexécute le bloc de code.La boucle va continuer ainsi jusqu’à ce que l’ensemble des valeurs de votre liste aient été stockées dans la variable
elt
et que les instructions relatives à la boucle aient été exécutées pour chacune d’elles.
Voici un diagramme pour comprendre la logique de Python derrière la boucle :
Vous pouvez également itérer via un string ! Rappelez-vous que l’on appelle les stringsdes "chaînes de caractères" en français, justement, car ils représentent une collection de caractères, de façon similaire à une liste.
monString = "Eléments"
for elt in monString:
print(elt)
Dans ce cas, elt
va prendre successivement chaque caractère de votre string.
La boucle for via une valeur itérative entière
Si l’on veut vraiment boucler via une valeur itérative entière en Python pour revenir à une boucle for plus classique en termes de programmation, on va en réalité devoir contourner le problème. Vous allez itérer au travers d’une liste qui contiendra les différentes valeurs de votre entier itératif. Pour cela, vous utiliserez la fonction range(début, fin, pas)
, qui va générer une liste de nombres selon trois paramètres :
début
: le premier nombre de laséquence
;fin
: correspond au dernier nombre de la séquence non inclus. La fonction va générer des nombres dedébut
àfin- 1
;pas
: le pas entre chaque nombre généré.
Tous les paramètres ne sont pas nécessaires. Par exemple :
for i in range(0, 5, 1):
print(i) # -> affiche de 0 à 4 par pas de 1 (fin - 1)
for i in range(0, 5):
print(i) # -> affiche de 0 à 4 également (le pas par défaut est 1)
for i in range(5):
print(i) # -> affiche de 0 à 4 également (le début par défaut est 0)
for i in range(0, 5, 2):
print(i) # -> affiche 0, 2 puis 4
La boucle for est parfaitement adaptée lorsque vous avez à réaliser une action un certain nombre de fois connu à l’avance ou une action pour chaque élément d’une collection. Pour l’ensemble des autres cas, on peut réaliser une boucle conditionnelle : une boucle qui n’itère pas via une collection, mais selon une condition.
“Bouclez” selon une condition avec la boucle WHILE :
La boucle conditionnelle est la boucle while en Python.
"While" en anglais signifie "tant que", et comme vous pouvez le deviner par le nom, la boucle va tourner tant qu’une condition est réalisée. C’est une sorte de combinaison entre une boucle for et une structure if. Le nombre de répétitions n’est pas défini à l’avance, mais via une condition à réaliser, comme avec un if. On appelle cela une boucle conditionnelle.
Voici comme se présente la syntaxe :
while expressionLogique:
# bloc à exécuter
Elle peut être interprétée comme : tant que mon expression logique est vraie, exécute le bloc d’instruction.
Voilà comment cela fonctionne :
Le programme vérifie que
expressionLogique
est égal àTrue
.Si c’est le cas, les instructions indentées à la suite des
:
sont exécutées. Une fois que cela est fait, on retourne à l’étape 1.Sinon, le programme sort de la boucle sans exécuter les instructions.
Essayez avec l’exemple ci-dessous :
nombreArbres = 0
while nombreArbres < 10:
nombreArbres += 1
print("J'ai planté", nombreArbres, "arbres")
print("J'ai une chouette forêt !")
Cela va produire le résultat suivant :
À chaque tour de boucle, nombreArbres
est incrémenté de 1. Lorsque la variable atteint la valeur 10, l’expression nombreArbre < 10
n’est plus vraie ! À ce moment, la boucle se termine et exécute le reste du programme à la suite. Dans ce cas précis, cela affiche : "J’ai une chouette forêt !"
Voici un exemple à ne surtout pas reproduire chez vous (celui-ci a été réalisé par un professionnel...) :
leSoleilBrille = True
while leSoleilBrille:
print("Reste éveillé... pour toujours !")
# leSoleilBrille ne change jamais, donc la condition est toujours vraie
# nous n'atteignons donc jamais cette ligne
print("Il est temps d'aller dormir !")
C’est une erreur courante et malheureusement très vite arrivée. Donc soyez vigilant !
Essayez par vous-même
Faites tourner vous même quelques boucles dans l'exercice suivant.
Vous trouverez la correction ici même.
Passez certaines instructions au sein de votre boucle
Peu importe le type de boucle, il y aura des situations où vous allez vouloir passer certaines itérations au sein de votre boucle, voire interrompre cette dernière prématurément.
Par exemple, vous voulez répéter quelque chose 10 fois, mais passer (au moins partiellement) lorsque la valeur est égale à 2 ou 5. En Python, pour passer une itération dans une boucle, vous utilisez le mot clé continue
:
for i in range(10):
# instructions réalisées à chaque itération
print(i)
if (i == 2) or (i == 5):
print("Cas spécial")
continue
# instructions non exécutées si i == 2 or 5
print("i != 2 & i != 5")
Vous pouvez aussi décider d’interrompre la boucle, lorsque par exemple on cherche un élément particulier dans une liste. Pour cela, vous utiliserez le mot clé break
:
panier = ["pomme", "orange", "banane"]
for fruit in panier:
if fruit == "orange":
print("J'ai une", fruit, "!")
break
Une fois que le fruit a été trouvé dans votre panier, vous finissez la boucle.
En résumé
Dans ce chapitre, vous avez découvert 2 types de boucles :
celle pour répéter une action un certain nombre de fois fixé, ou selon une séquence : la boucle for ;
la boucle vous permettant de répéter une action tant qu’une condition est vraie : la boucle while.
Il y a une erreur courante à ne pas commettre avec la boucle while : la boucle infinie !
Vous pouvez choisir de passer certains tours de boucle via le mot clé continue.
Les cycles de la boucle peuvent être interrompus via la commande break.
Maintenant que vous avez vu comment organiser votre code via différentes structures, vous allez à présent ouvrir votre horizon avec la découverte des modules et des librairies !