【问题标题】:Evaluating a formula given by user for multiple values评估用户给出的多个值的公式
【发布时间】:2014-12-12 14:57:44
【问题描述】:

我正在编写一个 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() 这似乎是我想做的事情

【问题讨论】:

  • 听说过eval吗?
  • 是的,但我读到如果您不能信任用户的输入,这不是一种安全的方法

标签: python user-input equation


【解决方案1】:

解释数学公式是sympy 的领域。 parse_expr 是它的安全解析函数,它的 global_dictlocal_dict 参数控制哪些预定义符号可用。

【讨论】:

    【解决方案2】:

    是的,解析和替换应该可以工作:

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-09
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多