Python滞后斐波那契发生器

Python滞后斐波那契发生器,python,random,fibonacci,Python,Random,Fibonacci,我正试图用Python编写一个程序,用滞后斐波那契方法计算伪随机数序列。我想生成范围(0,2**32)内的2000个数字,然后根据x_I-1绘制x_I。我有: def lag(s): for i in range(k): if i is 0: out = (s[j-1] + s[k-1]) % m elif 0 < i < k - 1: s[i] = s[i+1] else:

我正试图用Python编写一个程序,用滞后斐波那契方法计算伪随机数序列。我想生成范围(0,2**32)内的2000个数字,然后根据
x_I-1
绘制
x_I
。我有:

def lag(s):
    for i in range(k):
        if i is 0:
            out = (s[j-1] + s[k-1]) % m
        elif 0 < i < k - 1:
            s[i] = s[i+1]
        else:
            s[i] = out
            print(s[i])
j, k, m = 7, 10, 2**32

X=[1]

for n in range(2000):
    X.append(lag(X[-1]))
    y = X[:]
    y.append(y[0])
    del y[0]

import matplotlib.pyplot as plt
plt.plot(X, y, '.')

我不知道这个错误是什么意思,也不知道如何修复它。有人能帮忙吗?

当你调用
lag(X[-1])
时,你将
int
作为
s
传递,而不是
列表。关于产生你提到的错误的原因,上面的评论是正确的。关于函数,它不返回任何值,这是一个问题。您可能希望在for循环之后添加一个返回s。另一件事是修改函数中的整个列表。那么您真的想使用append方法吗?也许X=滞后(X)会更好?最后,您需要注意X至少包含max(j,k)值,否则您将尝试访问大于列表大小的索引。我认为没有充分的理由让
lag
依赖于全局变量,例如
j
k
。为什么不将这些值作为显式函数参数传递?这将使您的代码更加模块化。@Patol75如何解决试图访问大于列表大小的索引的问题?我认为您至少有两种可能性。无论哪种方式,for循环都在len(s)而不是k上迭代。无论哪种方式,都可以基于len(X)定义k。
out = (s[j-1] + s[k-1]) % m
TypeError: 'int' object is not subscriptable