致力于编写一个看似简单的函数来查找事物的累积。它非常抽象,它的签名是这样的:
def accumulate(combiner, start, n, term):
"""Return the result of combining the first n terms in a sequence."""
"*** YOUR CODE HERE ***"
关于这个问题的更多信息:
“Accumulate 将相同的参数 term 和 n 作为总和和乘积作为参数,以及一个组合器函数(两个参数),它指定如何将当前项与前面项的累加组合,以及一个指定什么的起始值用于开始累积的基础值。” ——来自加州大学伯克利分校 CS61A 2013 年秋季,John DeNero
"Combiner" 是指从 "start" 到 "n" 的术语将被累加的方式(可以是 add、sub、mul 等)。组合器最多需要 2 个参数。
“术语”是指应用于以“start”开头并以“n”结尾的每个术语的函数。这可能意味着取每一项的平方、sqrt、n%//2。
我想在不必使用 functools.reduce 的情况下解决这个问题。
我知道我必须制作一个函数组合循环,但这是让我感到困惑的部分。然后,我必须让每个函数接受两个参数:旧累积和当前项。
我已经为此工作了 2 天,并且把自己搞糊涂了,所以我的代码搞砸了。有什么建议么?
def accumulate(combiner, start, n, term):
"""Return the result of combining the first n terms in a sequence."""
now=0
while start+now+1<=n:
def combiner(x,y):
old=combiner(start+now,start+now+1)
old=combiner(old,start)
now+=1
return old
“start+now+1”是指我不能开始在 term(n) 上执行组合器功能,直到我至少有 n 项。但是后来我变得困惑,因为我必须在存储旧总和并更新它的同时继续组合最后两个值。