Boucles#
Les boucles s’utilisent pour répéter plusieurs fois l’exécution d’une partie du programme.
Boucles bornées et non bornées#
Boucle for
#
Exemple d’utilisation :
for i in [0, 1, 2, 3]:
print("i a pour valeur", i)
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
. On dit souvent que cette variable (ici i
) est un compteur car elle sert à numéroter les itérations de la boucle.
Il est possible d’obtenir le même résultat sans donner la liste des valeurs, mais en utilisant la fonction range()
.
for i in range(4):
print("i a pour valeur", i)
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])
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
Dans l’exemple 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
#
Syntaxe :
while condition:
Instruction A
Exemple de programme :
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
Le mot-clé while
signifie tant que en anglais. Le corps de la boucle (c’est-à-dire le bloc d’instructions indentées) sera répété tant que la condition
est vraie.
Dans l’exemple ci-dessus, x
sera multiplié par 2 tant que sa valeur reste inférieure à 10.
Remarque : Si la condition est fausse au départ, le corps de la boucle n’est jamais exécuté. Si la condition reste toujours vraie, alors le corps de la boucle est répété indéfiniment.
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
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
Note
Dans le cas de boucles imbriquées, l’instruction break
ne fait sortir que de la boucle la plus interne.
Remarque : équivalent du 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 à l’avance le nombre de répétition, mais qui doit s’exécuter au moins une fois. Cette instruction n’existe 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
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
La clause else
dans une boucle#
La clause else
dans un boucle permet de définir un bloc d’instructions qui sera exécuté à la fin seulement si la boucle s’est déroulée complétement sans être interrompue par un break
.
Contrairement aux instructions présentes après la boucle, qui s’exécutent dans tous les cas (avec ou sans interruption par un break
), le bloc d’instructions défini dans la clause else
ne s’exécutera pas lors de l’interruption par un break
. Après l’interruption, on passera directement aux instructions après la boucle.
Autrement dit, le bloc de la clause else
est exécuté 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 un 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
Comment choisir entre boucle
for
et bouclewhile
#En général, si on connaît avant de démarrer la boucle le nombre d’itérations à exécuter, on choisit une boucle
for
. Au contraire, si la décision d’arrêter la boucle ne peut se faire que par un test, on choisit une bouclewhile
.Note
Il est toujours possible de remplacer une boucle
for
par une bouclewhile
.Transformation d’une boucle
for
en un bouclewhile
#Le programme ci-dessus est équivalent à:
Voir aussi
https://python.developpez.com/cours/apprendre-python3/?page=page_6#L6-B