Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau qui ne se rempli pas correctement

Sujet résolu
    29 mai 2011 à 12:35:55

    Hello,

    Je viens solliciter votre aide pour quelque chose de tout bete a mon avis... J'ai un tableau matrice que j'init avec des 0, mais le probleme c'est que pour une condition je voudrais mettre une valeur a -1, mais ca me rempli la totalite de ma variable par des -1... voici le code :
    D'avance merci.
    class Test:
        def __init__(self, delim):
            self.delim = delim
            self.end = [-1, -1]
            self.pos = [-1, -1]
    
        def isDelim(self, string):
           for i in range(len(string)):
               for idx in range(len(self.delim)):
                   if string[i] == self.delim[idx]:
                       return 1
           return 0
    
        def loadFile(self, path):
            file = open(path, "r")
            buf = file.readlines();
            self.size = [len(buf), len(buf[0]) - 1]
            self.grid = (self.size[0])*[ (self.size[1])*[0]]
            for i in range(self.size[0]):
                for idx in range(self.size[0]):
                    if self.isDelim(buf[i][idx]):
                        print "Delimiteur '"+buf[i][idx]+"' @", i, idx
                        self.grid[i][idx] = -1
                    else:
                        print "Case libre '"+buf[i][idx]+"'", i, idx
                    if buf[i][idx] == 'S':
                        self.end = [i, idx]
                    elif buf[i][idx] == 'R':
                        self.pos = [i, idx]
            file.close
            print self.grid
            print "grid[8][8] = ", self.grid[8][8] 
            return self
    
    def main():
        lab = Test("+-|")
        lab.loadFile("lab.txt")
    
    if __name__ == "__main__":
        main()
    
    Reponse de python (sous win7):
    [...]
    Delimiteur '-' @ 7 4
    Delimiteur '+' @ 7 5
    Delimiteur '-' @ 7 6
    Delimiteur '-' @ 7 7
    Case libre ' ' 7 8
    Delimiteur '|' @ 7 9
    Delimiteur '|' @ 8 0
    Case libre ' ' 8 1
    Delimiteur '|' @ 8 2
    Case libre ' ' 8 3
    Case libre ' ' 8 4
    Case libre ' ' 8 5
    Case libre ' ' 8 6
    Case libre ' ' 8 7
    Case libre ' ' 8 8
    Delimiteur '|' @ 8 9
    Delimiteur '+' @ 9 0
    Delimiteur '-' @ 9 1
    Delimiteur '-' @ 9 2
    Delimiteur '-' @ 9 3
    Delimiteur '-' @ 9 4
    Delimiteur '-' @ 9 5
    Delimiteur '-' @ 9 6
    Delimiteur '-' @ 9 7
    Delimiteur '-' @ 9 8
    Delimiteur '+' @ 9 9
    [
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
     [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
    ]
    grid[8][8] =  -1
    • Partager sur Facebook
    • Partager sur Twitter
      29 mai 2011 à 14:06:16

      remplaces la ligne 18 par :
      self.grid = [self.size[1]*[0] for _ in range(self.size[0])]
      
      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

        29 mai 2011 à 14:57:24

        oui, ca marche nickel, mais pourquoi?

        merci.
        • Partager sur Facebook
        • Partager sur Twitter
          29 mai 2011 à 15:29:52

          Dans le premier cas tu créés une liste qui contient n référence vers la même liste :
          >>> for sous_liste in [ [] ]*3: print id(sous_liste)
          3075969676
          3075969676
          3075969676
          


          Dans le second il y a bien n sous-listes différentes :
          >>> for sous_liste in [ [] for _ in range(3)]: print id(sous_liste)
          139241164
          139241132
          139241196
          
          • Partager sur Facebook
          • Partager sur Twitter

          Tableau qui ne se rempli pas correctement

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown