Compter, cumuler, parcourir : calculer sans se fatiguer
Tu connais déjà for i in range(4): pour répéter des instructions de la tortue. Ici, la variable i va devenir utile : elle change à chaque tour et permet de faire des calculs.
CoursLa boucle for et range
boucle.py
for i inrange(5):
print(i)
Ce programme affiche 0, 1, 2, 3, 4, chacun sur une ligne. La variable i prend successivement toutes les valeurs de range(5).
Écriture
Valeurs de la variable
range(5)
0, 1, 2, 3, 4
range(2, 6)
2, 3, 4, 5
range(1, 10, 3)
1, 4, 7 (on avance de 3 en 3)
range(10, 0, -2)
10, 8, 6, 4, 2 (on recule de 2 en 2)
Vigilance : la borne de fin est exclue
range(2, 6) s'arrête avant 6. Pour aller jusqu'à 10 inclus, on écrit range(1, 11).
Sans borne de départ, range commence à 0.
CoursCumuler : l'accumulateur
Pour additionner les entiers de 1 à 5, on prépare une variable qui vaut 0, puis on lui ajoute chaque valeur de i.
somme.py
somme = 0for i inrange(1, 6):
somme = somme + i
print(somme)
Tour
Valeur de i
Valeur de somme à la fin du tour
avant
—
0
1
1
1
2
2
3
3
3
6
4
4
10
5
5
15
Vigilance
La ligne somme = 0 est avant la boucle : sinon la somme repartirait de 0 à chaque tour.
print(somme) est après la boucle, donc non décalé : on affiche une seule fois, à la fin.
CoursCompter : le compteur
Pour compter les éléments qui vérifient une propriété, on place un ifdans la boucle.
compteur.py
compteur = 0for n inrange(1, 101):
if n % 3 == 0:
compteur = compteur + 1print("Il y a", compteur, "multiples de 3 entre 1 et 100")
À retenir
Accumulateur : total = 0 avant la boucle, puis total = total + ... dans la boucle.
Compteur : c'est un accumulateur qui augmente de 1 chaque fois qu'une condition est vraie.
Le nombre de tours est connu à l'avance : on utilise for.
ExercicesBoucler pour calculer
EX 50Je m'entraîne🌶️prise en main
Exercice 50 — Prédire ce qui s'affiche
Sans l'ordinateur, écris ce que chaque programme affiche, puis vérifie en les exécutant.
a.py
for i inrange(4):
print(i)
b.py
for i inrange(3, 7):
print(i * 2)
c.py
for i inrange(10, 0, -3):
print(i)
d.py
s = 0for i inrange(1, 5):
s = s + i * i
print(s)
Indice
Pour le dernier programme, fais un tableau comme dans le cours : valeur de i, valeur de s.
💾 NOM_Prenom_ex50.py
EX 51Je m'entraîne🌶️prise en main
Exercice 51 — Table de multiplication
Écris un programme qui demande un entier \(n\) et affiche sa table de multiplication de 1 à 10, sous la forme 7 x 3 = 21.
Indice
for i in range(1, 11): puis un print avec une f-chaîne dans le bloc.
💾 NOM_Prenom_ex51.py
EX 52Je m'entraîne🌶️🌶️application
Exercice 52 — La somme de 1 à n
Écris un programme qui demande un entier \(n\) et affiche la somme \(1 + 2 + \dots + n\). Quelle est la somme pour \(n = 100\) ?
Le mathématicien Gauss a remarqué que cette somme vaut \(\dfrac{n(n+1)}{2}\). Ajoute une ligne qui affiche cette valeur, et compare pour plusieurs \(n\).
Indice
Sur le modèle de somme.py : range(1, n + 1) pour que \(n\) soit inclus.
💾 NOM_Prenom_ex52.py
EX 53Je m'entraîne🌶️🌶️application
Exercice 53 — La factorielle
La factorielle de \(n\), notée \(n!\), est le produit \(1 \times 2 \times 3 \times \dots \times n\). Par exemple \(5! = 120\).
Écris un programme qui demande \(n\) et affiche \(n!\).
À partir de quelle valeur de \(n\) la factorielle dépasse-t-elle un million ?
Indice 1
C'est un accumulateur, mais pour un produit : il doit démarrer à 1, pas à 0.
Indice 2
Pour la question 2, essaie plusieurs valeurs de \(n\).
💾 NOM_Prenom_ex53.py
EX 54Je m'entraîne🌶️🌶️application
Exercice 54 — Les multiples de 7
Affiche tous les multiples de 7 compris entre 1 et 100, en utilisant les trois paramètres de range.
Refais-le avec range(1, 101), un if et un compteur : affiche les multiples puis leur nombre.
Indice
Le premier multiple de 7 est 7 : range(7, 101, 7).
💾 NOM_Prenom_ex54.py
EX 55Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 55 — Les diviseurs d'un entier
Écris un programme qui demande un entier \(n\) et affiche tous ses diviseurs, puis leur nombre.
Teste avec 36, puis avec 97.
Indice 1
Un entier d divise n quand n % d == 0. Teste tous les d de 1 à n inclus.
Indice 2
Un if dans la boucle, et un compteur.
💾 NOM_Prenom_ex55.py
EX 56Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 56 — Premier ou pas ?
Un entier est premier s'il a exactement deux diviseurs : 1 et lui-même.
À partir de l'exercice 55, écris un programme qui dit si l'entier saisi est premier.
Teste avec 97, 91, 2 et 1.
Indice 1
Ne garde que le compteur : plus besoin d'afficher les diviseurs.
Indice 2
Après la boucle : if nb == 2:.
💾 NOM_Prenom_ex56.py
EX 57Je m'entraîne🌶️🌶️application
Exercice 57 — Un tableau de valeurs
On considère la fonction \(f(x) = x^2 - 3x + 2\).
Écris un programme qui affiche, pour tous les entiers \(x\) de \(-3\) à \(5\), la ligne x = -3 : f(x) = 20.
Pour quelles valeurs de \(x\) le programme affiche-t-il 0 ? Vérifie par le calcul.
Indice 1
range(-3, 6) contient les entiers de −3 à 5.
Indice 2
En Python, \(x^2\) s'écrit x**2.
💾 NOM_Prenom_ex57.py
EX 58Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 58 — Un placement à intérêts composés
On place 1000 € sur un compte qui rapporte 2 % par an : chaque année, la somme est multipliée par 1,02.
Écris un programme qui demande un nombre d'années et affiche la somme obtenue chaque année, arrondie au centime.
Quelle somme a-t-on après 10 ans ?
Avec un taux de 5 %, que faut-il changer ? Quelle somme a-t-on après 10 ans ?
Indice 1
Le capital est une variable qu'on multiplie à chaque tour : capital = capital * 1.02.
Indice 2
Utilise round(capital, 2) pour l'affichage.
💾 NOM_Prenom_ex58.py
EX 59Je m'entraîne🌶️🌶️🌶️plusieurs étapes
Exercice 59 — Le damier
Dessine avec la tortue ce damier de 8 × 8 cases de côté 30 : les cases dont la somme des numéros de ligne et de colonne est paire sont noires.
Le damier à reproduire.Indice 1
Deux boucles imbriquées : j pour les lignes, i pour les colonnes, de 0 à 7.
Indice 2
Pour chaque case : penup(), goto(i * 30, j * 30), setheading(0), pendown(), puis un carré.
Indice 3
Remplis la case seulement si (i + j) % 2 == 0.
💾 NOM_Prenom_ex59.py
EX 60Défi🌶️🌶️🌶️🌶️défi
Exercice 60 — Mille lancers de dé
Un dé équilibré donne un 6 avec la probabilité \(\dfrac{1}{6} \approx 0{,}1667\). Vérifions par une simulation.
Écris un programme qui simule 1000 lancers d'un dé à six faces et compte le nombre de 6.
Affiche la fréquence de 6 (nombre de 6 divisé par 1000). Relance plusieurs fois : les résultats sont-ils toujours les mêmes ?
Remplace 1000 par 100, puis par 100 000. Que constates-tu sur les variations de la fréquence ?
Indice 1
Dans la boucle : de = randint(1, 6), puis un if et un compteur.
Indice 2
La fréquence est compteur / 1000.
💾 NOM_Prenom_ex60.py
EX 61Défi🌶️🌶️🌶️🌶️défi
Exercice 61 — Les nombres premiers jusqu'à 100
Affiche tous les nombres premiers inférieurs ou égaux à 100, puis leur nombre.
Indice 1
Une boucle pour n de 2 à 100 ; à l'intérieur, une deuxième boucle qui compte les diviseurs de n, comme à l'exercice 56.
Indice 2
Attention : le compteur de diviseurs doit être remis à 0 pour chaquen.
💾 NOM_Prenom_ex61.py
À retenirSynthèse
Ce que je sais faire
Écrire for i in range(...) avec un, deux ou trois paramètres, et savoir quelles valeurs prend i.
Cumuler une somme ou un produit avec un accumulateur.