Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/11/2010, 23:01
Gobix
 
Fecha de Ingreso: octubre-2010
Mensajes: 25
Antigüedad: 14 años
Puntos: 2
Pregunta Engañando una función de Python

Un profesor de un amigo dijo que él podía engañar a la función math.sqrt() al sacar la raíz de un número negativo, entonces me dio curiosidad eso que dijo y quise intentarlo.

Me gustaría que me ayudaran para que mi programa dé un resultado correcto, usé el típico problema de fórmula general, aquí está todo lo que he hecho has ahora:
Código Python:
Ver original
  1. #! /usr/bin/python2.6
  2. # *.* encoding=utf-8 *.*
  3. from math import sqrt
  4.  
  5. a = float(input("Primera variable -> "))
  6. b = float(input("Segunda variable -> "))
  7. c = float(input("Tercera variable -> "))
  8.  
  9. if b == 0 and c == 0:
  10.     print("La ecuación no tiene solución")
  11. elif a == 0:
  12.     print("Ésta es una ecuación de primer grado\n")
  13.     x = -c / b
  14.     print("El resultado es %s" %(x))
  15.     del x
  16. else:
  17.     division = 2 * a
  18.     interno = (b ** 2 - 4 * a * c)
  19.  
  20.     #AQUÍ EMPIEZO A ENGAÑAR LA FUNCIÓN math.sqrt()
  21.     if interno < 0:
  22.         print("\nNo hay soluciones reales")
  23.         interno *= -1
  24.     discriminante = sqrt(interno)
  25.     if interno < 0 and discriminante > 0:
  26.         discriminante *= -1
  27.     #HASTA AQUÍ TERMINA EL ENGAÑO
  28.  
  29.     x1 = round((-b + discriminante) / division, 2)
  30.     x2 = round((-b - discriminante) / division, 2)
  31.     if x1 == x2:
  32.         print("\nEl resultado de X1 y X2 es %s" %(x1))
  33.     else:
  34.         print("\nLa solución de X1 es %s y la de X2 es %s" %(x1, x2))
  35.         del a,b,c,division,interno,discriminante,x1,x2