Obteniendo la función matemática como entrada del usuario.

Necesito saber cómo transferir la entrada de cadena a la función ejecutable. Por ejemplo, el usuario escribe la cadena ‘x * Sin (x ** 2)’ y luego el progtwig la toma como una función, puede calcular un valor para una x dada, puede trazar la derivación de esta función, etc. He leído que hay un módulo llamado scitools.stringfunction, pero por lo que sé, este módulo no se puede llamar en python-3.

¿Alguna idea de cómo hacerlo?

Para Python 2.X

 f = lambda x: input() # the user inputs: x**2 + 1 y = f(3) print y # outputs: 10 

Para Python 3.X

 f = lambda x: eval(input()) y = f(5) print y 

Sólo asegúrese de import las funciones matemáticas requeridas. Y asegúrese de que el usuario ingrese una expresión aritmética de Python válida.

usando sympy podrías hacer algo como esto:

 from sympy import var from sympy import sympify x = var('x') # the possible variable names must be known beforehand... user_input = 'x * sin(x**2)' expr = sympify(user_input) res = expr.subs(x, 3.14) print(res) # -1.322... 

Si desea convertir la entrada del usuario en una función, puede llamar a esto:

 from sympy.utilities.lambdify import lambdify f = lambdify(x, expr) # f(3.14) -> -1.322... 

Sympy puede hacer cálculos simbólicos (incluyendo derivados); Si quieres hacer plots te sugiero fuertemente matplotlib .

La ventaja de usar una biblioteca matemática opuesta a eval es que no necesita sanear la entrada del usuario (contra el código malicioso).