Python: 类 和 for 循环错误

Python: classes and for loop error

我是一名初级程序员。我正在尝试在 Python 中制作一个面向对象的国际象棋游戏。这是我的第一步,布置棋盘。我写了:

  #this is board whick is necessery to run a class
board_for_start=[]
for x in range(8):
   for y in range(8):
      board_for_start.append('.')

class game:

#this is a setting board in class
    def __init__(self,board):
        self.board=board

# displaying board
    def display_board(self):
        for i in range (8):
            for j in range (8):
                print (self.board[i][j])
game_board=game(board_for_start)
game_board.display_board()

Traceback (most recent call last): File "C:/Users/Goldsmitd/PycharmProjects/CHESS/chees_ver0.02.py", line 22, in game_board.display_board() File "C:/Users/Goldsmitd/PycharmProjects/CHESS/chees_ver0.02.py", line 18, in display_board print (self.board[i][j]) IndexError: string index out of range

为什么会出现此错误?

目前 board_for_start 是一维列表而不是二维列表,并且 print self.board 正在尝试使用两个索引 i、j 访问它。

尝试使用列表理解来初始化游戏板。像这样

board_for_start = [['.' for x in range(8)] for x in range(8)]

此处您正在初始化一个一维列表,但您真正要寻找的是列表列表,这里是无错误代码,请参阅下面提到的 link 以初始化列表列表。另外,如果这看起来很长,你可以学习列表理解。

How to initialize a two-dimensional array in Python?

List comprehension

class Chess:
    def __init__ (self):
        self.board = self.create_board ()

    def create_board (self):
        board_x = []
        for x in range (8):
            board_y = []
            for y in range (8):
                board_y.append ('.')
            board_x.append (board_y)

        return board_x

    def display_board (self):
        for i in range (8):
            for j in range (8):
                print (self.board[i][j], end="")
            print()

game = Chess()
game.display_board()

我对您的代码做了一些小的调整,应该可以帮助您入门。我将你的 class 重命名为稍微不那么通用的东西,尽管我认为你最终会随着游戏的发展而放弃这个 class,因为你会意识到你需要几个离散的对象,而不是一个叫做 "Game" 或 "ChessGame".

为方便起见,所有电路板初始化都发生在 __init__ 中,而不是在 class 之外。 display_board 函数已被重写以防止如我的评论中所述的差一错误。

class ChessGame:
    def __init__(self):
        self.board = [list('........') for i in range(8)]

    def display_board(self):
        for row in self.board:
            for square in row:
                print(square, end="")
            print()

示例输出:

In [4]: game = ChessGame()

In [5]: game.board
Out[5]: 
[['.', '.', '.', '.', '.', '.', '.', '.'],
 ['.', '.', '.', '.', '.', '.', '.', '.'],
 ['.', '.', '.', '.', '.', '.', '.', '.'],
 ['.', '.', '.', '.', '.', '.', '.', '.'],
 ['.', '.', '.', '.', '.', '.', '.', '.'],
 ['.', '.', '.', '.', '.', '.', '.', '.'],
 ['.', '.', '.', '.', '.', '.', '.', '.'],
 ['.', '.', '.', '.', '.', '.', '.', '.']]

In [6]: game.display_board()
........
........
........
........
........
........
........
........