如何在python 2.7中将用户输入转换为函数

时间:2017-06-22 17:40:00

标签: python python-2.7 function variables

我对编程很新,但我想用用户输入定义类似下面的函数:

function = raw_input('What function shall be used? ')     #user puts in "(1+1/x)^x"
def f(x):                                                 #using this to define
    y = (1+1/x)**x     
    return y

我希望我能做的很清楚。你能用输入吗?  并定义 sin 用作 math.sin 的先验?但是我如何在之后定义函数呢?

编辑以添加评论中的规范

假设有效输入是python代码,例如问题中的“(1 + 1 / x)** x”。您现在可以使用eval来定义稍后可以使用的函数f(x)吗?

1 个答案:

答案 0 :(得分:3)

正如我评论的那样,这可以通过类似eval的方式来完成,但是不安全,因为你永远不应该相信随机用户输入。

>>> def expr_to_fn(expr):
...    expr = expr.replace('^', '**')
...    symbols = set(re.findall(r'([A-Z,a-z]+)', expr))
...    fn = eval("lambda {}: {}".format(",".join(symbols), expr))
...    return fn

>>> f = expr_to_fn("(1+1/x)^x")
>>> f(2)
2.25

安全的方法是实现DSL和解析器,或者像Hiro建议的那样使用像sympy这样的CAS(计算机代数系统)。