Passer au contenu principal
eLearner.app
Module 2 · Leçon 1 sur 45/36 dans le cours~10 min
Leçons du module (1/4)

Boucles for et range

La boucle for en Python est utilisée pour itérer sur une séquence d'éléments : une liste, une chaîne, un range, un dictionnaire… tout ce qui est "itérable".

Python
parole = ["ciao", "mondo", "!"]
for p in parole:
    print(p)
# ciao
# mondo
# !

Le modèle est toujours le même : for <variable> in <iterable>: suivi du bloc indenté qui sera exécuté une fois pour chaque élément.

range(...) : générer des intervalles d'entiers

range produit une séquence paresseuse (lazy) d'entiers. Trois formes :

Python
range(5)         # 0, 1, 2, 3, 4
range(2, 6)      # 2, 3, 4, 5
range(0, 10, 2)  # 0, 2, 4, 6, 8     (step)
range(5, 0, -1)  # 5, 4, 3, 2, 1     (negative step)

range est exclusif sur la borne droite, comme slice. C'est un objet paresseux : il n'alloue pas de mémoire pour tous les nombres, il les produit un à la fois.

Python
totale = 0
for i in range(1, 11):
    totale = totale + i
totale  # 55  (1+2+...+10)

Itérer avec un index : enumerate

Lorsque vous avez besoin de l'élément et de son index ensemble, utilisez enumerate :

Python
parole = ["ciao", "mondo", "!"]
for i, p in enumerate(parole):
    print(i, p)
# 0 ciao
# 1 mondo
# 2 !

enumerate produit des paires (index, value) que nous attribuons directement à deux variables via le déballage de tuples.

Itérer sur deux séquences en parallèle : zip

Python
nomi = ["Ada", "Linus", "Grace"]
anni = [36, 54, 79]
for n, a in zip(nomi, anni):
    print(f"{n} ha {a} anni")

zip s'arrête à la séquence la plus courte.

range() et la paresse de Python

En Python, la fonction range() n'alloue pas de liste réelle en mémoire : elle renvoie un générateur paresseux (lazy generator) qui fournit des nombres un par un au fur et à mesure des besoins (par exemple, dans une boucle for). Cela permet d'itérer sur des millions d'entiers sans gonfler la RAM. Pour inspecter les valeurs d'un range sous forme de liste, vous pouvez le convertir explicitement avec list(range(5)).

À vous de jouer

Exercice#python.m2.l1.e1
Tentatives : 0Chargement…

Calculez la somme des nombres de 1 à 100 (inclus) en utilisant une boucle for sur range(...), assignez la somme à `total` et évaluez-la.

Chargement de l'éditeur…
Afficher l'indice

range(1, 101) génère 1, 2, ..., 100 (exclusif sur la droite).

Solution disponible après 3 tentatives

Exercice de révision

Exercice#python.m2.l1.e2
Tentatives : 0Chargement…

Étant donné la liste `words = ['uno', 'due', 'tre']`, construisez une liste `pairs` de chaînes comme '0:uno', '1:due', '2:tre' en utilisant enumerate. Évaluez `pairs`.

Chargement de l'éditeur…
Afficher l'indice

enumerate(words) renvoie (index, value) à chaque itération.

Solution disponible après 3 tentatives

Défi supplémentaire

Exercice#python.m2.l1.e3
Tentatives : 0Chargement…

Calculez la somme de tous les nombres pairs de 2 à 20 inclus en utilisant une boucle `for` sur un `range`. Stockez la somme finale dans `even_sum` et évaluez-la.

Chargement de l'éditeur…
Afficher l'indice

Utilisez range(2, 21, 2) pour itérer uniquement sur les entiers pairs de 2 à 20.

Solution disponible après 3 tentatives