2017-09-05 58 views
0

我已經寫了一個腳本來順時針旋轉矩陣90度。我已經算出了算法 ,但堅持實施。爲什麼我的腳本正在引發TypeError:'int'對象不可訂閱

def rotate(M): 
    #Let M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
    n = len(M) 
    temp = None 
    for i in range(0, n): 
     for j in range(i, n): 
      temp = M[i][j] 
      M[i][j] = M[j][i] 
      M[j][i] = temp 
    nby2 = int(n/2) 
    #error loop 
    for j in range(0, nby2): 
     for i in range(0, n): 
      temp = M[i][j]   
      M[i][j] = M[i][n - 1 - j] 
      M[i][n - 1 -j] = temp 
      #print(M[i][j], M[i][n - 1 - j]) 

    for i in M: 
     print(i) 

temp = M[i][j]是提高TypeError: 'int' object is not subscriptable 雖然print語句錯誤環路返回矩陣的元素沒有錯誤,上面的循環工作完全正常。

+0

你認爲是一個'list'實際上是一個'int'。 – deceze

+1

'M [n-1 -j] = temp'將一個整數直接賦值給'M'。在下面的迭代中,'M [i]'擊中了那些。 –

+0

編輯我特意把M [n - 1 - j]而不是M [i] [n - 1 - j] – faishal28

回答

1

這裏是正確的soultion:

def rotate(M): 
    #Let M = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 
    n = len(M) 
    temp = None 
    for i in range(0, n): 
     for j in range(i, n): 
      temp = M[i][j] 
      M[i][j] = M[j][i] 
      M[j][i] = temp 
    nby2 = int(n/2) 
    #error loop 
    print(M, nby2) 
    for j in range(0, nby2): 
     for i in range(0, n): 
      temp = M[i][j]   
      M[i][j] = M[i][n - 1 - j] 
      M[i][n - 1 -j] = temp 
      #print(M[i][j], M[i][n - 1 - j]) 

    for i in M: 
     print(i) 

通知符合M[n - 1 -j][i] = temp錯誤。您忘記添加第二個索引,從而導致列表被替換爲整數。

+0

我不同意你在這裏[代碼在線測試](https://repl.it/KhU0/2),它沒有給出預期的結果。 – ziMtyth

+1

我剛剛解決了OP的問題,我沒有觸及他關於旋轉矩陣的邏輯。 – Fejs

+0

我以爲你打算這個答案是一個「完整」的答案,在這種情況下你是對的。 – ziMtyth

相關問題