2017-01-02 3 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 당신의'__init __에서 자기 .__ board.append (행)'() ', 즉 그것의 마지막 줄. –

답변

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로 제거하십시오. 6 행과 7 COLS 프로그램을 통해 동기화 된 행과 COLS을 가지고 있지의 오류를 수정하는 방법에는 여러 가지가 있습니다

에 대한는

  • 하드 코딩.

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

    이 줄은 고정되어야합니다.

  • +0

    실행했을 때 너무 많은 행이 인쇄되는 문제가 수정됩니까? – Meg

    +0

    데프 show_board_dynamic (자기) : 인쇄() 인쇄 ("-------") 자기 .__ 보드 (COL)에 대한 : 발에 대한 COL에서 : 인쇄 ("|", 끝 = "") print (val, end = ""), print ("|") print ("------") – Meg

    +0

    다음 행을 이렇게 변경 했으므로 다음에해야 할 일이 무엇인지 모르겠 음 – Meg

    관련 문제