UKOnline

Instruction répétitive

Une grande force de la programmation, et l'une des raisons pour lesquelles elle a été inventée, c'est de pouvoir répéter plusieurs fois la même tâche. Voyons maintenant comment exécuter plusieurs fois une même portion de code à l'aide d'instructions répétitives.

Instruction while

Commençons avec un exemple qui affiche les cinq premiers nombres naturels, en commençant avec $1$ :

L'exécution de ce programme produit la sortie suivante :

1
2
3
4
5

L'instruction while se compose du mot réservé while suivi d'une condition, puis du caractère deux-points (:) et enfin d'un bloc de code appelé corps de la boucle. Celui-ci est exécuté intégralement de manière répétée, tant que la condition du while est vraie. La figure 9 montre l'organigramme de ce programme, où la boucle ainsi créée apparait.

Instruction while
L'instruction while permet de répéter une portion de code tant qu'une condition est satisfaite, c'est-à-dire que sa valeur est True.

Tout comme pour l'instruction if, la condition d'une instruction while est généralement une expression booléenne. Le corps de la boucle est donc répété tant que la condition est satisfaite. Il est dès lors important que les variables qui apparaissent dans la condition voient leur valeur changer dans le corps de la boucle, sans quoi la condition ne changera jamais de valeur. Si celle-ci était vraie au départ, elle le restera donc toujours et on aura une boucle infinie. Voici un simple programme qui vous dira perpétuellement bonjour :

La première fois que la condition d'une boucle while est testée se fait avant même d'avoir exécuté une seule fois son corps. Il se peut donc qu'il ne soit jamais exécuté si la condition est fausse dès le départ.

Parfois, on souhaite néanmoins toujours exécuter un bloc de code, et on peut pour cela attacher un bloc else à l'instruction while. Le code contenu dans ce bloc else est exécuté une fois lorsque la condition du while devient fausse, avant que l'exécution ne continue après l'instruction while. L'exemple suivant illustre cela :

L'exécution de ce programme produit la sortie suivante :

La boucle est terminée

Dans ce cas-ci, la condition de la boucle est initialement fausse puisque $10$ n'est pas plus petit ou égal à $5$. Le corps de la boucle ne va donc pas s'exécuter. Par contre, comme il y a un bloc else attaché à l'instruction while, il va être exécuté une fois. Comme ici la condition est initialement fausse, seul le contenu du bloc else sera donc exécuté, avant que l'exécution ne continue après l'instruction while.

Interruption de boucle

Une boucle se termine de manière naturelle lorsque sa condition devient fausse. Parfois, on peut vouloir la quitter prématurément, lorsqu'une autre condition est satisfaite. Python propose pour cela l'instruction break qui quitte directement une boucle, sans exécuter l'éventuel bloc else attaché à l'instruction while.

L'exemple suivant recherche le plus petit naturel non nul divisible par $38$ et $46$. Pour cela, on utilise une boucle qui parcoure toutes les valeurs entre $1$ et $1000000$ et, pour chacune d'elles, teste avec une instruction if si elle divise $38$ et $46$ grâce à l'opérateur modulo (le reste de la division est nul si c'est un diviseur). Dans ce cas, on a trouvé la valeur que l'on cherche et on peut arrêter la boucle, grâce à l'instruction break :

La figure 10 montre l'organigramme de ce programme, où vous pouvez clairement voir les deux chemins d'exécution possibles quittant la boucle. On voit également très bien que l'instruction break « casse » la boucle.

Instruction break
L'instruction break permet de quitter directement une boucle while.

De manière générale, on peut se passer de l'instruction break en adaptant la condition de la boucle while. Au plus vous aurez de chemins d'exécution possibles, au plus votre code deviendra complexe à comprendre. Prenons, par exemple, la situation où votre boucle ne se termine pas quand elle le devrait. Afin de trouver le bug, il vous faudra examiner tous les chemins de sortie possibles, et il vaut donc mieux minimiser leur nombre. L'exemple précédent peut, par exemple, se réécrire comme suit, en intégrant la condition du if dans celle du while :

Néanmoins, vous constaterez qu'on perd en lisibilité, la condition du while devenant complexe. Si l'on s'en réfère aux conventions, un code pythonique doit être concis et clair. Dans ce cas, la version du code avec l'instruction break est préférable.

Pour être complet, il faut également mentionner l'instruction continue. Celle-ci va faire en sorte d'interrompre l'exécution du corps de la boucle, et directement retourner à l'évaluation de la condition du while. Elle permet en quelque sorte de « passer un tour » de boucle. De nouveau, il est possible de s'en passer en modifiant le corps de la boucle. L'exemple suivant affiche tous les nombres pairs plus petits que $100$ :

La première instruction augmente la valeur de la variable n. Ensuite, si celle-ci est impaire (le reste de la division par deux n'est pas nul), on arrête d'exécuter le corps de la boucle et on passe directement au tour suivant. Sinon, on affiche la valeur de n.