import mathdef g(x): return x**2+3def 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 resultF=input("f:")A=float(input("a:"))B=float(input("b:"))N=int(input("n:"))print(Integrate(F, A, B, N))每当我尝试运行此代码时,它都会将 F 读取为一个字符串,并在集成(f,a,b,n)中调用时给出错误。我发现python中没有办法将F定义为函数,但是在另一个函数中调用一个函数是绝对可以的。那么我怎么能仍然使用这种方式使用输入来指定要使用的功能呢?错误: line 14, in Integrate result+=f(x)*hTypeError: 'str' object is not callable
2 回答
冉冉说
TA贡献1877条经验 获得超1个赞
您可以使用 lambda(作为字符串)在控制台上输入函数,并用于eval将字符串转换为实际的函数对象。您的代码如下所示:
F = eval(input("f:"))在控制台上,如果要集成 function f(x) = 2 * x + 1,则输入:
lambda x: 2 * x + 1
作为字符串。但是,请注意,eval无论您在控制台上输入什么,它都会执行(作为 Python 代码),这可能是一个安全问题,具体取决于您的程序的使用方式。
qq_笑_17
TA贡献1818条经验 获得超7个赞
我不知道您是否想使用 math 模块中的函数,但是如果是,那么您可以通过字符串从模块中获取方法,如下所示:
function_to_call = getattr(math, f) result += function_to_call(x) * h
这样做时,你应该用 try except 块包围来检查给定的函数名称是否在数学模块中退出。
添加回答
举报
0/150
提交
取消
