Python滞后斐波那契发生器
我正试图用Python编写一个程序,用滞后斐波那契方法计算伪随机数序列。我想生成范围(0,2**32)内的2000个数字,然后根据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:
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