lambda 函数不通过输入接受映射规则 (Python)

lambda function not accepting mapping regulation via input (Python)

如何让 lambda 形式的函数通过输入接受映射规则,而不是在函数中明确声明它?

这是我的代码,我正在尝试创建一个数值积分程序。

while True:

 fx=input("Enter a function: ")
 a=int(input("Choose lower integration limit: "))
 b=int(input("Choose upper integration limit: "))
 delta=float(input("Choose delta x: "))

 step=int(1/delta)

 interval=list(range((a*step),(b*step)))
 f= lambda x: (x**2)*delta

Now I want to substitute this part (x**2) for an arbitray polynomial via the input fx

 result=map(f,interval)
 print(sum(list(result))*(delta**2))


continue

如果我尝试用 (x**2) 替换 fx 它将产生此错误:

Traceback (most recent call last):
  File "C:\Users\Christian\Desktop\Python-Programme\Nummerische         Integration.py", line 13, in <module>
    print(sum(list(result))*(delta**2))
  File "C:\Users\Christian\Desktop\Python-Programme\Nummerische    Integration.py", line 11, in <lambda>
    f= lambda x: fx*delta
TypeError: can't multiply sequence by non-int of type 'float'

*我完全知道这可能不是一个最佳的数值积分程序,我构建它的原因只是为了锻炼我的编程技能,同时制作我在理论上仍然可以使用的程序。

f = lambda x: fx(x) * delta

你想要什么?

然后你必须输入 lambda x: x**2 for fx.

但是对于像函数式编程这样的高级概念来说可能有点太早了,因为 Python 尽量不要过分强调它们?例如,您可以从使这段代码对于任何函数都更好更正确开始。

step=int(1/delta)
interval=list(range((a*step),(b*step)))
result=map(f,interval)
print(sum(list(result))*(delta**2))

忽略这个问题是否有意义,错误来自类型不匹配:

当您从 fx=input("Enter a function: ") 获得输入时,变量 fx 的类型将为 str。试试 print(type(fx)).

当您随后执行 fx*delta 时,您基本上是在尝试将一个字符串与一个数值相乘,这是没有意义的。因此你的错误 TypeError: can't multiply sequence by non-int of type 'float'.

一个快速的解决方案是

while True:
    n=int(input("Enter degree of polynomial: "))
    print(type(fx))
    a=int(input("Choose lower integration limit: "))
    b=int(input("Choose upper integration limit: "))
    delta=float(input("Choose delta x: "))
    step=int(1/delta)
    interval=list(range((a*step),(b*step)))
    f= lambda x: (x**n)*delta
    result=map(f,interval)
    print(sum(list(result))*(delta**2))
    continue

高级解决方案需要一种方法来将您的字符串输入解析为 lambda 函数,我认为这并不容易。