ParcoursOuvrir l'appli

`range` : répéter un nombre de fois

Python, listes et boucles · 40 min

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)

  1. Calcule dans somme_boucle la somme des entiers de 1 à n avec une boucle sur range.
  2. Calcule dans somme_gauss la 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) // 2

Dans 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