Erreur programme résolution d'équation du second degré

Bonjour,
Sur un site d'exercices, il a été demandé d'implémenter 3 fonctions permettant de résoudre une équation du second degré. Voici mon code:

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

from math import sqrt

def rho (a,b,c):
return b*b-4*a*c

def n_solutions(a,b,c):
if rho(a,b,c)<0:
return 0
elif rho(a,b,c)==0:
return 1
else:
return 2

def solution(a,b,c):
nb=n_solutions(a,b,c)
if nb==0:
return None
elif nb==1:
return -b/(2*a)
elif nb==2:
return ((-b+sqrt(rho(a,b,c)))/(2*a) , (-b-sqrt(rho(a,b,c)))/(2*a))

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

Après vérification, les résultats obtenus sont corrects, cependant,
le correcteur automatique affiche :

----------------------------------------------------------------------------------------------------------------------------------------------------------------
ERROR: test_find_the_min_solution (TestEq.TestEq)
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Traceback (most recent call last):
File "./src/TestEq.py", line 76, in test_find_the_min_solution
File "/usr/lib64/python3.5/unittest/case.py", line 908, in assertAlmostEqual
if round(abs(second-first), places) == 0:
TypeError: unsupported operand type(s) for -: 'tuple' and 'float'

----------------------------------------------------------------------------------------------------------------------------------------------------------------

J'ai compris que la dernière ligne pose problème mais je ne parviens pas à corriger mon erreur.

Merci d'avance

Alex

4 réponses

  1. Je n'arrive pas a le poster ici avec une indentation valide sans le réécrire intégralement mais le problème ne viens pas de là.
    1. Contributeur
      bonjour, merci d'utiliser les balises de code pour poster du code.
      je me demande s'il est bien utile d'entourer les réponses multiples de parenthèses.
      1. Merci voici une version correctement balisée.

        def rho (a,b,c):
            return b*b-4*a*c
            
        def n_solutions(a,b,c):
            if rho(a,b,c)<0:
                return 0 
            elif rho(a,b,c)==0:
                return 1
            else:
                return 2
            
        def solution(a,b,c):
            nb=n_solutions(a,b,c)
            if nb==0:
                return None 
            elif nb==1:
                return -b/(2*a)
            elif nb==2:
                return ((-b+racine_carree(rho(a,b,c)))/(2*a) , (-b-racine_carree(rho(a,b,c)))/(2*a))
        1. Contributeur
          je me demande s'il est bien utile d'entourer les réponses multiples de parenthèses.
        2. J'ai déjà tester sans, mais bien qu'étant inutile, ça ne change rien, ça reste un tuple et mon site affiche l'erreur.
        3. Contributeur
          @AlexCpeux-tu montrer le code sans les parenthèses (extérieures).
      2. Voici:

        def rho (a,b,c):
            return b*b-4*a*c
            
        def n_solutions(a,b,c):
            if rho(a,b,c)<0:
                return 0 
            elif rho(a,b,c)==0:
                return 1
            else:
                return 2
            
        def solution(a,b,c):
            nb=n_solutions(a,b,c)
            if nb==0:
                return None 
            elif nb==1:
                return -b/(2*a)
            elif nb==2:
                return (-b+racine_carree(rho(a,b,c)))/(2*a) , (-b-racine_carree(rho(a,b,c)))/(2*a)
        1. Contributeur
          et toujours le même message d'erreur?
          if round(abs(second-first), places) == 0: 
          TypeError: unsupported operand type(s) for -: 'tuple' and 'float' 
        2. Je le crains en effet. J'ai déjà testé toutes sortes de notations différentes mais rien n'y fait et le message d'erreur subsiste.
        3. Contributeur
          @AlexCest-ce un site public?
        4. Non, il s'agit d'un site lié à une agence de formation privée. Merci et tant pis pour cet exercice alors.