import math
def g(x):
return x**2+3
def Integrate(f, a , b, n):
h=(b-a)/n
result=0
for k in range(n):
x=k*h+h/2
result+=f(x)*h
return result
F=input("f:")
A=float(input("a:"))
B=float(input("b:"))
N=int(input("n:"))
print(Integrate(F, A, B, N))
每当我尝试运行此代码时,它将F读取为字符串,并在integrate(f,a,b,n)中调用时给出错误。我发现在python中无法将F定义为一个函数,但是在另一个函数中调用一个函数绝对是可能的。那么我如何仍可以使用这种使用输入来指定要使用的功能的方式呢?
错误:
line 14, in Integrate
result+=f(x)*h
TypeError: 'str' object is not callable
答案 0 :(得分:0)
您可以使用lambda(作为字符串)在控制台上输入函数,然后使用eval
将字符串转换为实际的函数对象。您的代码如下所示:
F = eval(input("f:"))
在控制台上,如果要集成功能f(x) = 2 * x + 1
,请输入:
lambda x: 2 * x + 1
作为字符串。但是,请注意,eval
会执行(作为Python代码)您在控制台上输入的任何内容,这可能是安全问题,具体取决于程序的使用方式。
答案 1 :(得分:-1)
我不知道您是否要使用数学模块中的函数,但是如果是,则可以按以下方式从模块中获取方法:
function_to_call = getattr(math, f)
result += function_to_call(x) * h
在执行此操作时,您应该使用try除了块周围,以检查给定的函数名是否在数学模块中退出。