Si quieres hacer tu código mas legible entonces lee la
guía de estilo y listo. Si quieres seguir buenas practicas entonces puedes leer libros acerca del tema, pero nada te dará más conocimiento que la practica.
Código Python:
Ver originalef calcular(a, b, c):
discriminante = b * b - 4 * a * c
if discriminante >= 0:
return ((-b + (discriminante ** .5)) / (2.0 / a),
(-b - (discriminante ** .5)) / (2.0 / a))
else:
discriminante = -discriminante
return (complex(-b, (discriminante ** .5)) / (2.0 * a),
complex(-b, -(discriminante ** .5)) / (2.0 * a))
def menu():
print "Solucionador de ecuaciones de segundo grado"
print "_" * 43
def leerFlotante(texto):
return float(raw_input(texto))
menu()
a = leerFlotante("\tEscriba el valor de a: ")
while a == 0.0:
a = leerFlotante("\tEl valor de a no puede ser 0, por favor corrijalo: ")
b = leerFlotante("\tEscriba el valor de b: ")
c = leerFlotante("\tEscriba el valor de c: ")
x1, x2 = calcular(a, b, c)
if x1 == x2:
print "Soluciones reales e iguales: x1 = x2 = %.2f" % x1
elif type(x1) == complex:
print "Soluciones complejas y conjugadas x1 = %.2f+%.2fi x2 = %.2f+%.2fi" % (x1.real, x1.imag, x2.real, x2.imag)
else:
print "Soluciones reales y diferentes x1 = %.2f, x2 = %.2f" % (x1, x2)
Te dejo mi código para que lo puedas comprar con el tuyo.
El tuyo no funciona bien cuando pones el 0.
Algunos puntos importantes:
1.- Quite la librería math, que por ciertos los imports solo se hacen al principio del script, no dentro de funciones o de algún ciclo, por un import por lo regular tiene un costo computacional alto.
2.- Calcula solo hace lo que debe calcular, no imprime no hace nada mas, solo calcula.
3.- Cree una función leerFlotante por que al parecer se repite mucho, ademas si mas adelante quisieras hacer una validación lo puedes hacer en esta función y no cambiar todos los raw_input a lo largo de todo tu programa.
4.- Hice una función menu en caso de que lo utilices en varias partes entonces, solo mandas a llamar a la función menu,.
5.- etc... (Algunos otros cambios creo que los descubrirás por tu cuenta.)