2016-11-20 154 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

相關問題