Boucle for#
Répétition d'un bloc d'instructions#
La boucle for permet de répéter un bloc d'instructions un nombre de fois connu
à l'avance.
for _ in range(nb_repetitions):
instruction 1
instruction 2
...
Important
En Python, les instructions appartenant à un même bloc d'instructions sont reconnaissables car elles ont toutes exactement la même indentation.
Exemple 1#
Programme
1print("Voici ma punition:")
2for _ in range(10):
3 print("Je dois faire mes devoirs.")
4print("J'ai fini.")
Ordinogramme
Exercice 1#
Que fait le programme suivant?
Modifiez-le pour qu'il affiche 9 fois "Salut".
Modifiez-le pour qu'il affiche:
Salut
Comment ça va?
Salut
Comment ça va?
Salut
Comment ça va?
Modifiez-le pour qu'à la fin du programme, il affiche "Au revoir!".
1for _ in range(6):
2 print("Salut")
Solution
1for _ in range(3):
2 print("Salut")
3 print("Comment ça va?")
4print("Au revoir!")
Utilisation de la variable de la boucle for#
La boucle for fait plus que juste répéter x fois un bloc d'instructions: pour
chaque itération (passage dans la boucle), la variable (dans l'exemple ci-dessous
nommée i) va prendre la valeur de l'ensemble range(n), c'est-à-dire
l'ensemble des nombres entiers de \(0\) à \(n\) non compris \(\{0; 1; 2; ...; n-1\}\).
Il est donc possible d'utiliser la valeur de cette variable dans la boucle.
Important
Dans l'instruction for _ in range(nb_repetitions):, le _ représente une variable à laquelle nous n'avons pas donné de nom. Mais il est possible de donner un nom (en respectant les règles de nommage des variables) si nous avons besoin d'utiliser cette variable dans le bloc d'instructions.
Toutes ces notations sont correctes:
for _ in range(3):for nombre in range(3):for i in range(3):
La syntaxe for _ in range(3): est utilisée seulement lorsque nous n'utilisons pas la
valeur de la variable dans la boucle (on dit que c'est une variable muette)
Exemple 2#
Le programme suivant affiche les nombres de 0 à 9.
1for i in range(10):
2 print(i)
Exercice 2#
Écrivez un programme qui affiche les nombres entiers de 0 jusqu'à 17 et affiche à la fin "J'ai fini de compter!".
1# Écrivez le programme ici
Solution
1for nombre in range(18):
2 print(nombre)
3print("J'ai fini de compter!")
Exercice 3#
Modifiez le programme ci-dessous pour qu'il affiche les nombres entiers de 1 à 10.
1for i in range(10):
2 print(i)
Solution
1for i in range(10):
2 print(i + 1)
Python permet aussi de déterminer la valeur de départ et la valeur de fin (pas comprise), en utilisant le construction suivante:
1for i in range(1, 11):
2 print(i)
Exercice 4#
Écrivez un programme qui calcule et affiche la somme des dix premiers nombres entiers plus grands que 0.
1# Écrivez le programme ici
Solution
Il y a plusieurs manières de faire.
Comme ajouter 0 à une somme ne change rien, je peux effectuer le calcul suivant: \(0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10\)
1somme = 0 2for i in range(11): 3 somme += i 4print(somme)
Les deux programmes suivants font exactement ce qu'il faut: \(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10\)
1somme = 0 2for i in range(10): 3 somme += i + 1 4print(somme)
1somme = 0 2for i in range(1, 11): 3 somme += i 4print(somme)
Exercice 5#
Écrivez un programme qui calcule et affiche le produit des cinq premiers nombres entiers plus grands que 0.
1# Écrivez le programme ici
Solution
1produit = 1
2for i in range(5):
3 produit *= i + 1
4print(produit)
1produit = 1
2for i in range(1, 6):
3 produit *= i
4print(produit)
L'instruction range()#
L’instruction for … in permet de parcourir tous les éléments d’une suite d’éléments définie avec la fonction range(). Cette fonction range() peut prendre 1, 2 ou 3 paramètres
range(n): parcourt tous les éléments de0àn-1Exemple:
range(5)parcourra tous les éléments de la liste [0, 1, 2, 3, 4]
range(a, n): parcourt tous les éléments deaàn-1Exemple:
range(36,40)parcourra tous les éléments de la liste [36, 37, 38, 39]
range(a, n ,p)parcourt tous les éléments deaàn-1avec un pas dep.Exemple:
range(10,18,2)parcourra tous les éléments de la liste [10, 12, 14, 16]Exemple:
range(10,0,-2)parcourra tous les éléments de la liste [10, 8, 6, 4, 2]
Remarques:
a,netpdoivent être des nombres entiers (integer)Si la valeur de début est plus grande que la valeur de fin, alors le pas
pdoit être positif.Si la valeur de début est plus petite que la valeur de fin, alors le pas
pdoit être négatif.
Exemple 3#
Modifiez les paramètres a, n et p dans l'exemple ci-dessous afin de voir quelles sont les valeurs qui seront parcourures par la variable i dans la boucle for()
1# Modifiez les paramètres `a`, `n` et `p` ci-dessous
2a = 1 # valeur de début
3n = 10 # valeur de fin
4p = 2 # pas
5
6print("range(", a ,",", n ,",", p ,"): ")
7for i in range(a, n ,p):
8 print(i)
Exercice 6#
Cochez la bonne réponse.
Qu'affiche le progamme suivant?
1for i in range(3): 2 print("Hello")
Qu'affiche le progamme suivant?
1for i in range(4): 2 print(i)
Qu'affiche le progamme suivant?
1for i in range(2): 2 print("i")
Qu'affiche le progamme suivant?
1for i in range(3, 7): 2 print(i+1)
Qu'affiche le progamme suivant?
1for i in range(5,20,3): 2 print(i)
Exercice 7#
Écrivez un programme qui demande à l'utilisateur un nombre entier positif et affiche les 10 premiers multiples de ce nombre.
1# Écrivez le programme ici
Solution
1nombre = int(input("Choisissez un nombre: "))
2for i in range(10):
3 print(nombre * (i + 1))
1nombre = int(input("Choisissez un nombre: "))
2for i in range(1, 11):
3 print(nombre * i)
1nombre = int(input("Choisissez un nombre: "))
2for i in range(nombre, 10*nombre, nombre+1):
3 print(i)
Exercice 8#
Écrivez un programme qui affiche les nombres pairs jusqu'à 20.
1# Écrivez le programme ici
Solution
1# parcourt tous les nombres de 2 à 20 en faisant à chaque fois un pas de 2
2for i in range(2, 21, 2):
3 print(i)
1# parcourt tous les nombres de 1 à 20 et n'affiche que les nombres pairs
2for i in range(1, 21):
3 if i % 2 == 0:
4 print(i)
Exercice 9#
Écrivez un programme qui affiche le résultat des calculs suivants sans le noter explicitement:
\(1 + 2 + 3 + 4 + ... + 99 + 100\)
1# Écrivez le programme iciSolution
1somme = 0 2for i in range(100): 3 somme += i + 1 4print(somme)
1somme = 0 2for i in range(1, 101): 3 somme += i 4print(somme)
\(1 + 3 + 5 + 7 + ... + 97 + 99\)
1# Écrivez le programme iciSolution
1somme = 0 2for i in range(100): 3 if (i + 1) % 2 == 1: 4 somme += i + 1 5print(somme)
1somme = 0 2for i in range(1, 101): 3 if i % 2 == 1: 4 somme += i 5print(somme)
Exercice 10#
Ecrivez un programme qui permette de dessiner un sapin comme sur le modèle ci-dessous.
Pour ceci, le programme doit demander à l'utilisateur la hauteur du sapin (c'est-à-dire le nombre de lignes de 'O'). Le dessin ci-dessus est a une hauteur de 7.
Dessinez à la main un petit sapin afin de déterminer le nombre d'espaces et le nombre de 'O' à dessiner pour chacune des lignes
créez une boucle qui pour à chaque passage dessinera une ligne du dessin: un certain nombre d'espaces suivi d'un certain nombre de 'O'
Pour équilibrer le tout, il faut dessiner un tronc: la hauteur du tronc correspond au tiers de la hauteur du sapin (utiliser pour ceci la division entière)
1# Écrivez le programme ici
Astuce
Par défaut, la fonction print() ajoute automatiquement un retour à la ligne comme dernier caractère.
Pour ne pas avoir de retour à la ligne, il est possible de redéfinir (et de le remplacer par un caractère vide) en ajoutant end="" comme dernier argument:
1print("a")
2print("b")
3print("c")
4print("d", end="")
5print("e", end="")
6print("f")