因此,我试图定义一个数学上看起来像这样的函数: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)?
任何帮助将不胜感激!
答案 0 :(得分:1)
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
是一个迭代器,在您进行迭代时会产生结果。