我试图解决数学问题,但我想先做一些信息测试,以便了解发生的事情(也许可以通过我的程序找到解决方案),我的问题是:
考虑包含前n个自然数而不是零的列表,即从1到n。 我们定义了转型"移动平均线"在n个元素的列表上,通过添加列表末尾所有术语的平均值并消除列表开头的第一个术语。 例如,如果n = 4,我们有:(1,2,3,4) - > (2,3,4,2.5) 通过多次迭代这个过程,人们可以观察到标准化的现象,并且当迭代次数趋于+无穷大时,列表的所有元素都倾向于共同的值。 它要求此限制的n值为254859658745.
好吧,我正在尝试编写功能"移动平均线"像这样:
def moving_average(liste,t):
k=0
S=0
m=0
c=0
n=len(liste)
while c<t:
while k<n:
S+=int(liste[k])
k+=1
m=S/n
liste.pop(0)
liste.append(m)
c+=1
return m
我的计划有效,但没有回答我想要的内容,如果我将liste=[1,2,3]
(例如)用于所有t&gt; 1答案总是一样的......但我不是明白为什么。
答案 0 :(得分:1)
为了帮助你前进,这是答案的第一部分。调试方法如下:
def moving_average(liste,t):
k=0
S=0
m=0
c=0
n=len(liste)
while c<t:
print("At c: ", c)
k=0
while k<n:
print(" At k: ", k)
S+=int(liste[k])
k+=1
m=S/n
print(" .. new S", S)
print(" .. new k", k)
print(" .. new m", m)
liste.pop(0)
liste.append(m)
print(" liste: ", liste)
c+=1
return m
test_list = [1,2,3]
test_t = 4
print("Result:", moving_average(test_list, test_t))
然后查看每个结果,直到找到一个不符合预期的结果
由于你比我更了解你在每一步所做的事情,你可能会比这更快地找到潜在的问题:)
更新
一个&#34;显而易见的&#34;它之所以无效,是因为您每次都在k
循环后没有重置c
。
如果你在修复之前查看输出,你会看到&#34;在K&#34;消息只出现一次,第一次通过。
我已经更新了上面的代码来解决这个问题,我认为它确实像你期待的那样。我不确定你为什么要采用int()
的听众[k],但这是一个单独的问题。