如何在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
现在我想通过输入
将此部分(x**2)
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'
*我完全清楚这可能不是一个最佳的数字集成程序,我之所以建立这个只是为了锻炼我的编程技巧,同时制作我仍然可以理论上使用的程序。
答案 0 :(得分:0)
时
f = lambda x: fx(x) * delta
你想要什么?
然后你必须为fx输入lambda x: x**2
。
但是对于像函数式编程这样的高级概念来说可能有点太早了,因为Python试图不过分强调它们?例如,你可以通过使这段代码更好,更正确任何函数来开始。
step=int(1/delta)
interval=list(range((a*step),(b*step)))
result=map(f,interval)
print(sum(list(result))*(delta**2))
答案 1 :(得分:0)
无论问题是否合理,错误都来自类型不匹配:
当您从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函数,我认为这并不容易。