Exercices — Algorithmique et programmation en Python
💡 Conseil : fais chaque exercice au brouillon avant d’ouvrir le corrigé — c’est en te trompant que tu progresses.
Exercice 1 — Dérouler un programme à la main
On exécute le programme suivant :
a = 4
b = a + 3
a = a * 2
- Quelle est la valeur de
bjuste après la deuxième ligne ? - Quelles sont les valeurs finales de
aet deb? - Quel est le type des variables
aetb? - On ajoute la ligne
c = "8". Quel est le type dec? Est-ce la même chose que le nombre 8 ?
Voir le corrigé
1. À ce moment-là, a vaut 4, donc b = 4 + 3 : la variable b contient 7.
2. La troisième ligne recalcule a : a = 4 * 2, donc a contient 8. Et b contient
toujours 7 : une affectation ne modifie que la variable à gauche du signe = — b ne
se « met pas à jour » tout seul.
3. Ce sont des entiers (type int) : aucun calcul n’a produit de nombre à virgule.
4. Avec les guillemets, c est une chaine de caractères (type str). Ce n’est pas le
nombre 8 : c’est le texte « 8 ». On ne peut pas calculer c + 1, alors que a + 1 vaut 9.
Réflexe à retenir : pour comprendre un programme, déroule-le ligne par ligne en notant la valeur de chaque variable après chaque instruction — exactement comme le ferait la machine.
Exercice 2 — Frais de livraison (if / else)
Un site de vente en ligne facture 6 € de frais de livraison, offerts dès 50 € d’achat.
- Écrire un programme qui, à partir d’une variable
montant, calcule le total à payer dans une variabletotal. - Qu’affiche
print(total)simontant = 62? Simontant = 40? - Le site durcit sa règle : la livraison n’est offerte que pour un montant strictement
supérieur à 50 €. Quelle ligne faut-il modifier ? Que devient alors le total pour
montant = 50?
Voir le corrigé
1. On traduit la règle par une condition :
if montant >= 50:
frais = 0
else:
frais = 6
total = montant + frais2. Pour montant = 62 : la condition 62 >= 50 est vraie, donc frais = 0 et le programme
affiche 62. Pour montant = 40 : la condition est fausse, donc frais = 6 et il affiche
46.
3. Seule la condition change : if montant > 50: (inégalité stricte). Pour
montant = 50, la condition 50 > 50 est fausse : frais = 6 et le total devient 56 —
alors qu’avec >=, la livraison était offerte et le total valait 50.
Réflexe à retenir : traduis l’énoncé en une condition booléenne précise, et choisis entre
>= et > en testant la valeur charnière (ici 50) : c’est elle qui fait la différence.
Exercice 3 — Que font ces boucles ?
- Qu’affiche ce programme ?
s = 0
for i in range(5):
s = s + i
print(s)
- Le modifier pour qu’il calcule la somme .
- Qu’affiche ce programme ? Justifier en faisant tourner la boucle.
n = 1
while n * n < 200:
n = n + 1
print(n)
Voir le corrigé
1. range(5) donne à i les valeurs 0, 1, 2, 3, 4 (la borne 5 est exclue !). La variable
s accumule : , puis , puis , puis , puis
. Le programme affiche 10 — et non 15 : le 5 n’est jamais ajouté.
2. Il suffit de parcourir les entiers de 1 à 100, donc d’écrire range(1, 101) (borne de
droite exclue) :
s = 0
for i in range(1, 101):
s = s + i
print(s) # affiche 50503. La boucle augmente n tant que son carré reste inférieur à 200 : elle s’arrête au
premier entier dont le carré atteint 200. Or et :
quand n vaut 14, la condition est encore vraie, donc n passe à 15 ; le test
suivant () est faux et la boucle s’arrête. Le programme affiche 15.
Réflexe à retenir : fais tourner la boucle à la main sur les premiers tours, puis repère le tour où la condition bascule — c’est là que se joue le résultat (et le piège du « dernier tour »).
Exercice 4 — Écrire des fonctions
- Écrire une fonction
aire_rectangle(longueur, largeur)qui renvoie l’aire d’un rectangle. Que renvoie l’appelaire_rectangle(7, 4)? - On considère la fonction mathématique . Écrire une fonction
image(x)qui renvoie . Que renvoient les appelsimage(2)etimage(-1)? - Écrire une fonction
moyenne(a, b)qui renvoie la moyenne de deux nombres. Pourquoireturn a + b / 2serait-il faux ? - Lire et comprendre : que renvoie l’appel
moyenne3(8, 12, 16)de la fonction ci-dessous ?
def moyenne3(a, b, c):
return (a + b + c) / 3
Voir le corrigé
1. Aire = longueur × largeur :
def aire_rectangle(longueur, largeur):
return longueur * largeurL’appel aire_rectangle(7, 4) renvoie .
2. En Python, « puissance » s’écrit ** :
def image(x):
return 3 * x**2 + 1image(2) renvoie , et image(-1) renvoie
(le carré de vaut ).
3. Avec les parenthèses obligatoires :
def moyenne(a, b):
return (a + b) / 2moyenne(12, 15) renvoie 13.5. Sans parenthèses, Python appliquerait les priorités de
calcul : a + b / 2 signifie , soit — faux.
4. La fonction additionne ses trois arguments puis divise par 3 :
. L’appel renvoie 12.0 (la division / de Python
donne toujours un nombre à virgule). Savoir lire une fonction écrite par quelqu’un d’autre
est un attendu du programme, au même titre que savoir en écrire une.
Réflexe à retenir : une fonction, c’est arguments → calcul → return. Et teste chaque fonction avec des valeurs simples dont tu connais déjà le résultat : c’est le contrôle qualité du programmeur.
Exercice 5 — Simuler la somme de deux dés (type contrôle ⭐)
On lance deux dés équilibrés à six faces et on s’intéresse à la somme obtenue.
- Écrire une fonction
somme_deux_des(), sans argument, qui simule un lancer et renvoie la somme des deux dés. - Un élève propose plutôt
return randint(2, 12). Expliquer pourquoi cette version ne simule pas correctement l’expérience. - Écrire une fonction
frequence_sept(n)qui simulenlancers et renvoie la fréquence des lancers dont la somme vaut 7. - Un appel
frequence_sept(10000)a renvoyé0.1683. Comparer avec la probabilité théorique, sachant qu’il y a 6 façons d’obtenir une somme de 7 parmi les 36 tirages possibles.
Voir le corrigé
1. Chaque dé est un appel à randint(1, 6) (bornes comprises), et on additionne :
from random import randint
def somme_deux_des():
return randint(1, 6) + randint(1, 6)2. randint(2, 12) renverrait chaque somme de 2 à 12 avec la même probabilité
. Or les sommes ne sont pas équiprobables : une somme de 7 s’obtient de 6 façons
— , , , , , — alors qu’une
somme de 2 ne s’obtient que d’une seule ( et ). Il faut simuler chaque dé, pas la
somme directement.
3. Une boucle répète l’expérience, un compteur totalise les succès :
def frequence_sept(n):
compteur = 0
for i in range(n):
if somme_deux_des() == 7:
compteur = compteur + 1
return compteur / n4. La probabilité théorique vaut . La fréquence observée en est très proche : sur un grand nombre de répétitions, la fréquence se stabilise autour de la probabilité. C’est exactement ce que permet une simulation : estimer une probabilité en répétant l’expérience des milliers de fois.
Réflexe à retenir : une simulation, c’est toujours le même duo — une fonction pour une
expérience, puis une boucle avec compteur pour la répéter ; la fréquence compteur / n se
rapproche de la probabilité quand n grandit.
Envie d’aller plus loin ? Reçois gratuitement le classeur de fiches de ta classe par email : l’essentiel du cours, prêt à imprimer, pour réviser tout le programme.