Ver Mensaje Individual
  #2 (permalink)  
Antiguo 10/02/2012, 22:28
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Empezando con python. Calcular ecuaciones de 2° grado

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 original
  1. ef calcular(a, b, c):
  2.     discriminante  = b * b - 4 * a * c
  3.     if discriminante >= 0:
  4.         return ((-b + (discriminante ** .5)) / (2.0 / a),
  5.                 (-b - (discriminante ** .5)) / (2.0 / a))
  6.     else:
  7.         discriminante = -discriminante
  8.         return (complex(-b, (discriminante ** .5)) / (2.0 * a),
  9.                 complex(-b, -(discriminante ** .5)) / (2.0 * a))
  10.  
  11. def menu():
  12.     print "Solucionador de ecuaciones de segundo grado"
  13.     print "_" * 43
  14.  
  15. def leerFlotante(texto):
  16.     return float(raw_input(texto))
  17.  
  18.  
  19. menu()
  20. a = leerFlotante("\tEscriba el valor de a: ")
  21. while a == 0.0:
  22.     a = leerFlotante("\tEl valor de a no puede ser 0, por favor corrijalo: ")
  23. b = leerFlotante("\tEscriba el valor de b: ")
  24. c = leerFlotante("\tEscriba el valor de c: ")
  25.  
  26. x1, x2 = calcular(a, b, c)
  27.  
  28. if x1 == x2:
  29.     print "Soluciones reales e iguales: x1 = x2 = %.2f" % x1
  30. elif type(x1) == complex:
  31.     print "Soluciones complejas y conjugadas x1 = %.2f+%.2fi x2 = %.2f+%.2fi" % (x1.real, x1.imag, x2.real, x2.imag)
  32. else:
  33.     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.)