Aller au contenu

Exercices corrigés — Algorithmique et Python (Terminale)

Quatre niveaux de difficulté, du plus simple au plus exigeant. Chaque exercice a sa correction détaillée, étape par étape.

2 exercices de niveau « Maîtrise ». Voir les 8 exercices.

Exercice 5 Maîtrise

On définit la fonction suivante.

def moyenne(L):
    return sum(L) / len(L)

a) Que renvoie moyenne([12, 15, 9, 14]) ? b) Écrire une fonction variance(L) utilisant une liste en compréhension, et donner sa valeur pour la même liste. c) Que se passe-t-il si L est vide ? Comment s'en protéger ?

Voir la correction
Correction détaillée

a) sum(L) vaut 12 + 15 + 9 + 14 = 50 et len(L) vaut 4 : la fonction renvoie 50 / 4, soit 12.5. Le résultat est un flottant, même quand la division tombe juste.
b) La variance est la moyenne des carrés des écarts à la moyenne. On calcule la moyenne une seule fois, puis la liste des carrés des écarts par compréhension :

def variance(L):
    m = moyenne(L)
    return sum([(x - m) ** 2 for x in L]) / len(L)

Pour [12, 15, 9, 14], les écarts à 12,5 sont −0,5 ; 2,5 ; −3,5 ; 1,5, leurs carrés 0,25 ; 6,25 ; 12,25 ; 2,25, de somme 21 : la variance vaut 214 = 5,25 et l'écart type 5,25 ≈ 2,29.
c) Si L est vide, len(L) vaut 0 et la division déclenche une erreur ZeroDivisionError. On se protège en testant ce cas au début de la fonction, par exemple if len(L) == 0: return None, ou en signalant explicitement l'erreur avec raise ValueError("liste vide"). Préciser ce comportement fait partie de la spécification de la fonction.

Exercice 6 Maîtrise

Écrire une fonction donnant le premier entier n tel que 1,05n ≥ 2.

Voir la correction
Correction détaillée

on fait évoluer une variable u qui vaut 1,05n après n passages, en s'arrêtant dès que le seuil 2 est atteint :

def doublement():
    n = 0
    u = 1
    while u < 2:
        u *= 1.05
        n += 1
    return n

Invariant : à chaque test de la condition, u vaut 1,05n exactement pour la valeur courante de n. La boucle continue tant que 1,05n < 2 et s'arrête au premier n tel que 1,05n ≥ 2, qui est bien la valeur renvoyée.
Terminaison : 1,05 > 1, donc 1,05n tend vers +∞ et finit par dépasser 2 ; la boucle s'arrête à coup sûr.
Résultat : 1,0514 ≈ 1,980 < 2 et 1,0515 ≈ 2,079 ≥ 2, la fonction renvoie 15. Vérification par le logarithme : n ≥ ln 2ln 1,05 ≈ 14,21, dont le premier entier supérieur est 15. Un capital placé à 5 % par an double en 15 ans. La fonction se généralise en doublement(taux) avec u *= 1 + taux.