2016-11-20 130 views
0

我想从我的函数调用值和代码与错误而失败:“诠释”对象没有属性__getitem__

int object has no attribute __getitem__

请解释,并建议我应该试试。以下是python代码:

def congruential(a, m, x): 
    x_0 = x 
    for i in range (5): 
     x_0[i] = (a * x_0[i-1]) % m 
     if x_0[i] == x_0[0]: 
      break 
     print 'Value of X0 =', x 
     print 'Value of a = ', a 
     print 'Value of m =', m 
    print 'Numbers in series' 
    for j in range (4): 
     print x_0[j] 


congruential(11, 16, 7) 
+3

鉴于'x_0'是'7'(如'X_0 = x'),你期望'x_0 [i]'做什么?你希望从这个函数中得到什么输出? – jonrsharpe

+0

你为什么大叫? *什么*系列?而且,再一次,你如何看待'7 [0]'应该做什么? – jonrsharpe

回答

0

您正试图访问一个整数的索引,它肯定不会返回任何内容。

你一定想传递一个数组作为调用函数的第三个参数,从我从尝试中得到的结果。

congruential(11, 16, 7)应该转换为congruential(11, 16, any_arr)以完成预期的工作。 any_arr=range(7)是该数组的可能值之一

+0

明白了。谢谢:) – blackPanther

0

您正在传递一个数字并试图将其视为列表。 您正在传递“congruential(11,16,7)” ,然后将x_0分配给x(x_0分配给7)。 然后你试图访问x_0的0位置的元素(这实际上没有,因为x_0 = 7而不是一个列表)。

如果您试图生成同余随机数生成器并将7作为种子值,则可以尝试下面的代码。

DEF同余生成(A,M,X):

x_0 = [] 
x_0.append(x) 
for i in range (1,6): 
    z = (a * x_0[i-1]) % m 
    x_0.append(z) 
    if x_0[i] == x_0[0]: 
     break 
    print 'Value of X0 =', x 
    print 'Value of a = ', a 
    print 'Value of m =', m 
print 'Numbers in series' 
for j in range (len(x_0)): 
    print x_0[j] 

同余生成(11,16,7)

+0

这段代码给我一个错误“列表分配索引超出范围” – blackPanther

+0

刚编辑我的代码。 –

+0

谢谢阿卡什。但这不适用于多个呼叫。例如,如果我用不同的参数调用此函数,如 同余(11,16,8) 同余(7,16,7) 同余(8,16,7) 代码失败。 – blackPanther

相关问题