Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mes listes se comportent bizarrement

Sujet résolu
    24 mai 2019 à 9:28:46

    class Player:
        '''create a player who owns a map and a ship list'''
        def __init__(self):
            self.map=Map()
            self.shipList=[]
            
        def addShip(self, ship):
            self.shipList.append(ship)
            
        def setMap(self):
            for i in self.shipList:
                j=0
                while j<i.length:
                    print(i.length)
                    if i.dir==0:
                        self.map.surface[i.posx+j][i.posy]="X"
                    elif i.dir==1:
                        self.map.surface[i.posx][i.posy+j]="X"
                    else:
                        self.map.surface[i.posx][i.posy]="X"
                    j+=1
    
    
    class Map:
        def __init__(self):
            self.surface=[[0]*25]*25
        
        def displayMap(self):
            for i in self.surface:
                print(i)
            
            
    class Ship:
        '''a ship has a position on x and y axis, and a length (in case number) and a direction 
            (0 =vertical, 1 horizontal, if direction isnt defined or if its something else than 0 or 1, 
            ship will be only 1 case long'''
        def __init__(self, x, y, length=1, direction=-1):
            self.length=length
            self.posx=x
            self.posy=y
            self.dir=direction
        
        
    # Main 
    j1=Player()
    b1=Ship(10, 10, 2, 1)
    b2=Ship(18, 1, 2, 0)
    b3=Ship(20, 20)
    
    j1.addShip(b1)
    j1.addShip(b2)
    j1.addShip(b3)
    
    j1.setMap()
    
    j1.map.displayMap()

    J'ai voulu faire une bataille navale mais j'ai un problème, lors de la mise en place des bateaux sur la map les bateaux apparaissent sur toute la ligne au lieu de prendre que la place dont ils ont besoin (soit une ou deux cases)

    Je pense que le problème vient de la création de la map mais je suis pas sûr et je vois vraiment pas comment résoudre le problème

    Il n'y a pas de message d'erreurs mais la liste retournée ressemble à ça :

    [0x000xx000x0]

    [0x000xx000x0]

    [0x000xx000x0]

    [0x000xx000x0]

    [0x000xx000x0]

    Plutôt que ça :

    [00000000000]

    [0x000xx00000]

    [0x00000000x0]

    [0000000000x0]

    [000000000000]

    Merci d'avance !



    -
    Edité par Salt Factory 24 mai 2019 à 9:34:23

    • Partager sur Facebook
    • Partager sur Twitter
      24 mai 2019 à 9:45:17

      Peut-être ligne 26 à récrire

      self.surface=[[0]*25 for _ in range(25)]

      -
      Edité par PascalOrtiz 24 mai 2019 à 9:45:31

      • Partager sur Facebook
      • Partager sur Twitter
        24 mai 2019 à 9:53:00

        Ca marche beaucoup mieux, merci !

        J'ai quand même une question, que représente le "_" ?

        • Partager sur Facebook
        • Partager sur Twitter
          24 mai 2019 à 10:05:19

          C'est une convention pour dire qu'on ne va pas se référer à un quelconque indice. Tu vois qu'il permet juste l'itération. Tu pourrai écrire :

          [[0]*25 for i in range(25)]


          mais tu vois bien que la lettre i ne sert à rien d'autre que parce que syntaxiquement il y a besoin d'une variable.

          • Partager sur Facebook
          • Partager sur Twitter
            24 mai 2019 à 10:06:33

            D'accord merci beaucoup ! :)
            • Partager sur Facebook
            • Partager sur Twitter

            Mes listes se comportent bizarrement

            × 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