评估用户为多个值指定的公式

时间:2014-10-17 04:43:19

标签: python user-input equation

我正在编写一个python脚本,需要以这样的形式从用户那里获取等式

z=x^2+3x+9 +y^3 or z =cos(pi/2+x) + 2sin(y)

并在运行时通过x和y的许多值评估函数。我如何将用户提供的输入用作函数?意思是我希望能够做到这样的事情:

input = input("please input 3 variable function.")
function = evaluate_function(input)
for x and y:
        result = evaluate function
        return result

这样的事情可能吗?我环顾四周,我发现我想要做的事情似乎就是这个(How to process user supplied formulas?),但它只讨论评估x和z的单个值而不是迭代多个值。任何帮助将不胜感激。

更新:如下所示,我发现这个(http://lybniz2.sourceforge.net/safeeval.html)关于使用eval(),这似乎是我想做的事情

2 个答案:

答案 0 :(得分:0)

解释数学公式是sympy的领域。 parse_expr是其安全的解析功能,其global_dictlocal_dict参数控制着可用的预定义符号。

答案 1 :(得分:0)

是的,解析和替换应该起作用:

from sympy.parsing.sympy_parser import parse_expr
eq = parse_expr(raw_input('enter an equation of x, y and/or z'))
for v in ((1,2,3),(1,2,4)):
  res = eq.subs(dict(zip((x,y,z),v)))
  dat = (tuple(v) + (eq, res))
  print('at x=%s, y=%s, z=%, %s = %s' % dat)