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

📐 Second degré & Python

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

🏀 Physique 📈 Économie 🌉 Architecture
Ma progression 0 / 7 exercices
1
Palier guidé
🔵 Guidé — lire et compléter
🏀
Contexte — trajectoire d'un ballon Un ballon est lancé depuis le sol. Sa hauteur en mètres au cours du temps est modélisée par la fonction f(x) = −x² + 6x, où x est le temps en secondes. Le ballon retombe au sol à x = 6 secondes.
💡 Comment écrire f(x) = −x² + 6x en Python ?

En Python, x² s'écrit x**2. Le coefficient −1 devant x² doit être écrit explicitement : -1 * x**2 ou plus simplement -x**2 n'est pas valide — il faut écrire -1 * x**2 + 6*x.

❓ Exercice 1 — Lire et prédire

Voici un programme qui calcule la hauteur du ballon pour différentes valeurs de x. Parmi les quatre sorties proposées, laquelle est correcte ?

ballon.py
for x in range(0, 7) :
    hauteur = -1 * x**2 + 6 * x
    print(hauteur)
A 0, 6, 12, 18, 24, 30, 36
B 0, 5, 8, 9, 8, 5, 0
C 0, 5, 8, 9, 8, 5
D 0, 7, 12, 15, 16, 15, 12
✅ Bonne réponse : B.

range(0, 7) génère x = 0, 1, 2, 3, 4, 5, 6 — soit 7 valeurs. Pour chacune : f(0)=0, f(1)=5, f(2)=8, f(3)=9, f(4)=8, f(5)=5, f(6)=0. La réponse C est presque correcte mais n'a que 6 valeurs (oubli de x=0 ou x=6). La réponse A correspond à 6x sans le terme −x² (oubli de la puissance). La réponse D résulte d'une erreur de signe.

✏️ Exercice 2 — Compléter

On veut trouver la hauteur maximale atteinte par le ballon. L'idée : on parcourt toutes les valeurs de x, et à chaque fois qu'on trouve une hauteur plus grande que la meilleure connue, on la retient.

💡 Logique du programme

On utilise une variable h_max pour mémoriser le plus grand h rencontré jusqu'ici. Au départ elle vaut 0 (le ballon est au sol). À chaque tour :

  1. On calcule la hauteur h à l'instant x.
  2. Si h est plus grande que h_max, alors c'est un nouveau record : on met h_max à jour avec cette nouvelle valeur, et on note l'instant x dans x_max.
  3. Sinon, on ne fait rien : h_max reste inchangé.

À la fin de la boucle, h_max contient la hauteur maximale et x_max l'instant auquel elle est atteinte.

Complète les trois trous du programme :

exercice2.py
h_max = 0          # on commence avec le record à 0 (ballon au sol)
x_max = 0          # instant du record
for x in range(0, 7) :
    h = -1 * x**2 + 6 * x   # hauteur à l'instant x
    if h > h_max :             # nouveau record ?
        h_max =       # ① on retient la nouvelle hauteur maximale
        x_max =       # ② on retient l'instant correspondant
print("Hauteur max :", h_max, "m à t =", , "s")
# doit afficher : Hauteur max : 9 m à t = 3 s
① : on vient de trouver que h est plus grande que l'ancien record — c'est elle le nouveau maximum. Quelle variable contient cette hauteur ?
② : on veut retenir à quel instant ce record a eu lieu. Quelle variable contient l'instant courant dans la boucle ?
③ : à la fin, on affiche l'instant du record — c'est la variable qu'on a mise à jour en ②.
Terminal Python
2
Palier semi-guidé
🟠 Semi-guidé — déboguer et adapter
📈
Contexte — bénéfice d'une startup Une entreprise modélise son bénéfice mensuel (en milliers d'euros) en fonction du nombre x de produits vendus (en centaines) par la fonction g(x) = −2x² + 20x − 32. Elle sait par ailleurs que ce bénéfice s'annule exactement pour x = 2 et x = 8, ce qui correspond à la forme factorisée g(x) = −2(x − 2)(x − 8).
🐛 Exercice 3 — Corriger le code

Un élève veut afficher le bénéfice de l'entreprise pour chaque x où il est positif, puis afficher le bénéfice maximal à la fin. Son code contient deux erreurs signalées par des soulignements rouges. Repère-les et corrige-les.

benefice_bugue.py
g_max = 0
for x in range(0, 11) :
    g = -2 * x**2 + 20 * x - 32
    if g > 0 :
        print(x)          # ← bug 1
        if g > g_max :
            g_max = g
print("Maximum :", x)   # ← bug 2

Pour chaque bug, indique ce qu'il faut écrire à la place :

Bug 1 — print() on veut afficher le bénéfice, pas le numéro de produits
Bug 2 — print("Maximum :", ) on veut afficher le bénéfice maximal, pas x
Bug 1 : dans la boucle, x est le nombre de produits et g est le bénéfice. On veut afficher le bénéfice.
Bug 2 : après la boucle, x vaut 10 (la dernière valeur du range) — ce n'est pas le maximum. La variable qui mémorise le bénéfice le plus élevé s'appelle g_max.
Terminal Python

✏️ Exercice 4 — Adapter

On sait que g(x) = −2(x − 2)(x − 8) — les racines sont donc x = 2 et x = 8. L'axe de symétrie de la parabole passe par le milieu de ces deux racines.

Complète le programme qui calcule cet axe de symétrie et la valeur du sommet, sans boucle.

exercice4.py
x1 = 2        # première racine
x2 = 8        # deuxième racine
axe = ( + ) / 2
# calcul du sommet : on évalue g en x = axe
sommet = -2 * axe**2 + 20 * axe - 32
print("Axe de symétrie : x =", )
print("Sommet : g =", )
# doit afficher : Axe de symétrie : x = 5.0
#                 Sommet : g = 18.0
L'axe de symétrie est le milieu de x1 et x2 : (x1 + x2) / 2. Ensuite, le sommet est l'image de ce point par g — on évalue la formule en remplaçant x par axe.
Terminal Python

❓ Exercice 5 — Interpréter

Un élève exécute le programme suivant pour savoir quand l'entreprise est bénéficiaire (g(x) > 0). Que va-t-il afficher ?

question5.py
for x in range(0, 11) :
    g = -2 * (x - 2) * (x - 8)
    if g > 0 :
        print(x)
ALes valeurs 2, 3, 4, 5, 6, 7, 8 (entre les racines et aux racines)
BLes valeurs 0, 1, 9, 10 (à l'extérieur des racines)
CLes valeurs 3, 4, 5, 6, 7 (strictement entre les racines)
DAucune valeur — g est toujours négatif
✅ Bonne réponse : C.

Ici a = −2 < 0, donc g(x) est positif entre les racines et négatif à l'extérieur — exactement l'inverse du cas a > 0. Les racines sont 2 et 8, mais g(2) = g(8) = 0 : la condition g > 0 (strictement) les exclut. Seules les valeurs entières 3, 4, 5, 6, 7 vérifient g(x) > 0. La réponse B correspondrait à un coefficient a positif.
3
Palier autonome
🟣 Autonome — écrire son propre code
🌉
Contexte — arche d'un pont L'arche d'un pont piétonnier est modélisée par la fonction h(x) = −0,5 · x · (x − 20), où x est la position horizontale en mètres (de x = 0 à x = 20) et h(x) la hauteur en mètres. Les deux pieds du pont sont au sol (h = 0) en x = 0 et x = 20.
⌨️ Exercice 6 — Écrire

Écris un programme qui affiche la hauteur h(x) pour x = 0, 2, 4, 6, …, 20 (tous les 2 mètres).

Rappel : h(x) = −0.5 * x * (x − 20).
Astuce : range(0, 21, 2) génère 0, 2, 4, …, 20.

exercice6.py
corrigé6.py
for x in range(0, 21, 2) :
    h = -0.5 * x * (x - 20)
    print(h)

On obtient : 0, 18, 32, 42, 48, 50, 48, 42, 32, 18, 0 — la symétrie est parfaitement visible. Le maximum est bien 50 m en x = 10 m (milieu du pont).


⌨️ Exercice 7 — Aller plus loin

Un bateau doit passer sous le pont. Il a besoin d'un passage d'au moins 40 mètres de hauteur.

Écris un programme qui parcourt x de 0 à 20 et affiche, pour chaque valeur entière de x, si le passage est possible ("OK") ou non ("trop bas") selon que h(x) est supérieure ou non à 40.

Tu auras besoin de : une boucle for, une condition if / else, et un print().

exercice7.py
corrigé7.py
for x in range(0, 21) :
    h = -0.5 * x * (x - 20)
    if h > 40 :
        print(x, "OK")
    else :
        print(x, "trop bas")

Le passage est possible (h > 40) pour x = 6, 7, 8, 9, 10, 11, 12, 13, 14 — soit sur 9 mètres de large au milieu du pont. On peut vérifier : h(6) = −0,5 × 6 × (−14) = 42 m. Algébriquement, h(x) > 40 ⟺ −0,5x(x−20) > 40 ⟺ x² − 20x + 80 < 0, dont les racines sont ≈ 5,53 et 14,47.

0 / 7
exercices validés
🏠