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".
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 :
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.
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 :
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
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
Calculez la somme des nombres de 1 à 100 (inclus) en utilisant une boucle for sur range(...), assignez la somme à `total` et évaluez-la.
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
É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`.
Afficher l'indice
enumerate(words) renvoie (index, value) à chaque itération.
Solution disponible après 3 tentatives
Défi supplémentaire
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.
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