python-3.x - 使用 lambda 从输入中获取函数
问题描述
我正在尝试在 python 中进行数字集成,并希望创建一个状态机,您可以在其中向用户询问方法、函数、范围和间隔。但我似乎无法让它工作,它只是不断要求我输入另一个功能。
我是新手程序员,所以我只尝试了下面显示的代码。
def venstre_sum(start,end,inv,func):
return sum([((end-start)/inv)*func(((end-start)/inv)*i+start) for i in range(inv)])
def hoejre_sum(start,end,inv,func):
return sum([((end-start)/inv)*func(((end-start)/inv)+((end-start)/inv)*i+start) for i in range(inv)])
def trapez(start,end,inv,func):
returnv = (venstre_sum(start,end,inv,func)+hoejre_sum(start,end,inv,func))/2
return returnv
def midtsum(start,end,inv,func):
return sum([((end-start)/inv)*func(((end-start)/inv)*(i+0.5)+start) for i in range(inv)])
while True:
state = input("Which method would you like to use? (v,h,t,m,s)")
f = lambda x: eval(input("Funktion:"))
ranges1 = int(input("Give a x0:"))
ranges2 = int(input("Give a xn:"))
inv = int(input("Amount of intervals:"))
h = (ranges2-ranges1)/inv
if state == "v":
print("###########VENSTRESUMS-AREAL:")
print(inv,"intervaller",f.__name__,"(x) A=",venstre_sum(ranges1,ranges2,inv,f))
我希望它在功能下打印我的区域,但它只是不断要求我提供另一个功能。抱歉,我不知道如何粘贴我的代码。:/
解决方案
这个:
f = lambda x: eval(input("Funktion:"))
是完全等价的
def f(x):
return eval(input("Funktion:"))
然后传递f
给venstre_sum
,调用f
,执行input("Funktion")
,将结果传递给eval()
并返回结果。
IOW 这是预期的行为——即使不是你所期望的 ;-)
这里的第一点:不要使用eval()
,特别是不要在用户输入上使用(除非你当然希望第一个脚本小子控制你的程序)。
现在你没有发布任何关于某人应该输入什么作为“函数”的内容,但如果它是现有函数的名称,则解决方案非常简单并且是一种非常常见的模式:构建允许函数的字典并获取函数由此,即:
def area(x):
return x * x
def spam(x):
return x * "spam"
# etc
FUNCTIONS = {
"area": area,
"spam": spam,
# ...
}
# and then:
funcname = input("Funktion:")
f = FUNCTIONS[funcname]
推荐阅读
- ios - 我应该把视图构建器方法方法放在哪里?
- random - 如何在 vhdl 代码中随机化数组的元素?
- anaconda - 如何删除此错误“ModuleNotFoundError: No module named 'sklearn.cross_validation'”
- javascript - 如何在php中打印js变量
- android - 如何清除getIntent().getAction()的值
- azure - 找不到准备好的舵柄吊舱(错误)
- c# - 当“受控文件夹访问”打开时如何检查.NET中的目录写入权限
- javascript - 如何显示来自 web sql 的数据值
- git - Git Pre release hook:自动将发布标签放在常量文件中?
- javascript - Firestore 方法 docRef.set(someData, {merge:true}) 和 docRef.update(someData) 之间的区别?