2017-09-05 1 views
0

J'ai écrit un script pour faire pivoter une matrice de 90 degrés dans le sens des aiguilles d'une montre. J'ai figuré sur l'algorithme mais bloqué sur la mise en œuvre.Pourquoi mon script soulève TypeError: l'objet 'int' n'est pas indicable

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) 

ligne temp = M[i][j] soulève TypeError: 'int' object is not subscriptable bien que la déclaration d'impression renvoie l'élément de la matrice sans l'erreur dans la boucle d'erreur et la boucle au-dessus fonctionne parfaitement bien.

+0

Quelque chose que vous pensez être une 'liste' est vraiment un' int'. – deceze

+1

'M [n - 1 -j] = temp' affecte directement un entier à' M'. Dans les itérations suivantes 'M [i]' frappe celles-ci. –

+0

éditer je mets idiotly M [n - 1 - j] au lieu de M [i] [n - 1 - j] – faishal28

Répondre

1

Voici le soultion correct:

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) 

Notez l'erreur dans la ligne M[n - 1 -j][i] = temp. Vous avez oublié d'ajouter un deuxième index, ce qui a pour effet de remplacer la liste par un entier.

+0

Je ne suis pas d'accord avec vous voici le [code testé en ligne] (https://repl.it/KhU0/2) il ne donne pas le résultat souhaité. – ziMtyth

+1

Je viens de résoudre le problème OP avait, je n'ai pas touché à sa logique sur la matrice de rotation. – Fejs

+0

Je pensais que vous vouliez que cette réponse soit une réponse «complète», dans ce cas vous avez raison. – ziMtyth