移动平均程序(Python)

时间:2015-05-08 02:21:58

标签: python-3.x moving-average

我试图解决数学问题,但我想先做一些信息测试,以便了解发生的事情(也许可以通过我的程序找到解决方案),我的问题是:

  

考虑包含前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答案总是一样的......但我不是明白为什么。

你能帮帮我吗?

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],但这是一个单独的问题。