Foros del Web » Programando para Internet » Python »

Engañando una función de Python

Estas en el tema de Engañando una función de Python en el foro de Python en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 17/11/2010, 23:01
 
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
  #2 (permalink)  
Antiguo 17/11/2010, 23:39
Avatar de 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: Engañando una función de Python

Lo que tu llamas "engañar" es comúnmente llamado "validar".

Código Python:
Ver original
  1. print "Dada la ecuacion ax**2 + bx + c = 0"
  2. print "Introduzca:"
  3.  
  4. a = int(raw_input("Valor de a: "))
  5. b = int(raw_input("Valor de b: "))
  6. c = int(raw_input("Valor de c: "))
  7.  
  8. if a == 0:
  9.     print "No es una ecuacion de segundo grado"
  10. else:
  11.     discriminante = b * b - 4 * a * c
  12.     if discriminante < 0:
  13.         print "2 soluciones y son complejas"
  14.         discriminante *= -1
  15.         print "Solucion 1: %.2f %+.2fi" % (-b / (2 * a), (discriminante ** .5) / (2 * a))
  16.         print "Solucion 1: %.2f %+.2fi" % (-b / (2 * a), -(discriminante ** .5) / (2 * a))
  17.     elif discriminante > 0:
  18.         print "2 soluciones y son reales"
  19.         print "Solucion 1: %.2f" % ((-b + (discriminante ** .5)) / (2 * a))
  20.         print "Solucion 2: %.2f" % ((-b - (discriminante ** .5)) / (2 * a))
  21.     else:
  22.         print "Solo una solucion"
  23.         print "%.2f" % (-b / (2 * a))

Recomendación aprender bien matemáticas. Ademas checar la formula general.

Si quieres tener un buen nivel de comprensión de como trabajan las computadoras empieza aprendiendo matemáticas.
  #3 (permalink)  
Antiguo 18/11/2010, 00:08
Avatar de 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: Engañando una función de Python

También pudiste haber usado cmath en vez de math para la raiz.

Etiquetas: Ninguno
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 04:59.