0

我正在尝试在 python 中编写一个带有 4 个参数的函数

def sequence(operation, start, n, term):

其中 operation 是一个函数,start 是序列的开始编号,n 是序列的最后一个编号,term 是操作序列中各项的函数。

例如

>>> sequence(add, 2, 10, square)

将返回 2、3、4、...、10 的平方和

鉴于:

def square(x):
    return x * x
4

4 回答 4

2
reduce(lambda a,b: a+b, map(square, range(2,11)))
于 2011-09-09T11:16:17.197 回答
1
def sequence(operation, start, n, term):
    return reduce(operation, map(term, range(start, n+1)))

Python 中的 range 函数是半开的,即。range(start, stop) 返回从 start 到 stop-1 的整数列表。因此,例如:

>>> range(2,10)
[2,3,4,5,6,7,8,9]

因此,要解决您的问题,您需要 range(start, n+1)。

要将函数“term”应用于此范围内的每个整数,您将使用内置函数映射,例如:

>>> map(square,range(2,11))
[4, 9, 16, 25, 36, 49, 64, 81, 100]

函数的最后一部分需要内置函数 reduce,它的参数是一个函数、一个可迭代对象和一个可选的初始值(在本例中不需要)。

reduce 将给定函数应用于可迭代的前两个元素;然后它将函数应用于第一次计算的结果和可迭代的第三个元素,依此类推。

因此,例如:

>>> from operator import add
>>> reduce(add, [4, 9, 16, 25])

... 相当于:

>>> add( add( add(4, 9), 16), 25)

... 和:

>>> reduce(add, [4, 9, 16, 25, 36, 49, 64, 81, 100])

... 相当于:

>>> add( add( add( add( add( add( add( add(4, 9), 16), 25), 36), 49), 64), 81), 100)   
于 2011-09-09T12:05:56.567 回答
0

您可以使用Python内置函数 range和.reducemap

于 2011-09-09T10:45:28.523 回答
0
from operator import add,mul

def square(x):  return x * x


def sequence(oper,m,n,func):
    if oper not in (add,mul):
        return None
    return reduce(lambda a,b: oper(a,func(b)),
                  xrange(m,n+1),
                  0 if oper==add else 1)


print sequence(add, 3,4, square)
print sequence(mul,2,3,square)
print sequence('qq',10,110,square)

结果

25
36
None
于 2011-09-09T12:23:32.690 回答