Me lo contaron y lo olvidé, lo leí y lo entendí, lo hice y lo aprendí.





miércoles, 14 de marzo de 2012

Solución para elevar numero negativos a potencia fraccionaria [python]

Para los que hemos intentado alguna función matemática que eleve una variable a una potencia fraccionaria, notamos que cuando la variable es negativa arroja un error diciendo que no es posible elevar una base negativa a una potencia fraccionaria.
Me refiero a algo así:

x=-5
funcion = x**3.3

Nos arrojará un error; más sin embargo si hacemos algo como ésto

funcion = -5**3.3

Nos dará el resultado correcto. Éste es un bug un tanto radical para un lenguaje potente como Python, pero por suerte encontré una buena alternativa para solucionarlo, la idea es guardar la función (con el valor de x) en un string y al final solo evaluar la cadena de texto:


def getValue(fx,x):
    y = fx.replace("x",str(x))
    return eval(y)

En este caso fx es una cadena de texto con la función, como puede ser "x**3.3" o "2*(x**-8.1)" o cualquier cosa así; la x es el valor numérico de la variable.
Entonces lo que se guarda en 'y' es la cadena de texto reemplazando el carácter 'x' por el valor real de x (cualquier número), en el ejemplo anterior, si x=-5 la cadena terminaría como "-5**3.3". Al final se evalúa la cadena como expresión de Python y regresa el resultado.


Perfil Google+