2016-04-18 36 views
-5

我想制作一个8x8的2D数组,用于python中的跳棋游戏。我会如何去做这件事? 这里是我当前的代码:在python中制作跳棋板

class Board():  
    board = [[]] 

    def __init__(self,width,height): 
     self.width = width 
     self.height = height 

    def __repr__(self): 
     print(self.board) 

    def setup(self): 
     for y in range(self.height): 
      for x in range(self.width): 
       self.board[y].append(0) 

board = Board(8,8) 
board.setup() 
print(board.board) 
+1

注:'__repr__'不应打印任何东西,但返回表示对象的字符串。 –

+0

不确定你的需求是什么,但是在numpy中制作8x8阵列的布尔值可能更容易。 – snd

+1

更不用说,如果你创建了多个电路板,它们将共享相同的数据,因为'self.board'是一个类属性。 –

回答

0

点在哪里你的代码做

self.board[y].append(0) 

self.board只有一个元素,所以对于这个y>0将会失败。您需要使self.board不包含一个空列表,但self.height空列表为此工作。

我不会进入更多的细节,因为正如一位评论者所说,这听起来很像作业,在这种情况下,最好不要填写所有细节。

3
board = [[0]*8 for i in range(8)] # This makes you 8x8 list 
>>>[[0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0]] 

def setup(self): 
    board = [[0]*self.height for i in range(self.width)] 

与实例属性(self.heigth,self.width)

0

嵌套列表有时是难以奏效你只改变8分的。如果你不是绝对需要一个2D列表,我推荐使用一个字典。使用字典创建2D数组很容易。您可以使用(行,列)的元组作为索引。

例如:

board = {} 
for row in range(8): 
    for column in range(8): 
     board[(row, column)] = 0