基本上,相对于模型答案,我不确定我的答案有什么问题。
我在这里想要实现的是产生一个可以执行lambda x: f(g(f(g(f(g(f(x))))))) # for n == 7
或lambda x: f(g(f(g(x)))) # for n == 4
我尝试过的
def dual_function(f, g, n):
if n == 1:
return f
elif n % 2 == 0:
return lambda x: dual_function(f,g, n-1)(g(x))
else:
return lambda x: dual_function(f,g, n-1)(f(x))
# the code seems to do the above from my understanding?
# it starts off at n == 7: new_x = f(x)
# n == 6: new_x = g(new_x)
# n == 5: new_x = f(new_x)
# and so continues down...
模型答案(对不起,我得到了错误的模型答案以供参考,这是正确的答案,但现在两者实际上都可以使用)
def dual_function(f,g,n):
def helper(x):
f1,g1 = f,g
if n%2==0:
f1,g1 = g1,f1
for i in range(n):
x = f1(x)
f1,g1= g1,f1
return x
return helper
示例
f = lambda x: x+1
g = lambda x: x/2
print(dual_function(f, g, 7)(1))
# correct answer is 0.9375, versus my wrong answer: 2.0
答案 0 :(得分:2)
您的代码和模型代码似乎正在解决不同的问题。您的代码始终以f(...)
作为最外层调用(并且最里面的调用会根据n
是偶数还是奇数而变化),而参考代码始终以g(x)
作为最内层调用(而且最外部的调用可能会有所不同)。
因此,您的函数与n=7
不匹配的原因是,您正在计算f(g(f(g(f(g(f(x)))))))
,而另一个函数在进行g(f(g(f(g(f(g(x)))))))
。不幸的是,我无法告诉您您实际上应该在计算哪些。