def sequence(operation, start, n, term):
return reduce(operation, map(term, range(start, n+1)))
Функция диапазона в Python наполовину открыта, т.е.range (start, stop) возвращает список целых чисел от начала до остановки-1.Так, например:
>>> range(2,10)
[2,3,4,5,6,7,8,9]
Поэтому для решения вашей проблемы вам понадобится диапазон (start, n + 1).
Чтобы применить функцию «term» к каждому целому числу в этомдиапазон, в котором вы бы использовали карту встроенной функции, например:
>>> map(square,range(2,11))
[4, 9, 16, 25, 36, 49, 64, 81, 100]
В последней части функции требуется встроенная функция lower, которая принимает в качестве аргументов функцию, итеративное и необязательное начальное значение (что не требуется в этом случае).
lower применяет данную функцию к первым двум элементам итерируемого;затем она применяет функцию к результату первого вычисления и третьему элементу итерируемого и т. д.
Так, например:
>>> 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)