Les boucles sont un concept fondamental en programmation. Elles permettent de répéter certaines opérations autant de fois que nécessaire. Comment faire par exemple pour :
Une boucle conditionnelle consiste à répéter un bloc d’instructions tant qu’une condition est vraie.
Pour définir une boucle conditionnelle, on utilise le mot-clé while (tant que) :
Comme pour les fonctions et les conditions, la ligne contenant le mot clé while se termine par :, et les instructions à répéter sont indentées vers la droite (décalées vers la droite).
Prenons un exemple. Essayons de faire compter Python de 1 à 10 avec le programme suivant :
Ça marche, mais si on vous demande de modifier le code précédent pour que Python compte jusqu'à 100, vous conviendrez que c'est long et inutile et surtout répétitif. En programmation, qui dit répétition dit boucle. Dans le code précédent, toutes les instructions se ressemblent, et ne diffèrent que par le nombre affiché. On peut alors demander à Python << Affiche tous les nombres jusqu'à 10 >> de la manière suivante :
Analysons ligne par ligne le code précédent :
On initialise une variable n avec la valeur 1, puisque l'on veut compter à partir de 1. La valeur de la variable n sera modifiée pluseurs fois pour contenir toutes les valeurs entre 1 et 10.
Cette ligne sert à indiquer que les instructions qui suivent seront répétées tant que la valeur de n est inférieure ou égale à 10.
On affiche la variable n. Mais sa valeur n'est pas toujours la même ! Elle est modifiée par la ligne suivante.
Cette ligne est très importante et même indispensable. Sans cette ligne, la valeur de n n'est jamais modifiée, et notre programme affiche toujours la même chose. Or n doit valoir 1, puis 2, puis 3... jusqu'à 10.
Lorsqu'on ajoute 1 à la variable n, on dit qu'on incrémente sa valeur.
On peut schématiser le programme précédent de la façon suivante :
Attention aux boucles infinies !
Sans la dernière instruction n = n + 1, notre programme ne se termine jamais, car si la valeur de n ne change pas, alors la condition n <= 10 est toujours vraie. On aurait alors une boucle infinie. Essayez pour voir :
Et pour compter jusqu'à 100 ? Il suffit juste de modifier quelque chose... À vous de deviner !
Python sait compter jusqu'à de grandes valeurs, mais pas votre navigateur, qui risque de planter... Vous voilà prévenus !
En guise d'entraînement, essayez de deviner ce qu'affichent les 2 programmes suivants :
Comment faire pour compter le nombre de voyelles dans une chaîne de caractères avec Python ?
Nous connaissons déjà la fonction len, qui permet de compter le nombre de lettres dans une chaîne de caractères. Pour compter le nombre de voyelles, il faudrait regarder lettre par lettre et vérifier si c’est une voyelle ou une consonne.
Grâce à l’instruction for, il est possible de parcourir une chaîne de caractères lettre par lettre, de la façon suivante :
Par exemple, pour afficher toutes les lettres du mot Bonjour :
Dans le programme précédent, la fonction print n’est pas appelée une fois mais 7 fois (autant de fois que la chaîne contient de lettres). D’où les 7 affichages successifs.
Plutôt que d’afficher cette lettre (ce qui ne sert pas à grand chose), nous allons tester si c’est une voyelle. À quelle condition notre lettre est une voyelle ? Si c’est une des lettres suivantes :
Rappelez-vous : Python est sensible à la casse, c'est à dire qu'il fait la différence entre majuscules et minuscules.
Ça ne fait pas beaucoup de conditions à tester ? Si lettre == "a", puis lettre == "e"...
C’est vrai, mais nous connaissons le mot clé in.
Ainsi, lettre sera une voyelle si le booléen lettre in "aeiouyAEIOUY" est vrai. Il suffisait d’y penser !
C'est bien joli mais... on voulait compter le nombre de voyelles, non ?
En effet. Et quoi de mieux qu’une variable pour compter le nombre de voyelles ?
On peut alors écrire une fonction nombreVoyelles(chaine) dont le rôle est de retourner le nombre de voyelles d'une chaîne de caractères donnée :
Le mot-clé for permet également de répéter une action un nombre de fois défini, à condition de l'associer à la fonction range. Pour répéter $n$ fois une série d'instructions de cette façon, on utilise la syntaxe suivante :
Par exemple, pour afficher 10 fois Bonjour, on écrira :
L'instruction for utilisée de cette manière permet de créer une boucle itérative. Contrairement à la boucle conditionnelle while vue auparavant, le nombre de répétitions est ici défini à l'avance.
Vous avez sans doute remarqué que l'on utilise une variable i dans la boucle. En réalité, l'instruction range(n) retourne (en quelque sorte) une liste des nombres de $0$ à $n-1$. Ainsi, dans notre boucle, la variable i prendra toutes les valeurs comprises entre $0$ et $n-1$, de la même manière que notre variable lettre prenait comme valeurs les lettres successives d'une chaîne avec l'instruction for lettre in chaine.
Une erreur classique est de croire que range(n) retourne la liste des nombres de $1$ à $n$. Mais en informatique, on compte à partir de $0$ et non à partir de $1$ !
La fonction range peut s'utiliser de plusieurs manières différentes :
Pour afficher tous les nombres pairs entre 10 et 30 (inclus), on fait la liste des nombres de 10 à 30 avec un pas de 2 :
L'instruction break permet de stopper l'exécution d'une boucle for ou while.
L'instruction continue permet de "sauter" un tour de boucle, de passer à l'itération suivante sans exécuter les instructions qui suivent.