Section 4.5

Boucles

Un hamster dans sa roue.

Dans cette section, nous allons apprendre à écrire des programmes qui peuvent répéter plusieurs fois un bloc de code.

Pour cela, nous allons utiliser des boucles. Une boucle est une structure de contrôle qui permet de répéter un bloc de code à plusieurs reprises.

En Python, il existe deux types de boucles :

  • La boucle while qui répète un bloc de code tant qu'une condition est vraie.
  • La boucle for qui répète un bloc de code pour toutes les valeurs dans une collection de valeurs, comme par exemple un intervalle.

La boucle while

La boucle while permet de répéter un bloc de code tant qu'une condition est vraie. Voici un exemple de code qui utilise une boucle while :

compteur = 0 while compteur < 10: print(compteur) compteur = compteur + 1 print("Fin du programme.")

À essayer

Essayez d'exécuter le programme ci-dessus. Qu'arrive-t-il ?

Le programme commence par définir une variable compteur qui vaut 0. Ensuite, on utilise la structure de contrôle while pour répéter un bloc de code tant que la condition compteur < 10 est vraie. Dans ce bloc de code, on affiche la valeur de la variable compteur et on incrémente la variable compteur de 1. Une fois que la condition n'est plus vraie, on sort de la boucle et on affiche un message pour indiquer que le programme est terminé.

Notez que le bloc de code qui est répété doit être indenté, suivant les mêmes règles que pour les instructions conditionnelles vues dans la section précédente.

Lorsque Python exécute une boucle while, il commence par évaluer la condition. Si la condition est vraie, alors le bloc de code est exécuté. Ensuite, Python évalue à nouveau la condition. Si la condition est toujours vraie, alors le bloc de code est exécuté à nouveau. Et ainsi de suite, jusqu'à ce que la condition devienne fausse. Une fois que le calcul de la condition donne False, Python sort de la boucle et continue l'exécution du programme.

! Remarque

Il est possible que la condition d'une boucle while ne soit jamais fausse. Dans ce cas, le programme ne s'arrêtera jamais, sauf si on interrompt son exécution. On appelle ce genre de boucles des boucles infinies. Le plus souvent, ce genre de boucle est une erreur de programmation, mais il peut arriver que ce soit voulu.

! Remarque

On appelle une itération le fait de répéter une fois le bloc de code d'une boucle. Dans l'exemple ci-dessus, la boucle while est répétée 10 fois. Lors de la première itération, la valeur 0 est affichée. Lors de la deuxième itération, la valeur 1 est affichée. Et ainsi de suite jusqu'à ce que la valeur 9 soit affichée, lors de la dernière itération.

La condition d'une boucle while est calculée lorsque Python rencontre la boucle lors de l'exécution, puis est recalculée après chaque itération. Si le calcul de la condition a des effets de bord, alors ces effets de bord seront répétés à chaque itération. Voici un exemple de code qui illustre ce point :

while input("Entrez 0, s'il vous plaît : ") != "0": print("Vous n'avez pas entré 0, non mais...") print("Vous avez fini par entrer 0.") print("Merci !")

À essayer

Essayez d'exécuter le programme ci-dessus. Qu'arrive-t-il lorsque vous entrez 0 ? Et si vous entrez autre chose ?

Le programme utilise une boucle while pour répéter un bloc de code tant que l'utilisateur n'a pas entré un 0. La condition de la boucle est input("Entrez 0, s'il vous plaît : ") != "0". Notez que cette condition est calculée avant chaque éventuelle itération, c'est pourquoi l'utilisateur est invité à entrer une valeur à chaque fois.

La boucle for

La boucle for permet de répéter un bloc de code pour toutes les valeurs dans une collection de valeurs. Voici un exemple de code qui utilise une boucle for :

print("Début du programme.") for i in range(10): print(i) print("Fin du programme.")

La syntaxe de la boucle for est la suivante :

  • Tout d'abord, on utilise le mot-clé for pour indiquer que l'on va utiliser une boucle for.
  • Ensuite, après un espace, on donne un nom de variable qui va successivement contenir les différentes valeurs de la collection de valeurs. En général, on utilise la lettre i pour ce nom de variable.
  • Ensuite, après un nouvel espace, on entre le mot-clé in.
  • Après un nouvel espace, on donne la collection de valeurs.
  • On termine la ligne par un deux-points :.
  • Après cela, on donne le bloc de code qui sera répété pour chaque valeur de la collection de valeurs. Ce bloc de code doit être indenté.

La fonction range

Dans l'exemple plus haut, la collection de valeurs est range(10). La fonction range permet de créer une collection de valeurs comprises dans un intervalle. Lorsqu'on ne lui fournit qu'un seul argument, l'intervalle est de 0 à l'argument non-compris. Il est aussi possible de donner deux arguments à la fonction range. Dans ce cas, le premier argument est la valeur de départ de l'intervalle et le second argument est la valeur de fin, à nouveau non-comprise.

for i in range(5, 10): print(i)

La fonction range peut aussi prendre un troisième argument. Dans ce cas, cet argument est le pas de l'intervalle : la distance qui sépare deux valeurs consécutives dans l'intervalle. Par exemple :

for i in range(3, 10, 2): print(i)

Notez que le calcul qui donne la collection de valeurs est effectué une seule fois. Observez par exemple le code suivant :

for i in range(int(input("Jusqu'à combien voulez-vous compter ? "))): print(i)

Lorsque le code ci-dessus est exécuté, Python demande à une unique reprise à l'utilisateur de saisir un nombre. En effet, le calcul range(int(input("Jusqu'à combien voulez-vous compter ? "))) n'est effectué qu'une seule fois, avant l'exécution des itérations de la boucle.

Autres collections de valeurs

Il existe d'autres collections de valeurs que la fonction range. Nous verrons d'autres exemples de collections de valeurs dans les prochains chapitres.

Combiner les boucles

Il est possible d'imbriquer des boucles, comme on a imbriqué des instructions conditionnelles dans le chapitre précédent. On parle dans ce cas de boucles imbriquées. Cela signifie que l'on peut mettre une boucle à l'intérieur d'une autre boucle. Voici un exemple de code qui utilise des boucles imbriquées :

for i in range(10): for j in range(10): print(i, j)

Lorsque le code ci-dessus est exécuté, la première boucle est exécutée 10 fois. Pour chaque itération de la première boucle, la deuxième boucle est exécutée 10 fois. Ainsi, le code print(i, j) est exécuté 100 fois.

! Remarque

On utilise souvent la lettre j pour le nom de variable de la boucle imbriquée. Si l'on a besoin d'une troisième boucle imbriquée, on utilise la lettre k, et ainsi de suite.

De même, il est possible de combiner les boucles while et les boucles for. Tout comme il est possible de combiner les instructions conditionnelles et les boucles. Considérez l'exemple de code suivant :

n = int(input("Entrez un nombre : ")) while n > 0: for i in range(n): if i % 2 == 0: print(i, "est pair.") else: print(i, "est impair.") n = int(input("Entrez à nouveau un nombre : ")) if n == 0: print("Vous avez entré 0.") else: print("Vous avez entré un nombre négatif.") print("Fin du programme.")

À essayer

Inspectez le code ci-dessus et essayez de comprendre ce qu'il fait. Ensuite, exécutez le code et entrez différents nombres pour vérifier votre compréhension.

Sortir d'une boucle avec break

Il est possible de sortir d'une boucle (while ou for) à tout moment en utilisant l'instruction break. Par exemple, considérez le code suivant :

while True: n = int(input("Entrez un nombre : ")) if n == 0: break print("Vous avez entré", n)

Lorsque Python rencontre le mot-clé break lors de l'exécution d'une boucle, il sort immédiatement de la boucle. Dans le cas de boucles imbriquées, l'instruction break permet de sortir de la boucle la plus imbriquée.

for i in range(5): for j in range(5): if i == j: break print(i, j)

Dans le code ci-dessus, l'instruction break permet de sortir de la boucle la plus imbriquée lorsque la valeur de i est égale à la valeur de j. Notez que seule la boucle la plus imbriquée est interrompue. La boucle externe continue à s'exécuter normalement.

Passer à l'itération suivante avec continue

Le mot-clé continue permet de passer directement à l'itération suivante d'une boucle (while ou for). Par exemple, considérez le code suivant :

for i in range(10): if i % 3 == 0: continue print(i)

Lorsque Python rencontre l'instruction continue dans une boucle, il passe directement à l'itération suivante de la boucle. Ainsi, dans le code ci-dessus, les valeurs 0, 3, 6 et 9 ne sont pas affichées.

Dans le cas de boucles imbriques, comme pour l'instruction break, l'instruction break agit sur la boucle la plus imbriquée.

! Remarque

En pratique, on tâchera de limiter l'utilisation des instructions break et continue. En effet, leur utilisation peut rendre le code plus difficile à comprendre. Cependant, dans certains cas, elles peuvent être utiles et permettre d'écrire un code plus concis et plus compréhensible.

Auto-évaluation

En Python, pour exécuter un bloc de code tant qu'une condition est vraie, on utilise une boucle , tandis que pour exécuter un bloc de code pour chaque élément d'une collection, on utilise une boucle .

Auto-évaluation

La fonction range permet de créer une collection de valeurs comprises dans un intervalle. Lorsqu'on ne lui fournit qu'un seul argument, l'intervalle est de à .

Auto-évaluation

Adaptez le code suivant afin qu'il affiche la table de multiplication de 7 de 0 à 10. Utilisez une boucle.

n = 7 print("Table de multiplication de", n, " :") print(1, "fois", n, "égal", 1 * n) print(2, "fois", n, "égal", 2 * n)

Auto-évaluation

Concevez un programme qui affiche la table de multiplication de tous les nombres entiers de 2 à 10 par les nombres de 2 à 10. Utilisez une boucle imbriquée.

Auto-évaluation

Concevez un programme qui demande à l'utilisateur de saisir un mot de passe et qui lui redemande tant que le mot de passe n'est pas correct. Vous pouvez choisir le mot de passe que vous voulez. Une fois le mot de passe correct saisi, le programme affiche un message de bienvenue.

Dans cette section, nous avons vu comment utiliser les boucles while et for en Python. Nous avons également vu comment utiliser les instructions break et continue pour sortir d'une boucle ou passer à l'itération suivante.

Dans la section suivante, nous allons voir comment définir et utiliser nos propres fonctions en Python. Grâce à ces fonctions, nous pourrons réutiliser du code et éviter de répéter des instructions. Cela permettra, en quelque sorte, d'augmenter le vocabulaire de notre programme et ainsi de rendre notre code plus lisible.