Aller au contenu principal

Informatique · Seconde · 6 min de lecture

Boucles : répéter des instructions sans les recopier

Boucle bornée for, en particulier for i in range(a, b) qui fait prendre à i les valeurs a, a + 1, …, b − 1 ; boucle non bornée while, répétée tant que sa condition est vraie ; dérouler une boucle à la main dans un tableau de suivi des variables (traçage) ; accumulateur (somme, compteur) ; choix entre les deux boucles.

Chapitre du programme : Sciences numériques et technologie

Bloc 1 sur 7 · Comprendre

Comprendre : une boucle répète un bloc

Un programme exécute ses instructions dans l'ordre, une par une. Quand il faut répéter un même calcul, on ne recopie pas les lignes : on écrit une boucle.

La boucle bornée for. On l'utilise quand on connaît à l'avance le nombre de tours. Voici un programme qui additionne les entiers de 1 à 5 :

s = 0
for i in range(1, 6):
    s = s + i
print(s)

Il affiche :

15

Trois choses à lire dans ce programme :

  1. range(1, 6) fait prendre à la variable i les valeurs 1, 2, 3, 4, 5 : la borne de fin, 6, est exclue.
  2. La ligne s = s + i est indentée (décalée de quatre espaces) : c'est le corps de la boucle, exécuté à chaque tour. En Python, c'est l'indentation, et rien d'autre, qui dit ce qui est répété.
  3. La variable s est un accumulateur : elle part de 0 avant la boucle, et chaque tour lui ajoute quelque chose.

L'instruction print(s) n'est pas indentée : elle est exécutée une seule fois, après la boucle.

Bloc 2 sur 7 · Approfondir

Approfondir : range, et la boucle while

Les trois formes de range.

  • range(n) donne 0, 1, …, n − 1 : exactement n valeurs pour un entier n ≥ 0 ; si n < 0, il est vide.
  • range(a, b) donne a, a + 1, …, b − 1 lorsque a < b ; sinon, il est vide.
  • range(a, b, pas) avance de pas en pas, sans inclure b. Le pas doit être non nul ; si son signe ne permet pas de progresser vers b, le parcours est vide. Exemple de pas positif :
for i in range(2, 11, 3):
    print(i)
2
5
8

La valeur suivante serait 11, qui n'est pas strictement inférieure à 11 : la boucle s'arrête.

La boucle non bornée while. On l'utilise quand on ne sait pas d'avance combien de tours il faudra : on répète tant qu'une condition est vraie. Combien de doublements faut-il pour qu'un nombre parti de 1 atteigne ou dépasse 100 ?

x = 1
n = 0
while x < 100:
    x = x * 2
    n = n + 1
print(n, x)
7 128

La condition x < 100 est testée avant chaque tour, y compris avant le premier. Après 6 tours, x vaut 64 : la condition est encore vraie, on fait un septième tour et x vaut 128. Le test suivant est faux, la boucle s'arrête.

Choisir sa boucle. Nombre de tours connu à l'avance : for. Arrêt décidé par une condition : while. Pour justifier l’arrêt d’une boucle while, on peut montrer que le corps fait évoluer une donnée vers une condition d’arrêt, ou prévoir une sortie explicite comme break. Une condition initialement vraie qui reste vraie, sans sortie, provoque une boucle infinie. Une condition fausse dès le départ ne fait exécuter aucun tour.

Bloc 3 sur 7 · Exemple

Exemple guidé : tracer une boucle while

Énoncé. Qu'affiche ce programme ?

x = 23
while x > 5:
    x = x - 4
print(x)

Méthode : le tableau de suivi. On note la valeur de chaque variable et le résultat du test, tour après tour.

Tableau : Étape, Test x > 5, x après le tour
ÉtapeTest x > 5x après le tour
départ—23
tour 123 > 5 : vrai19
tour 219 > 5 : vrai15
tour 315 > 5 : vrai11
tour 411 > 5 : vrai7
tour 57 > 5 : vrai3
fin3 > 5 : faux—

La boucle s'arrête quand le test devient faux, avec x = 3. Le programme affiche donc :

3

Vérification. On retranche 4 cinq fois : 23 − 5 × 4 = 3. Un quatrième retrait laissait 7, encore supérieur à 5, d'où le cinquième.

Bloc 4 sur 7 · Visualiser

Voir : ce qui est répété, et ce qui ne l'est pas

Lire un programme avec boucle, c'est d'abord repérer trois zones :

Tableau : Zone, Où la trouver, Combien de fois elle s'exécute
ZoneOù la trouverCombien de fois elle s'exécute
avant la bouclelignes non indentées, au-dessusune fois
corps de la bouclelignes indentées sous for ou whileune fois par tour
après la bouclelignes revenues à gauche, en dessousune fois, à la fin

Dans les exercices de la plateforme, les programmes sont affichés dans un tableau numéroté, et chaque groupe de quatre points « ···· » remplace les quatre espaces d'un niveau d'indentation. La ligne « ····s = s + i » est donc la ligne Python s = s + i précédée de quatre espaces : elle appartient au corps de la boucle.

Continuez sur votre lancée

Vous avez découvert l’essentiel et un exemple. Retrouvez la suite du cours et les points à retenir, puis passez à l’entraînement guidé dans votre compte.

  • Les formules et les repères à retenir
  • Les erreurs fréquentes expliquées
  • Un exercice avec des aides et sa correction

L’accès gratuit comprend les cours et exercices de votre niveau choisi.

Sources

  • BO spécial n°1 du 22 janvier 2019 — programme de sciences numériques et technologie de seconde, « Notions transversales de programmation »
  • BO spécial n°1 du 22 janvier 2019 — programme de mathématiques de seconde, « Algorithmique et programmation »
  • Documentation officielle de Python 3 — The Python Tutorial, § 4.2 « for Statements », § 4.3 « The range() Function » (https://docs.python.org/3/tutorial/controlflow.html)

Vous pensez avoir trouvé une erreur dans cette leçon ? Signalez-la par e-mail.

Explorer les autres cours

Accès rapide