2017-01-02 75 views
0

发生此错误。我不知道它是什么。我是一名初学者程序员。列表索引超出范围ConnectFour

ConnectFourBoard.py", line 58, in show_board_dynamic print(self.__board[i][j], end = ""), IndexError: list index out of range

我的代码:

class ConnectFourBoard: 
    def __init__(self, cols = 7, rows = 6, requiredToWin = 4): 
     global __board 
     self.__space = '' 
     self.__board = [] 
     self.cols = cols 
     self.rows = rows 
     self.Win = requiredToWin 
     self.__board = [[''] * rows for i in range(cols)] 

     for i in range(cols): 
      row = ['']*cols 
      self.__board.append(row) 

    def MakeMove(self, row, col, element): 
     global __board 
     self.__board[row][col] = element 

    def CheckForWin(self): 
     return winner 

    def CheckHz(): 
     for x in range (6): 
      for y in range (7): 
       row += board[x][y] 
       print("%s" %row) 
       row = "" 
       if "XXXX" in row: 
        print("Winner is X") 
        break; 

    def CheckVt(): 
     for y in range(7): 
      for x in range(6): 
       column += board[y][x] 
       print("%s" %column) 
       column = "" 
       if "XXXX" in column: 
        print ("Winner is X") 
        break; 




    def FullBoard(self): 
     return True 

    def FreeSpace(self, row, col): 
     return True 

    def show_board_dynamic(self): 
     print() 
     print("-------") 
     for i in range(len(self.__board)): 
      for j in range(len(self.__board)): 
       print("|", end = "") 
       print(self.__board[i][j], end = ""), 
      print("|") 
      print("-------") 
     print() 
+0

退房http://pythontutor.com –

+0

尝试删除该'因为我在范围内(的cols): 行= [ ''] *的cols 自.__ board.append(行)'从'__init __() ',即它的最后一行。 –

回答

0

您有行和列不同的电话号码,但你迭代超过len(self.__board)对他们俩的。

变化:

for i in range(len(self.__board)): 
     for j in range(len(self.__board)): 
      print("|", end = "") 
      print(self.__board[i][j], end = ""), 
     print("|") 
     print("-------") 

到:

for col in self.__board: 
     for val in col: 
      print("|", end = "") 
      print(val, end = ""), 
     print("|") 
     print("-------") 
+0

它的作品谢谢你!但当我只需要6时,我结束了太多的行,你知道为什么吗? – Meg

0

您应该

  1. 更改板为正方形,以便行= COLS。
  2. 分别删除行和列的默认参数6和7。
  3. 硬编码为6行和7个COLS

有许多方法来解决不具有在整个节目同步的行和cols的此错误。

 for i in range(len(self.__board)): 
      for j in range(len(self.__board[0])): 

此行应该固定为此。

+0

这会解决打印行数太多的问题吗? – Meg

+0

DEF show_board_dynamic(个体): 打印() 打印( “-------”) 为山口在自.__板: 用于VAL在西: 打印( “|”,结束= “”) (“|”) print(“------”) – Meg

+0

我已将此行更改为此,因此我不确定接下来要做什么 – Meg