Chapitre 6 · Première · TP Python n°4

📈 Fonction exponentielle

Trois paliers · guidé → semi-guidé → autonome

🦠 Biologie 💊 Pharmacologie ☢️ Radioactivité
Ma progression0 / 7 exercices
1
Palier guidé
🔵 Guidé — lire et compléter
🦠
Contexte — croissance bactérienne Une culture de bactéries démarre avec 100 individus et double toutes les heures. La population au bout de t heures est modélisée par P(t) = 100 × 2t. En Python, 2t s'écrit 2 ** t.
❓ Exercice 1 — Lire et prédire

Que va afficher ce programme au premier tour de boucle (t = 0) ?

bacteries.py
for t in range(0, 6) :
    P = 100 * 2 ** t
    print(P)
A0  — car 2 × 0 = 0
B200  — car 100 × 2 = 200
C100  — car 2⁰ = 1
D2  — car 2¹ = 2
✅ Bonne réponse : C.

Au premier tour, t = 0. Python calcule 100 * 2 ** 0 = 100 × 1 = 100. La propriété a⁰ = 1 s'applique ici : toute base élevée à la puissance 0 vaut 1. La réponse B (200) serait le résultat à t = 1 ; la réponse D (2) correspond à 2 ** 1 sans le facteur 100.

✏️ Exercice 2 — Compléter

On veut afficher P(t) pour t = 0 à 10, et s'arrêter dès que la population dépasse 10 000 bactéries. Complète les deux trous.

exercice2.py
for t in range(0, 11) :
    P = 100 *  ** t
    print(P)
    if P >  :
        break
# doit s'arrêter à t = 7 (P = 12800)
La base de la puissance est le facteur de doublement. Le seuil est la valeur à dépasser.
Terminal Python
2
Palier semi-guidé
🟠 Semi-guidé — déboguer et adapter
💊
Contexte — élimination d'un médicament Un patient reçoit une dose de 200 mg. Chaque heure, son organisme élimine 15 % de la dose restante : il en reste donc 85 %. La dose au bout de t heures suit D(t) = 200 × 0,85t. C'est une décroissance exponentielle car 0 < 0,85 < 1.
🐛 Exercice 3 — Corriger le code

Un élève a écrit le programme suivant pour afficher D(t) de t = 0 à 10. Son code contient deux bugs : un sur la puissance, un sur la valeur initiale.

medicament_bugue.py
D0 = 200
a  = 0.85
for t in range(0, 11) :
    D = D0 * a * t     # ← bug 1 : pas une puissance
    print(D)
# À t=0 le programme affiche 0.0 au lieu de 200.0
# À t=5 il affiche 850.0 au lieu de 88.74

La ligne correcte est D = D0 * a ?? t. Quel opérateur faut-il utiliser ?

D = D0 * a t remplace l'opérateur
En Python, la multiplication s'écrit * et la puissance s'écrit avec deux étoiles. a * t multiplie a par t ; a ** t élève a à la puissance t — ce n'est pas du tout la même chose.
Terminal Python

✏️ Exercice 4 — Adapter

Complète le programme pour qu'il s'arrête dès que D(t) passe sous 50 mg et affiche la valeur de t correspondante. Deux trous à compléter.

exercice4.py
D0 = 200
a  = 0.85
for t in range(0, 30) :
    D = D0 * a ** t
    if D <  :
        print()
        break
# doit afficher : 9
La condition teste si la dose est passée sous le seuil. On veut afficher l'instant où cela se produit, pas la dose elle-même.
Terminal Python

❓ Exercice 5 — Interpréter

Voici un programme qui affiche f(0), f(1), f(2), f(3) pour une fonction f(x) = ax. La sortie est : 1   0.5   0.25   0.125. Quelle est la valeur de a ?

question5.py
a = ???
for x in range(0, 4) :
    print(a ** x)
Aa = 2  — croissante car 2 > 1
Ba = 0.5  — décroissante car 0 < 0,5 < 1
Ca = −0.5  — décroissante car négatif
Da = 1  — constante car égale à 1
✅ Bonne réponse : B — a = 0,5.

La suite 1, 0.5, 0.25, 0.125 est divisée par 2 à chaque étape, donc multipliée par 0,5. C'est bien 0,5⁰ = 1, 0,5¹ = 0,5, 0,5² = 0,25, 0,5³ = 0,125. La base 0,5 est entre 0 et 1 → fonction décroissante. La réponse C est à écarter : une base négative n'est pas autorisée pour une fonction exponentielle (a doit être strictement positif).
3
Palier autonome
🟣 Autonome — écrire son propre code
☢️
Contexte — désintégration radioactive Un échantillon radioactif contient initialement 1 000 unités. Sa demi-vie est de 1 heure : toutes les heures, la moitié se désintègre. La quantité restante suit R(t) = 1000 × 0,5t.
⌨️ Exercice 6 — Écrire

Écris un programme qui affiche R(t) pour t = 0 à 10, et qui indique par un message "seuil franchi" la première fois que R(t) passe sous 10 unités.

Tu auras besoin de : une boucle for, la formule 1000 * 0.5 ** t, une condition if, et un break.

exercice6.py
corrigé6.py
for t in range(0, 11) :
    R = 1000 * 0.5 ** t
    print(t, R)
    if R < 10 :
        print("seuil franchi")
        break

Le seuil est franchi à t = 7 : R(7) ≈ 7,81 unités. On peut vérifier que R(6) ≈ 15,6 > 10, donc c'est bien t = 7 le premier dépassement vers le bas.


⌨️ Exercice 7 — Aller plus loin

La propriété vue en cours dit que ax+y = ax × ay. Écris un programme qui la vérifie numériquement pour a = 0,5, et pour toutes les paires (x, y) avec x et y entiers de 0 à 4.

Pour chaque paire, calcule les deux membres et affiche "OK" s'ils sont égaux (ou très proches), "ERREUR" sinon.

Astuce : en Python, deux flottants ne sont jamais exactement égaux à cause des arrondis — compare avec abs(gauche - droite) < 1e-9.

exercice7.py
corrigé7.py
a = 0.5
for x in range(0, 5) :
    for y in range(0, 5) :
        gauche = a ** (x + y)
        droite = a ** x * a ** y
        if abs(gauche - droite) < 1e-9 :
            print(x, y, "OK")
        else :
            print(x, y, "ERREUR")

Toutes les lignes affichent OK — la propriété est vérifiée pour toutes les paires. C'est une façon d'utiliser Python comme un outil de vérification numérique d'une propriété mathématique, ce qu'on appelle parfois un test expérimental.

0 / 7
exercices validés
🏠