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 函数,我认为这并不容易。
如何让 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 inputfx
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 函数,我认为这并不容易。