Boucles#
Une boucle évite de recopier plusieurs fois la même instruction. Python peut ainsi effectuer rapidement un grand nombre de calculs, à condition de lui indiquer clairement ce qui doit se répéter.
Dès la seconde
Répéter un nombre connu de fois#
Au lieu d’écrire cinq fois print("Bonjour"), on peut écrire :
La fonction range(5) fournit ici les cinq entiers 0, 1, 2, 3 et 4. Sa syntaxe sera
détaillée juste après ce premier essai.
La ligne indentée est exécutée cinq fois. La variable i prend successivement les valeurs 0, 1, 2, 3 et 4, même si elle n’est pas affichée ici.
Avant toute modification, il faut pouvoir expliquer pourquoi le premier numéro affiché est 0 et le dernier 4.
Choisir les valeurs parcourues#
range(a, b) permet de parcourir les entiers de a jusqu’à b-1. La borne de droite n’est pas atteinte.
Avec d’autres bornes, le même principe demeure. Pour afficher les entiers de 4 à 9, quelle valeur faut-il placer comme seconde borne ?
Lorsque le numéro du passage n’est pas utilisé, on écrit souvent _ à la place de i :
for _ in range(5):. Le symbole _ reste un nom de variable ordinaire ; il indique
simplement au lecteur que sa valeur n’a pas d’utilité dans la boucle.
On peut aussi préciser un pas avec range(a, b, h).
Le programme affiche les nombres pairs de 0 à 8. Remplace le pas par 3, puis essaie un pas négatif avec range(10, 0, -2). Si le pas est négatif, les bornes doivent être placées dans l’ordre décroissant.
Pour retrouver les différentes écritures possibles, help(range) affiche directement l’aide intégrée de Python sur range.
Une borne à corriger#
Le programme suivant devrait afficher les entiers de 1 à 5. Il s’exécute sans message d’erreur, mais le résultat n’est pas celui qui était attendu.
Comment chercher ?
Il s’agit d’une erreur de logique : Python exécute exactement ce qui est écrit. Comparer la dernière valeur affichée avec la dernière valeur attendue, puis se rappeler que la borne de droite de range est exclue.
Accumuler un résultat#
Une boucle peut construire un résultat étape après étape. Ici, total joue le rôle d’accumulateur.
total
Après le passage correspondant à une valeur i, total contient la somme des entiers de 1 à
i. Cette phrase décrit le rôle de l’accumulateur indépendamment de la syntaxe Python. En
remplaçant 6 par 101, le même programme calcule la somme des entiers de 1 à 100.
Un accumulateur peut aussi construire un produit. Il commence alors à 1, car multiplier par 0 annulerait immédiatement tout le résultat.
La valeur obtenue est \(1\times2\times3\times4\times5=120\). Cette construction sera retrouvée plus loin sous le nom de factorielle.
Répéter selon une condition#
Une boucle while répète un bloc tant que sa condition est vraie.
À chaque passage, i augmente. La condition i < 5 finit donc par devenir fausse.
Choisir la bonne boucle#
Les deux programmes suivants produisent le même affichage.
On préfère généralement for lorsque le nombre de répétitions est connu. while est adapté lorsqu’on attend qu’une condition devienne vraie ou fausse.
Attention aux boucles infinies#
Si on oublie i = i + 1 dans l’exemple précédent, i reste égal à 0 et la condition demeure toujours vraie. Le programme ne s’arrête plus : c’est une boucle infinie.
Le bouton « Arrêter » permet d’interrompre un essai qui tourne trop longtemps, mais il faut tout de même apprendre à vérifier que la variable de contrôle évolue dans le bon sens.
Quelques boucles conditionnelles#
Avec 5 à la place de 10, quel sera le dernier nombre affiché ?
Quelle est la première valeur qui dépasse 100 ? Observe aussi la différence entre les valeurs affichées dans la boucle et la valeur finale.
La dernière valeur affichée peut dépasser 20 : la condition est testée avant l’addition suivante.
Applications mathématiques#
À tester : remplacer 7 par 9, puis adapter le programme pour afficher seulement les produits de 1 à 10.
Une boucle permet également d’afficher plusieurs termes d’une suite définie par une formule.
str(n) transforme temporairement le nombre n en texte afin de l’insérer dans le message affiché. La valeur de n elle-même reste un entier.
Quels sont les six rangs parcourus ? Modifie la formule sans changer la boucle.
Exercices#
Exercice 1
Afficher les nombres de 1 à 10 avec une boucle for.
Exercice 2
Calculer et afficher la somme des entiers de 1 à 100.
Exercice 3
Afficher les nombres pairs entre 0 et 20.
Exercice 4
Afficher les nombres de 0 à 10 avec une boucle while.
Exercice 5
Partir de x = 1 et doubler x tant que x < 50. Afficher les valeurs obtenues.
Dans le parcours