Rédiger le cours
Moon Arrows Sun
Arrows

Choisir sa boucle, construire une liste

Deux questions se posent avant d'écrire : quelle structure de boucle, et faut-il garder les valeurs ou seulement la dernière.

Choisir sa boucle

Question posée
Boucle
« Calculer les 20 premiers termes »
\(\text{for}\), 20 tours connus
« À partir de quel rang dépasse-t-on 1000 ? »
\(\text{while}\), on ne sait pas d'avance
« Additionner tous les éléments d'une liste »
\(\text{for}\) sur la liste
l'énoncé désigne la boucle

Un \(\text{while}\) dont la condition ne peut jamais devenir fausse tourne indéfiniment : vérifier que quelque chose change à l'intérieur de la boucle.

Chercher un seuil

C'est le programme type du chapitre : on avance tant qu'on n'a pas dépassé, en comptant les tours.

Exemple :

À partir de quel rang la suite \(u_{n+1} = 1.05 \, u_n\), de premier terme \(u_0 = 100\), dépasse-t-elle \(200\) ?

u = 100
n = 0
while u <= 200:
    u = 1.05 * u
    n = n + 1
print(n)

Le programme affiche \(15\) : c'est le premier rang pour lequel \(u_n > 200\).

L'ordre des deux lignes dans la boucle compte : on calcule le terme suivant, puis on incrémente le rang. Inverser décale la réponse d'une unité.

Construire une liste

Trois écritures pour le même résultat. On choisit la compréhension quand la règle est simple, les ajouts successifs quand chaque terme dépend du précédent.

Règle directe :

L = [2 * k + 1 for k in range(10)]

Récurrence :

L = [3]
for k in range(9):
    L.append(2 * L[-1])

Une suite définie par récurrence ne peut pas s'écrire en compréhension : chaque terme a besoin du précédent, qui n'existe pas encore.

Lire un programme sans l'exécuter

On dresse un tableau de suivi, une colonne par variable, une ligne par tour.

Exemple :

s = 0
for k in range(1, 5):
    s = s + k * k
print(s)
Tour
\(k\)
\(k^2\)
\(s\) après
\(1\)
\(1\)
\(1\)
\(1\)
\(2\)
\(2\)
\(4\)
\(5\)
\(3\)
\(3\)
\(9\)
\(14\)
\(4\)
\(4\)
\(16\)
\(30\)
le programme affiche 30

Le piège de \(\text{range}(1, 5)\) : il s'arrête à \(4\), la borne haute étant exclue. \(\text{range}(n)\) va de \(0\) à \(n-1\).