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

AlexC -  
 AlexC -
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. AlexC
     
    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à.
    0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    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.
    0
  3. AlexC
     
    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))
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      je me demande s'il est bien utile d'entourer les réponses multiples de parenthèses.
      0
    2. AlexC
       
      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.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > AlexC
         
        peux-tu montrer le code sans les parenthèses (extérieures).
        0
  4. AlexC
     
    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)
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      et toujours le même message d'erreur?
      if round(abs(second-first), places) == 0: 
      TypeError: unsupported operand type(s) for -: 'tuple' and 'float' 
      0
    2. AlexC
       
      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.
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > AlexC
         
        est-ce un site public?
        0
    3. AlexC
       
      Non, il s'agit d'un site lié à une agence de formation privée. Merci et tant pis pour cet exercice alors.
      0