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
您可以在控制台上使用lambda(作为字符串(输入函数,并使用eval
将字符串转换为实际的函数对象。你的代码看起来是这样的:
F = eval(input("f:"))
在控制台上,如果你想集成功能f(x) = 2 * x + 1
,你需要输入:
lambda x: 2 * x + 1
作为字符串。但是,请注意,eval
将执行(作为Python代码(您在控制台上输入的任何内容,这可能是一个安全问题,具体取决于程序的使用方式。
我不知道你是否想使用数学模块中的函数,但如果是,那么你可以通过字符串从模块中获得方法,如下所示:
function_to_call = getattr(math, f)
result += function_to_call(x) * h
在执行此操作时,应该使用try-except块来检查给定的函数名是否在数学模块中退出。