【发布时间】:2019-08-17 13:44:04
【问题描述】:
我遇到了以下作业问题:
我的这个问题的代码被标记为错误,当我查看建议的解决方案时,我不明白我哪里出错了。我在 Python IDLE 编译器中运行了这两个函数的代码,却发现这两个函数都返回了相同的输出,如下所示:
>>> def dual_function(f,g,n): #Suggested solution
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
>>> def dual_function_two(f,g,n): #My solution
def helper(x):
if n%2==0:
for i in range (n):
if i%2==0:
x = g(x)
else:
x = f(x)
else:
for i in range(n):
if i%2==0:
x = f(x)
else:
x = g(x)
return x
return helper
>>> add1 = lambda x: x+1
>>> add2 = lambda x: x+2
>>> dual_function(add1,add2,4)(3)
9
>>> dual_function_two(add1,add2,4)(3)
9
>>>
如果有人能找出我的解决方案中的错误,我将不胜感激。谢谢你。
【问题讨论】:
-
你知道用来给你的问题打分的测试用例吗?我找不到任何两个功能不同的情况。
-
那些不是很好的测试函数,因为加法是可交换的——如果你以错误的顺序调用它们,你不会注意到它们的区别。但是我尝试混合加法和乘法,我也找不到区别。
-
由于不断的模运算,它可能比建议的解决方案慢得多。交换会更快。
-
@Sebastian 不幸的是,我没有测试用例:(
-
@Barmar 感谢您让我知道在此类函数中使用交换运算符,将来处理类似问题时会记住它们。
标签: python lambda functional-programming higher-order-functions