Foros del Web » Programando para Internet » Python »

Empezando con python. Calcular ecuaciones de 2° grado

Estas en el tema de Empezando con python. Calcular ecuaciones de 2° grado en el foro de Python en Foros del Web. Estoy empezando a programar en python gracias a un tutorial de maestros del web , y después de de haber leído el primer capitulo y ...
  #1 (permalink)  
Antiguo 10/02/2012, 17:35
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 14 años, 9 meses
Puntos: 1
Pregunta Empezando con python. Calcular ecuaciones de 2° grado

Estoy empezando a programar en python gracias a un tutorial de maestros del web, y después de de haber leído el primer capitulo y leer un poco de la documentación decidi tomar un código que había escrito en C y pasarlo a Python, al ejecutarlo en Eclipse me va bien, solo quería ver que cosas podría mejorar y algunas buenas practicas que pueda seguir.

El código:
Código Python:
Ver original
  1. '''
  2. Created on 10/02/2012
  3.  
  4. @author: rodrigo
  5. '''
  6. def calcular(a, b, c):
  7.     import math
  8.     disc = (math.pow(b, 2)) - (4 * a * c)
  9.     if disc > 0:
  10.         x1 = (-b + math.sqrt(disc)) / (2 / a)
  11.         x2 = (-b - math.sqrt(disc)) / (2 / a)
  12.         print "\n\nLa ecacuacion tiene dos posibles soluciones: x1 = %.2f y x2 = %.2f" % (x1, x2)
  13.     else:
  14.         if disc == 0:
  15.             x1 = -b / (2 * a)
  16.             print "\n\nLa ecuacion tiene una posible solucion: x = %.2f" % (x1)
  17.         else:
  18.             xr = -b / (2 * a)
  19.             xi = (math.sqrt(-disc)) / (2 * a)
  20.             print "\n\nLa ecuacion tiene dos posibles soluciones, una real xr = %.2f y una imaginarinaria xi = %.2fi" % (xr, xi)
  21.  
  22. print "Solucionador de ecuaciones de segundo grado"
  23. print "_" * 43
  24. a = raw_input("\tEscriba el valor de a: ")
  25. while a == 0:
  26.     a = raw_input("\tEl valor de a no puede ser 0, por favor corrijalo: ")
  27. b = raw_input("\tEscriba el valor de b: ")
  28. c = raw_input("\tEscriba el valor de c: ")
  29.  
  30. a = float(a)
  31. b = float(b)
  32. c = float(c)
  33.  
  34. calcular(a, b, c)

Muchas gracias a todos los que contesten
  #2 (permalink)  
Antiguo 10/02/2012, 22:28
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
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.)
  #3 (permalink)  
Antiguo 10/02/2012, 23:58
Avatar de BaByRoDrI  
Fecha de Ingreso: julio-2009
Ubicación: Mexico
Mensajes: 60
Antigüedad: 14 años, 9 meses
Puntos: 1
Exclamación Respuesta: Empezando con python. Calcular ecuaciones de 2° grado

Solo quería preguntar una cosa más acerca de tu algoritmo, veo que usas la función complex, y posteriormente veo que tiene x1.real x1.imag

Estos valores REAL e IMAG son resultado propiamente de la operación complex, cierto?

Y una observación, en la línea 4 y 5, en vez de que el 2 divida a "a", deberían estarse multiplicando.
De allí en fuera creo haber entendido todo y ya solo me queda seguir aprendiendo y checar esa guía de estilo.

Muchas gracias!

Cita:
Iniciado por razpeitia Ver Mensaje
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.)
  #4 (permalink)  
Antiguo 11/02/2012, 01:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Empezando con python. Calcular ecuaciones de 2° grado

Cita:
Iniciado por BaByRoDrI Ver Mensaje
Y una observación, en la línea 4 y 5, en vez de que el 2 divida a "a", deberían estarse multiplicando.
Si deberían de estarse multiplicando, creo que eso también cuenta para tu código .

Etiquetas: ecuaciones, empezando, grado, gui, programa, calculadora
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:11.