我对编程很新,但我想用用户输入定义类似下面的函数:
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)
吗?
答案 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(计算机代数系统)。