Itérations et boucles
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
foravecrange. - Écrire une boucle non bornée
whileet é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)
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 ?
Après p = 1 puis for k in range(1, 5): p = p * k, que vaut p ?
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)
Quand faut-il préférer while à for ?
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 ?
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)] ?
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 :
whilesur 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)).
Teste tes connaissances sur ce cours
Crée ton compte gratuitement pour accéder aux quiz associés et suivre ta progression.
