Как определить функцию, которая ссылается на предыдущие значения в диапазоне? - PullRequest
0 голосов
/ 13 января 2019

Итак, я пытаюсь определить функцию, которая выглядит математически так: M_n = M_n-1 (1 + g) ––, где n и n-1 - индексы, а g - константа.

Я хочу сделать это в диапазоне от 1 до 100. У меня уже есть значения для n = 1. Код, который у меня есть до сих пор, выглядит так

for num in range(1,100):
    if num <= 1:
        print(M_n)    # since I already have an M_n for n=1

Итак, начиная с n = 2 и далее, как мне убедиться, что M_n ссылается на свое предыдущее значение и выполняет с ним следующую операцию: M_n-1 (1 + g)?

Любая помощь будет высоко ценится!

1 Ответ

0 голосов
/ 13 января 2019

M_(n-1) - это самое последнее вычисление, произведенное на предыдущей итерации цикла. Сохраните это в переменной и обратитесь к нему снова на следующей итерации.

Если вам не нужны промежуточные M_n значения, просто сохраните один обновленный результат:

m = 1  # M_0, so the starting value for the sequence
for n in range(1, 100):
    # update M_n for the current iteration
    m *= 1 + g

или вы можете добавить в список (в этом случае предыдущее значение всегда является последним значением в списке):

m = [1]  # list with M_0, so the starting value for the sequence
for n in range(1, 100):
    # add M_n for the current iteration
    m.append(m[-1] * (1 + g))

или используйте itertools.accumulate() для накопления всех значений:

from itertools import accumulate, chain

calc_mn = lambda prev, n: prev * (1 + g)
# calculate starting from [1] for M_0
m = accumulate(chain([1], range(1, 100)), calc_mn)

В последнем случае m - это итератор, выдающий результаты при итерации.

...