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

Попробуйте удалить этот 'для я в диапазоне (перевалы): строки = [ ''] * смещ_по_столбцы само .__ 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. Изменение платы на квадрат так, что строки = перевалы.
  2. Удалить параметры по умолчанию для строк и столбцов 6 и 7 соответственно.
  3. жёстко 6 строк и 7 перевалов

Есть много способов, чтобы исправить эту ошибку, не имея строки и COLS синхронизированных по всей программе.

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

Эта линия должна быть зафиксирована на этом.

+0

Будет ли это исправлять проблему с большим количеством строк, напечатанных при запуске? – Meg

+0

Защиту show_board_dynamic (Я): печати() печать ("-------") окры в себя .__ борте: для Вала в седловине: печать ("|", конец = "") print (val, end = ""), print ("|") print ("------") – Meg

+0

Я изменил эту строку, поэтому я не уверен, что делать дальше – Meg

Смежные вопросы