2017-01-02 112 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