Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1304 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  [python]Problème TypeError: 'int'

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[python]Problème TypeError: 'int'

n°2195570
Akurasu
Posté le 26-06-2013 à 21:29:12  profilanswer
 

Bonjour,
J'ai un problème avec mon code sur un automate cellulaire, j'ai essayer d'inserer la fonction:

Code :
  1. for i, j in ((i-1, j), (i, j-1), (i+1, j+1), (i-1, j-1), \
  2.                  (i+1, j), (i, j+1), (i+1, j-1), (i-1, j+1)):
  3.                 if grid[i%N][j%N]==0:
  4.                     count += 1
  5.             return count


 
dans :

Code :
  1. from random import randrange
  2. import random
  3. from copy import deepcopy
  4. def display(grid):
  5.     for i in range(N):
  6.         for j in range(N):
  7.             if grid[i][j]==0:
  8.                 print("*",end="" )
  9.             elif grid[i][j]==1:
  10.                 print(".",end="" )
  11.             else:
  12.                 print("#",end="" )
  13.         print()
  14. def init_state(N):
  15.     grid = [ [ randrange(3) for _ in range(N) ] for _ in range(N) ]
  16.    
  17.     if N%2 == 0:
  18.         grid[int(N/2)][int(N/2)] = 1
  19.     else:
  20.         grid[int(N/2 + 1)][int(N/2) + 1] = 1
  21.     return grid
  22. def next_grid(grid,N):
  23.     new_grid = deepcopy(grid)
  24.     count = 0
  25.     for i in range(N):
  26.         for j in range(N):
  27.             for i, j in ((i-1, j), (i, j-1), (i+1, j+1), (i-1, j-1), \
  28.                  (i+1, j), (i, j+1), (i+1, j-1), (i-1, j+1)):
  29.                 if grid[i%N][j%N]==0:
  30.                     count += 1
  31.             return count
  32.             if grid[i][j] == 0:
  33.                 new_grid[i][j] = 1
  34.             elif grid[i][j] == 1:
  35.                 new_grid[i][j] = 2
  36.             elif grid[i][j] == 2 and count == 2:
  37.                 new_grid[i][j] = 0
  38.     grid[:] = new_grid
  39.     return new_grid
  40. #programme#
  41. N=11
  42. A=init_state(N)
  43. display(A)
  44. for t in range(1,6):
  45.     B= next_grid(A,N)
  46.     print("étape n°",t)
  47.     display(B)


 
Mais je comprend pas d'où vient le problème de type. Mais le problème vient de display(B). et j'ai l'erreur:

Code :
  1. if grid[i][j]==0:
  2. TypeError: 'int' object is not subscriptable


 
Pouvez-vous m'aider car je sait pas d'où sa peut venir.

mood
Publicité
Posté le 26-06-2013 à 21:29:12  profilanswer
 

n°2195576
suizokukan
Posté le 26-06-2013 à 21:49:22  profilanswer
 

Bonsoir,
je n'ai pas le temps de lire ton code mais le message d'erreur signifie que grid[i] contient un entier : grid[i][j] n'a donc pas de sens.
 


---------------
rule #1 : trust the python
n°2195578
Akurasu
Posté le 26-06-2013 à 22:01:59  profilanswer
 

merci pour la réponse mais je vois pas pourquoi grid[i][j] n'a  pas de sens puisque c'est la coordonnée de ma grille.  
Mais le message d'erreur complet c'est :
Traceback (most recent call last):
 , line 56, in <module>
    display(B)
 , line 9, in display
    if grid[i]==0:
TypeError: 'int' object is not subscriptable

n°2195665
suizokukan
Posté le 27-06-2013 à 14:57:49  profilanswer
 

Je me corrige : pour une raison ou pour une autre,

grid

contient un entier (et non une liste d'entiers, voire une liste de listes d'entiers vu ce que tu veux faire); Python ne peut donc accéder à

grid[i]

.


Message édité par suizokukan le 27-06-2013 à 14:58:36

---------------
rule #1 : trust the python
n°2195684
Akurasu
Posté le 27-06-2013 à 15:34:39  profilanswer
 

merci pour ta réponse. j'ai reussit a corriger le problème:

Code :
  1. from random import randrange
  2. import random
  3. from copy import deepcopy
  4. def display(grid):
  5.     for i in range(N):
  6.         for j in range(N):
  7.             if grid[i][j]==0:
  8.                 print("*",end="" )
  9.             elif grid[i][j]==1:
  10.                 print(".",end="" )
  11.             else:
  12.                 print("#",end="" )
  13.         print()
  14. def init_state(N):
  15.     grid = [ [ randrange(3) for _ in range(0,N+1) ] for _ in range(0,N+1) ]
  16.    
  17.     if N%2 == 0:
  18.         grid[int(N/2)][int(N/2)] = 1
  19.     else:
  20.         grid[int(N/2 + 1)][int(N/2) + 1] = 1
  21.     return grid
  22. def next_grid(grid,N):
  23.     new_grid = deepcopy(grid)
  24.     for i in range(N):
  25.         for j in range(N):
  26.             if grid[i][j] == 2:
  27.                 count = 0
  28.                 if grid[i-1][j+1] == 0:
  29.                     count+=1
  30.                 if grid[i][j+1] == 0:
  31.                     count+=1
  32.                 if grid[i+1][j+1] == 0:
  33.                     count+=1
  34.                 if grid[i-1][j] == 0:
  35.                     count+=1
  36.                 if grid[i+1][j] == 0:
  37.                     count+=1
  38.                 if grid[i-1][j-1] == 0:
  39.                     count+=1
  40.                 if grid[i][j-1] == 0:
  41.                     count+=1
  42.                 if grid[i+1][j-1] == 0:
  43.                     count+=1
  44.                 if count == 2:
  45.                     new_grid[i][j] = 0
  46.                 else :
  47.                     new_grid[i][j] = 2
  48.            
  49.             elif grid[i][j] == 0:
  50.                 new_grid[i][j] = 1
  51.             elif grid[i][j] == 1:
  52.                 new_grid[i][j] = 2
  53.     grid[:] = new_grid
  54.     return new_grid
  55. #programme#
  56. N=11
  57. A=init_state(N)
  58. display(A)
  59. for t in range(1,6):
  60.     B= next_grid(A,N)
  61.     print("étape n°",t)
  62.     display(B)
  63.     A=B


 
Mais on m'a parler de limite aux bords mais je sais pas si mon code est bon car pour le lancer j'ai du modifier

Code :
  1. grid = [ [ randrange(3) for _ in range(0,N+1) ] for _ in range(0,N+1) ]

pour pouvoir le lancer. Est ce que la limite aux bords est bon car quand je regarde les résultat, sa me semble bon mais j'en suis pas sur.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  [python]Problème TypeError: 'int'

 

Sujets relatifs
Problème avec des albums photos (simpleviewer) hébergés sur dropboxProblème d'automatisation publipostage vba
Problème fenêtre surnuméraire Tkinter [RESOLU]probleme d execution sous code blocks
Problème de création xml en PHP avec données d'une BDProbléme PHP
problème de variables VBAProblème php
[Résolu] Problème d'affichage de répertoire 
Plus de sujets relatifs à : [python]Problème TypeError: 'int'


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR