`range` : répéter un nombre de fois
Compter avec `range`
Parfois, on ne parcourt pas une liste existante : on veut juste répéter un certain nombre de fois, ou parcourir des nombres.
| Écriture | Nombres produits | Règle |
|---|---|---|
range(5) |
0, 1, 2, 3, 4 | de 0 à 5 exclu : 5 nombres |
range(1, 6) |
1, 2, 3, 4, 5 | de 1 à 6 exclu |
range(0, 20, 5) |
0, 5, 10, 15 | de 0 à 20 exclu, par pas de 5 |
range(10, 0, -1) |
10, 9, ..., 1 | à l'envers : pas négatif |
Comme pour les tranches, la fin est toujours exclue. range(5) donne exactement 5 nombres, de 0 à 4 : pratique pour répéter 5 fois.
for i in range(3):
print("Bonjour")
# affiche Bonjour trois fois
for n in range(1, 4):
print(n, "x 7 =", n * 7)
Par tradition, quand la variable de boucle est un simple compteur, on l'appelle i (pour index), puis j, k si on en a besoin de plusieurs. C'est une des rares exceptions à la règle des noms parlants.
range ne fabrique pas vraiment une liste (il calcule les nombres au fur et à mesure, pour économiser la mémoire). Si tu veux voir les nombres, convertis-le : list(range(5)) donne [0, 1, 2, 3, 4].
Pratique : Explore `range`
Utilise list(...) pour voir les nombres produits. Prévois avant d'appuyer sur Entrée.
Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer
Exercice : Battre Gauss (ou pas)
- Calcule dans
somme_bouclela somme des entiers de 1 ànavec une boucle surrange. - Calcule dans
somme_gaussla même somme avec la formule de Gauss : n × (n + 1) / 2. Utilise//pour avoir un entier.
Les deux doivent donner 5050 pour n = 100.
Voir une solution
n = 100 # donné
somme_boucle = 0
for i in range(1, n + 1):
somme_boucle += i
somme_gauss = n * (n + 1) // 2Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : La table de multiplication
Affiche la table de multiplication de n, de 1 à 10, exactement sous cette forme :
7 x 1 = 7
7 x 2 = 14
...
7 x 10 = 70
Voir une solution
n = 7 # donné
for i in range(1, 11):
print(f"{n} x {i} = {n * i}")Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Exercice : Le compte à rebours
Affiche un compte à rebours de depart jusqu'à 1, un nombre par ligne, puis Décollage !. Utilise range avec un pas négatif.
Voir une solution
depart = 5 # donné
for i in range(depart, 0, -1):
print(i)
print("Décollage !")Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice
Parcourir avec la position : `enumerate`
Parfois, on veut l'élément et sa position. On pourrait écrire for i in range(len(eleves)): puis utiliser eleves[i], mais Python a mieux :
eleves = ["Awa", "Boris", "Chantal"]
for position, eleve in enumerate(eleves, start=1):
print(f"{position}. {eleve}")
1. Awa
2. Boris
3. Chantal
start=1 fait commencer la numérotation à 1, plus naturel pour un affichage destiné à des humains. Sans lui, elle commence à 0.
Exercice : Le classement numéroté
Affiche le classement sous la forme 1. Kiprop, 2. Mbarga... avec enumerate.
Voir une solution
coureurs = ["Kiprop", "Mbarga", "Bekele"] # donné
for position, coureur in enumerate(coureurs, start=1):
print(f"{position}. {coureur}")Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice