Équations du 2nd degré

💻 Travail n° 1 Résolution par factorisation

On vous demande de coder un script Python qui permet de donner les solutions d’une équation du 2nd degré dont les coefficients sont saisis par l’utilisateur dans la console.

Pour le travail demandé, la méthode consiste à :

  1. Demander la saisie des coefficients a, b et c de l’équation ax2 + bx + c

  2. Calculer le discriminant : Δ = b2 - 4ac

    • En Python les opérateurs d’addition, soustraction, multiplication et division se notent successivement : +, -, * et /

    • En Python, l’exposant se code ** .

      Exemple de calcul de 23 dans la console Python :
      >>> 2 ** 3
      8
    • Même s’il est possible d’utiliser des lettres grecques pour les noms de variable en Python, ce n’est VRAIMENT PAS RECOMMANDÉ.

      La PEP 8, qui est le guide de style officiel du langage Python, stipule explicitement que les noms de variables doivent utiliser uniquement les lettres de ‘a’ à ‘z’ ou ‘A’ à ‘Z’ sans accents, les chiffres, mais jamais en 1èreposition, et le tiret du bas ‘_’.

      ⇒ Dans l’exercice on utilisera donc plutôt le nom de variable delta à la place de Δ pour stocker le résultat du calcul du discriminant.

  3. Calculer les racines selon la valeur du discriminant :

    1. Δ > 0 ⇒ 2 racines réelles :

      solutions reelles
      • En Python, la racine carrée d’un nombre x s’obtient avec math.sqrt(x). Pour cela, il faut d’abord importer le module math en début de script (→ import math)

        Exemple de calcul de √9 dans la console Python :
        >>> import math
        >>> math.sqrt(9)
        3.0
      • En Python, la valeur absolue d’un nombre x s’obtient avec la fonction native[1] abs(x).

        Exemple de calcul des valeurs absolues de -273.15 et de +37.2 dans la console :
        >>> abs(-273.15)
        273.15
        >>> abs(37.2)
        37.2
    2. Δ = 0 ⇒ 1 seule racine réelle :

      solution reelle unique
    3. Δ < 0⇒ 2 racines complexes :

      width

🎯 Travail à faire :

  1. Coder le script Python qui :

    1. demande à l’utilisateur de saisir les coefficients de l’équation du 2nd degré

    2. calcule le discriminant

    3. calcule les racines selon la valeur du discriminant (positif, nul ou négatif)

    4. affiche la ou les racines à l’écran

Résultat attendu avec différentes valeurs de coefficients :
### Résolution de l'équation : y = a x² + bx + c ###
Saisir le coefficient `a` : 1
Saisir le coefficient `b` : -5
Saisir le coefficient `c` : 6
Résultat :
Δ = 1.00 > 0 → 2 racines réelles
r1 = (-b-√Δ)/2a ≈ 2.00
r2 = (-b+√Δ)/2a ≈ 3.00

### Résolution de l'équation : y = a x² + bx + c ###
Saisir le coefficient `a` : 1
Saisir le coefficient `b` : -4
Saisir le coefficient `c` : 4
Résultat :
Δ = 0 → 1 racine réelle
r = -b/2a ≈ 2.00

### Résolution de l'équation : y = a x² + bx + c ###
Saisir le coefficient `a` : 1
Saisir le coefficient `b` : 2
Saisir le coefficient `c` : 5
Résultat :
Δ = -16.00 < 0 → 2 racines complexes
r1 = (-b - i √|Δ|)/2a ≈ -1.00 - 2.00 i
r2 = (-b + i √|Δ|)/2a ≈ -1.00 + 2.00 i

On vous donne ci-dessous un modèle de script Python sur lequel vous pouvez vous appuyer.

Il montre comment demander des informations à l’utilisateur, effectuer des calculs, faire des tests, afficher un résultat,

fdp-commande.py :
"""Calcul frais de port sur un article

Ce script calcule la somme à payer par un client lorsqu'il passe une
commande d'un article sur un site internet qui facture des frais de
port différents selon le montant de la commande :

* 5€ pour les commandes inférieures à 50€

* 3€ pour les commandes comprises entre 50€ et 100€

* gratuit pour les commandes supérieures à 100€

Le client doit saisir le prix unitaire de l'article et la quantité désirée.

Le script calcule ensuite la somme totale à payer incluant le prix du ou
des articles et les frais de port.
"""
# Saisies utilisateur
prixArticle = float(input("Saisir le prix de l'article : ")) (1)
nbArticles = int(input("Saisir la quantité désirée : ")) (2)

# Calcul prix commande hors frais de port
montantCommande = nbArticles * prixArticle

# Calcul prix total de la commande selon son montant
if (0 < montantCommande < 50) : (3)
    prixTotal = montantCommande + 5
elif ( 50 <= montantCommande < 100) : (3)
    prixTotal = montantCommande + 3
elif (montantCommande == 0 or  montantCommande > 100) : (3)
    prixTotal = montantCommande
else :
    prixTotal = '--'

# Affichage du prix total
print(f"Prix total de la commande : {prixTotal} €") (4)
1 On demande le prix à l’utilisateur sous forme de chaine de caractères (→ input(…​)) et on le transforme en nombre réel (→ float(…​))
2 idem pour la quantité sauf que c’est une valeur entière (→ utilisation de int(…​) plutôt que float(…​))
3 En Python, on peut tester l’appartenance d’une valeur à un intervalle en utilisant globalement la même syntaxe qu’en math.
Les opérateurs de comparaison sont : ‘<’ (strictement inférieur à …​), ‘<=’ (inférieur ou égal à …​), ⚠️ ‘==’ (égal à …​), ‘>’ (strictement supérieur à …​), ‘>=’ (supérieur ou égal à …​).
On peut aussi combiner les tests avec 'or' (ou), 'and' (et), 'not' (non).
4 On affiche le résultat à l’aide d’une f-string de Python
Proposition de solution
eq-2nd-degre.py
"""Calcule les racines d'une équation du 2nd degré
"""
import math

print("### Résolution de l'équation : y = a x² + bx + c ###")
# Saisies utilisateur
a = float(input("Saisir le coefficient `a` : "))
b = float(input("Saisir le coefficient `b` : "))
c = float(input("Saisir le coefficient `c` : "))

# Calcul du discriminant
delta = b ** 2 - 4 * a * c

# Calcul des racines
print("Résultat :")
if (delta > 0) :
    r1 = (-b - math.sqrt(delta)) / (2 * a)
    r2 = (-b + math.sqrt(delta)) / (2 * a)
    print(f"Δ = {delta:.2f} > 0 → 2 racines réelles" )
    print(f"r1 = (-b-√Δ)/2a ≈ {r1:.2f}")
    print(f"r2 = (-b+√Δ)/2a ≈ {r2:.2f}")
elif (delta == 0) :
    r = -b / (2 * a)
    print(f"Δ = 0 → 1 racine réelle double ")
    print(f"r = -b/2a ≈ {r:.2f}")
else :
    re = -b  / (2 * a)
    im = math.sqrt(abs(delta)) / (2 * a)
    print(f"Δ = {delta:.2f} < 0 → 2 racines complexes" )
    print(f"r1 = (-b - i √|Δ|)/2a ≈ {re:.2f} - {im:.2f} i" )
    print(f"r2 = (-b + i √|Δ|)/2a ≈ {re:.2f} + {im:.2f} i" )

✎ Références


1. fonction native signifie`" signifie qu’il est inutile d’importer un module particulier pour utiliser la fonction

🞄  🞄  🞄