我正在尝试在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))
我希望它在功能下打印我的区域,但是它一直在问我另一个功能。抱歉,我不知道如何粘贴我的代码。 :/
答案 0 :(得分:0)
此:
f = lambda x: eval(input("Funktion:"))
完全等于
def f(x):
return eval(input("Funktion:"))
然后,您将f
传递给venstre_sum
,后者将调用f
,该input("Funktion")
执行eval()
,并将结果传递给eval()
并返回结果。>
IOW,这是预期的行为-即使您不是您预期的行为;-)
这里的第一点:请勿使用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]
,尤其不要在用户输入上使用(除非您当然希望第一个脚本小子来控制您的程序)。
现在,您没有发布任何关于有人应该键入“功能”的内容的信息,但是如果它是现有功能的名称,则解决方案非常简单,并且是一种非常常见的模式:构建允许功能的字典并从中获取功能,即:
const struct userData const*