Itérations et boucles

1èreMathematiquesNotion de liste et algorithmesItérations et boucles~7 min de lecture

Itérations et boucles

Une boucle fait répéter une même instruction à l'ordinateur : la boucle « for » quand on sait combien de fois répéter, la boucle « while » quand on répète tant qu'une condition est vraie.

Objectifs

  • Écrire et lire une boucle bornée for avec range.
  • Écrire une boucle non bornée while et éviter les boucles infinies.
  • Utiliser un compteur et un accumulateur (somme, produit).
  • Parcourir une liste et programmer un algorithme de seuil sur une suite.

1. Pourquoi répéter ?

Une itération est un passage dans une boucle. Une boucle est un bloc d'instructions répété. En Python, les instructions répétées sont indentées (décalées de 4 espaces) sous la ligne qui commence la boucle.

2. La boucle bornée for

Syntaxe

for k in range(n):
    instructions répétées
  • range(n) donne les entiers \(0, 1, \dots, n-1\) : la boucle tourne \(n\) fois.
  • range(a, b) donne les entiers de \(a\) à \(b-1\) : la boucle tourne \(b-a\) fois.
  • range(a, b, p) va de \(a\) à \(b\) exclu avec un pas \(p\). Exemple : range(2, 10, 3) donne 2, 5, 8.

Le compteur et l'accumulateur

Un accumulateur est une variable qu'on initialise avant la boucle (souvent à 0 pour une somme, à 1 pour un produit) et qu'on met à jour à chaque tour.

Exemple 1. Que contient s à la fin du programme suivant ? Cherche d'abord.

s = 0
for k in range(1, 5):
    s = s + k
print(s)
Avant la boucle : \(s=0\). La variable \(k\) va prendre les valeurs 1, 2, 3, 4 (5 est exclu).
Tour 1 : \(k=1\), \(s=0+1=1\). Tour 2 : \(k=2\), \(s=1+2=3\).
Tour 3 : \(k=3\), \(s=3+3=6\). Tour 4 : \(k=4\), \(s=6+4=10\).
Le programme affiche 10, c'est-à-dire \(1+2+3+4\).

Exemple 2. Écris un programme qui calcule \(1+2+\dots+100\).

Voir la solution
s = 0
for k in range(1, 101):
    s = s + k
print(s)

Il faut écrire range(1, 101) pour que 100 soit inclus. Le programme affiche 5050, ce qui correspond à la formule \(\dfrac{100\times101}{2}=5050\).

Combien de fois la boucle for i in range(3, 10): est-elle exécutée ?

  1. 10 fois
  2. 7 fois
  3. 8 fois
\(i\) prend les valeurs 3, 4, 5, 6, 7, 8, 9 : il y a \(10-3=7\) valeurs.

Après p = 1 puis for k in range(1, 5): p = p * k, que vaut p ?

  1. 10
  2. 120
  3. 24
\(p=1\times1\times2\times3\times4=24\). Un accumulateur de produit s'initialise à 1, pas à 0.

3. La boucle non bornée while

Syntaxe

while condition:
    instructions répétées

La condition est testée avant chaque tour. Dès qu'elle devient fausse, on sort de la boucle.

flowchart TD
A[Initialisation] --> B{Condition vraie}
B -->|oui| C[Instructions de la boucle]
C --> D[Mise a jour des variables]
D --> B
B -->|non| E[Suite du programme]

Exemple 3. Combien de mois faut-il à Kofi ?

epargne = 5000
mois = 0
while epargne < 20000:
    epargne = epargne + 2000
    mois = mois + 1
print(mois, epargne)
On part de 5 000 F CFA et 0 mois. À chaque tour, on ajoute 2 000 F CFA et un mois.
Après 7 mois : \(5000+7\times2000=19000\), encore inférieur à 20 000 : on continue.
Après 8 mois : \(5000+8\times2000=21000\geq20000\) : la condition devient fausse, on sort.
Le programme affiche 8 et 21000 : il faut 8 mois à Kofi.

Quand faut-il préférer while à for ?

  1. Quand on ne connaît pas à l'avance le nombre de répétitions
  2. Quand on veut répéter exactement 10 fois
  3. Quand on parcourt tous les éléments d'une liste
La boucle while s'arrête quand une condition devient fausse : elle convient quand le nombre de tours dépend du calcul.

4. Boucles et suites : l'algorithme de seuil

On modélise par la suite \(u_0=100\) et \(u_{n+1}=1{,}1\,u_n\). On cherche le plus petit entier \(n\) tel que \(u_n>200\).

u = 100
n = 0
while u <= 200:
    u = 1.1 * u
    n = n + 1
print(n)
Voir le résultat

On a \(u_n=100\times1{,}1^n\). Or \(1{,}1^7\approx1{,}949\) donc \(u_7\approx194{,}9\leq200\), et \(1{,}1^8\approx2{,}144\) donc \(u_8\approx214{,}4>200\). Le programme affiche 8 : c'est la 8e année que l'élevage dépasse 200 poulets.

Pour calculer un terme précis, une boucle for suffit : pour obtenir \(u_{10}\), on répète 10 fois u = 1.1 * u en partant de \(u=100\).

Dans l'algorithme de seuil ci-dessus, pourquoi la condition est-elle u <= 200 ?

  1. Parce qu'on veut s'arrêter dès que \(u\) vaut 200
  2. Parce qu'on continue tant que le seuil n'est pas dépassé
  3. Parce que \(u\) diminue à chaque tour
On répète tant que \(u_n\leq200\) ; on sort au premier rang où \(u_n>200\), c'est le rang cherché.

5. Parcourir une liste

Deux façons de parcourir une liste :

notes = [12, 15, 9, 14]
# par les valeurs
total = 0
for note in notes:
    total = total + note
# par les indices
total = 0
for i in range(len(notes)):
    total = total + notes[i]
moyenne = total / len(notes)

Ici \(\text{total}=12+15+9+14=50\) et la moyenne vaut \(\dfrac{50}{4}=12{,}5\).

On peut aussi construire une liste avec une boucle : carres = [k**2 for k in range(5)] donne [0, 1, 4, 9, 16] (liste en compréhension).

Exemple 4. Écris un programme qui compte les notes supérieures ou égales à 10 dans la liste de Nadia.

Voir la solution
compteur = 0
for note in notes:
    if note >= 10:
        compteur = compteur + 1
print(compteur)

Le programme affiche 3 (12, 15 et 14).

Que donne [2*k for k in range(1, 4)] ?

  1. [2, 4, 6, 8]
  2. [0, 2, 4, 6]
  3. [2, 4, 6]
\(k\) prend les valeurs 1, 2, 3 (4 est exclu), donc on obtient 2, 4 et 6.

Erreurs fréquentes

Récapitulatif

  • for k in range(a, b) : boucle bornée, \(k\) va de \(a\) à \(b-1\).
  • while condition : boucle non bornée, répétée tant que la condition est vraie.
  • Accumulateur : initialisé avant la boucle (0 pour une somme, 1 pour un produit), mis à jour à chaque tour.
  • Algorithme de seuil : while sur la condition contraire de celle cherchée, avec un compteur de rang.
  • Une liste se parcourt par ses valeurs ou par ses indices range(len(liste)).
range(a, b)
Les entiers de a à b - 1 (b exclu)
Boucle for
Boucle bornée : nombre de tours connu d'avance
Boucle while
Boucle non bornée : on répète tant que la condition est vraie
Accumulateur
Variable initialisée avant la boucle et mise à jour à chaque tour
Algorithme de seuil
Plus petit rang n tel que la suite dépasse un seuil, trouvé avec while

Teste tes connaissances sur ce cours

Crée ton compte gratuitement pour accéder aux quiz associés et suivre ta progression.