Les boucles permetent de répéter une instruction ( ou une liste d’instructions ) plusieurs fois.

Il y a principalement deux types de boucles - Les boucles pour répéter une instruction un certain nombre de fois, il s’agit de la boucle `for` - Les boucles pour répéter une instruction jusqu’a une condition d’arret, il s’agit des boucles `while`

Boucle for

Les boucles for permettent de répéter une instruction un nombre donné de fois. Elle se caractérisent par le fait que l’on connait à l’avance le nombre d’itérations que l’on va devoir effectuer. ![](data:image/svg+xml;charset=utf-8,%3Csvg xmlns%3D’http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg’ viewBox%3D'0 0 228 327’%2F%3E) ``` for i in range(4): print(“i a pour valeur”, i)

1
2
3
4
5
6

 Affichage après exécution : ```
i a pour valeur 0
i a pour valeur 1
i a pour valeur 2
i a pour valeur 3

L’instruction for est une instruction composée, c’est-à-dire une instruction dont l’en-tête se termine par deux-points :, suivie d’un bloc indenté qui constitue le corps de la boucle. On dit que l’on réalise une itération de la boucle à chaque fois que le corps de la boucle est exécuté. Dans l’en-tête de la boucle, on précise après le mot-clé for le nom d’une variable (i dans l’exemple ci-dessus) qui prendra successivement toutes les valeurs qui sont données après le mot-clé in. Pour parcourir les indices d’une liste, il est possible de combiner range() et len() comme ci-dessous: ``` c = [“Marc”, “est”, “dans”, “le”, “jardin”] for i in range(len(c)): print(“i vaut”, i, “et c[i] vaut”, c[i])

1
2
3
4
5
6
7

 Affichage après exécution : ```
i vaut 0 et c[i] vaut Marc
i vaut 1 et c[i] vaut est
i vaut 2 et c[i] vaut dans
i vaut 3 et c[i] vaut le
i vaut 4 et c[i] vaut jardin

Rappel : La fonction len() renvoie le nombre d’éléments : ```

c = [“Marc”, “est”, “dans”, “le”, “jardin”] len(c) 5

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

 Dans lexemple suivant, nous allons illustrer que la variable indiquée après `for` parcourt toutes les valeurs de la liste donnée après `in` : ```
c = ["Marc", "est", "dans", "le", "jardin"]
for i in c:
    print("i vaut", i)
>>>
i vaut Marc
i vaut est
i vaut dans
i vaut le
i vaut jardin

Boucle while

Les boucles tant que permettent d’effectuer des itérations tant qu’une certaine condition est verifiée. On ne connait pas le nombre d’itérations à effectuer, mais à chaque itération, on vérifie si la condition est vraie ou fausse. Sès que cette condition est fausse, on sort de la boucle. ### ![](data:image/svg+xml;charset=utf-8,%3Csvg xmlns%3D’http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg’ viewBox%3D'0 0 300 282’%2F%3E) Syntaxe :

1
2
while condition:
   Instruction A

Exemple de programme :

1
2
3
4
5
x = 1
while x < 10:
   print("x a pour valeur", x)
   x = x * 2
print("Fin")

Affichage après exécution : ``` x a pour valeur 1 x a pour valeur 2 x a pour valeur 4 x a pour valeur 8 Fin

1
2
3
4

 Le mot-clé `while` signifie tant que en anglais. Le corps de la boucle (cest-à-dire le bloc dinstructions indentées) sera répété tant que la condition est vraie. Dans lexemple ci-dessus, x sera multiplié par 2 tant que sa valeur reste inférieure à 10. <span style="text-decoration: underline;">**Remarque** </span>: Si la condition est fausse au départ, le corps de la boucle nest jamais exécuté. Si la condition reste toujours vraie, alors le corps de la boucle est répété indéfiniment. ## Comment choisir entre boucle for et boucle while

 En général, si on connaît avant de démarrer la boucle le nombre ditérations à exécuter, on choisit une boucle `for`. Au contraire, si la décision darrêter la boucle ne peut se faire que par un test, on choisit une boucle `while`. Par contre, il est toujours possible de remplacer une boucle for par une boucle while. ### Transformation d’une boucle for en un boucle while

for i in range(4): print(“i a pour valeur”, i)

1
2
3
4
5
6

 Le programme ci-dessus est équivalent à: ```
i = 0
while i < 4:
    print("i a pour valeur", i)
    i = i + 1

Les instructions break et continue, et la clause else dans les boucles

L’instruction break

L’instruction break permet de “casser” l’exécution d’une boucle (while ou for). Elle fait sortir de la boucle et passer à l’instruction suivante. #### Exemple

1
2
3
4
5
6
7
for i in range(10):
   print("debut iteration", i)
   print("bonjour")
   if i == 2:
       break
       print("fin iteration", i)
   print("apres la boucle")

Affichage après exécution : ``` debut iteration 0 bonjour fin iteration 0 debut iteration 1 bonjour fin iteration 1 debut iteration 2 bonjour apres la boucle

 1
 2
 3
 4
 5
 6
 7
 8
 9
10

 Dans le cas de boucles imbriquées, linstruction `break` ne fait sortir que de la boucle la plus interne. ## L’instuction do…while (faire…tant que)

 Dans de nombreux langages, il existe une instruction `do...while` qui permet de créer une boucle pour laquelle on ne connaît pas à lavance le nombre de répétition, mais qui doit sexécuter au moins une fois. Cette instruction nexiste pas en Python, mais on peut facilement reproduire son fonctionnement de la façon suivante : ```
while True:
    n = int(input("donnez un entier > 0 : "))
    print("vous avez fourni", n)
    if n > 0:
        break
        print("reponse correcte")

L’instruction continue

L’instruction continue permet de passer prématurément au tour de boucle suivant. Elle fait continuer sur la prochaine itération de la boucle. #### Exemple

1
2
3
4
5
6
7
for i in range(4):
   print("debut iteration", i)
   print("bonjour")
   if i < 2:
       continue
       print("fin iteration", i)
   print("apres la boucle")

Affichage après exécution : ``` debut iteration 0 bonjour debut iteration 1 bonjour debut iteration 2 bonjour fin iteration 2 debut iteration 3 bonjour fin iteration 3 apres la boucle

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11

## La clause else dans une boucle

 Les instructions de boucle ont une clause else. Elle est exécutée lorsque la boucle se termine par épuisement de la liste (avec `for`) ou quand la condition devient fausse (avec `while`), mais pas quand la boucle est interrompue par une instruction break. Ceci est illustré dans la boucle suivante, qui recherche des nombres premiers : ```
for n in range(2, 8):
    for x in range(2, n):
        if n % x == 0:
            print(n, "egale", x, "*", n/x)
            break
    else:
        print(n, "est un nombre premier")

Affichage après exécution : ``` 2 est un nombre premier 3 est un nombre premier 4 egale 2 * 2.0 5 est un nombre premier 6 egale 2 * 3.0 7 est un nombre premier