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

Fermé
AlexC - 24 juil. 2019 à 16:36
 AlexC - 28 juil. 2019 à 16:33
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
A voir également:

4 réponses

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
yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 Ambassadeur 1 554
Modifié le 24 juil. 2019 à 18:24
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
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
yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554
25 juil. 2019 à 09:37
je me demande s'il est bien utile d'entourer les réponses multiples de parenthèses.
0
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
yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > AlexC
25 juil. 2019 à 18:41
peux-tu montrer le code sans les parenthèses (extérieures).
0
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
yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554
26 juil. 2019 à 14:32
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
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
yg_be Messages postés 23349 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > AlexC
27 juil. 2019 à 14:14
est-ce un site public?
0
Non, il s'agit d'un site lié à une agence de formation privée. Merci et tant pis pour cet exercice alors.
0