Partie 5 · exercices 50 à 61

Répéter : la boucle for

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 in range(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).

ÉcritureValeurs 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 = 0
for i in range(1, 6):
    somme = somme + i
print(somme)
TourValeur de iValeur de somme à la fin du tour
avant—0
111
223
336
4410
5515

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 if dans la boucle.

compteur.py
compteur = 0
for n in range(1, 101):
    if n % 3 == 0:
        compteur = compteur + 1
print("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 in range(4):
    print(i)
b.py
for i in range(3, 7):
    print(i * 2)
c.py
for i in range(10, 0, -3):
    print(i)
d.py
s = 0
for i in range(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

  1. Écris un programme qui demande un entier \(n\) et affiche la somme \(1 + 2 + \dots + n\). Quelle est la somme pour \(n = 100\) ?
  2. 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\).

  1. Écris un programme qui demande \(n\) et affiche \(n!\).
  2. À 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

  1. Affiche tous les multiples de 7 compris entre 1 et 100, en utilisant les trois paramètres de range.
  2. 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\).

  1. Écris un programme qui affiche, pour tous les entiers \(x\) de \(-3\) à \(5\), la ligne x = -3 : f(x) = 20.
  2. 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.

  1. Écris un programme qui demande un nombre d'années et affiche la somme obtenue chaque année, arrondie au centime.
  2. Quelle somme a-t-on après 10 ans ?
  3. 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.

  1. Écris un programme qui simule 1000 lancers d'un dé à six faces et compte le nombre de 6.
  2. Affiche la fréquence de 6 (nombre de 6 divisé par 1000). Relance plusieurs fois : les résultats sont-ils toujours les mêmes ?
  3. 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 chaque n.

💾 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.
  • Compter avec un if dans une boucle.
  • Imbriquer deux boucles.