2016-12-05 1 views
-1

Le code suivant est ce que j'utilise pour un solveur de problème quadratique, où a ne peut pas être égal à 0. Je reçois actuellement des réponses vraiment bizarres, et n'arrive pas à comprendre le problème. Pensées?Problème avec la formule quadratique

def descriminant(a, b, c): #Setting input perameters for descriminant 
if a>0 or a<0: #If a isnt equal to 0, find descriminant 
    disc = (b**2-4*a*c) #Defining what descriminant does with disc 
    if disc>0: 
     disc1=float(disc)**0.5 
     return disc1 #returns and allows to be used again instead of print which doesnt allow you to use it again 

    else: 
     print("The discriminant must be greater than 0") 
else: #if a is equal to 0 
    print ("A cannot equal 0") #Tell the user a cant equal 0 


def quad_form(a, b, c): #Defining quad form w/ input a, b, c 

disc2=float(descriminant(a, b, c)) 


quad_form1=((-1*b) + disc2/float((2*a))) #Defining + forumula for quad form 
quad_form2=((-1*b) - disc2/float((2*a))) #Defining - forumula for quad form 

return quad_form1, quad_form2 


UI=input("Enter the coefficients of a quadratic separated by commas where A is not equal to zero: ") #User Input 
a=float(UI[0]) 
b=float(UI[1]) 
c=float(UI[2]) 

print quad_form(a, b, c) 
+1

Quelles sont les réponses attendues et quelles sont les réponses réelles? Les questions qui cherchent une aide au débogage («pourquoi ce code ne fonctionne-t-il pas?») Doivent inclure le comportement souhaité, un problème ou une erreur spécifique et le code le plus court nécessaire pour le reproduire dans la question elle-même. Les questions sans énoncé de problème clair ne sont pas utiles aux autres lecteurs. Voir: [Comment créer un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve). – MikeJRamsey56

Répondre

1

Il semble que vous preniez deux fois la racine carrée. Une fois dans discriminant(), puis dans quad_form(). Vous devriez en supprimer un.

EDIT: Vos quad_form expressions sont également faux:

quad_form1=((-1*b) + disc3/float((2*a))) 

devrait être

quad_form1=((-1*b) + disc3)/float((2*a)) 

ou plus lisiblement

quad_form1=(-b + disc3)/float(2*a). 

De même pour la ligne suivante,

quad_form1=((-1*b) - disc3)/float((2*a)) 
+0

Ce meilleur @Aditya Kashi? Je ne reçois toujours pas la bonne réponse – Addison

+0

Utilisez directement le disque 2 dans la formule. Ne le jetez pas à 'int'. De plus, les entrées de l'utilisateur sont-elles nécessairement des entiers? Dans les deux cas, vous devriez faire a, b et c 'float' au lieu de' int'. –

+0

Ok, j'ai fait ces changements, mais cela ne semble pas aider avec la sortie. Les chiffres ne sont tout simplement pas corrects, j'ai utilisé des calculatrices en ligne et l'ai fait moi-même @Aditya Kashi – Addison