列表值被覆盖,即使我正在检查它

List value being overwritten even though I am checking for it

我是 python 的新手,正在编写我的第一个项目。我正在尝试检查 space 是否已被占用,而不是移动到那里。我似乎无法弄清楚为什么我的 move_player 方法会覆盖板的索引值,即使我正在明确检查它(如果轮到 O 并且 X 已经放在索引中 O 正在尝试移动到,它只是覆盖它)。我已经尝试对 'X' 和 'O' 的检查进行硬编码,而不是 player.player,但似乎无法弄清楚。它是否与 Python 的工作方式有关,还是我实施错误?

class Player:
    def __init__(self, player):
        self.player = player


class Board:
    def __init__(self):
        self.board = [[' ' for i in range(3)] for j in range(3)]


    def display_board(self):
        print('---------')
        for row in self.board:
            print('| ', end='')
            for col in row:
                print(f'{col} ', end='')
            print('|')
        print('---------')


    def move_player(self, player):
        try:
            p1 = Player('X')
            p2 = Player('O')
            coordinates = [int(i) for i in input("Enter coordinates for move: ").split()]
            xCoordinate = coordinates[0]
            yCoordinate = coordinates[1]
            if ((self.board[xCoordinate][yCoordinate] == p1.player) or 
                (self.board[xCoordinate][yCoordinate] == p2.player)):
                print("That space is occupied, please choose another one.")
                self.move_player(player)
            else:
                self.board[xCoordinate - 1][yCoordinate - 1] = player.player
        except (ValueError, IndexError):
            print("Please only enter numbers between 1 and 3.")
            self.move_player(player)


    def has_won(self, player):
        if self.check_diagonal(player):
            return True
        elif self.check_across(player):
            return True
        elif self.check_down(player):
            return True
        return False


if __name__ == '__main__':
    board = Board()
    player1 = Player('X')
    player2 = Player('O')
    player = player1

    while True:
        board.display_board()
        board.move_player(player)

        if board.has_won(player):
            board.display_board()
            print(f'{player.player} wins!!!')
            break

        if player == player1:
            player = player2
        else:
            player = player1

代码很复杂,但据我所知:

        if ((self.board[xCoordinate][yCoordinate] == p1.player) or 
            (self.board[xCoordinate][yCoordinate] == p2.player)):

...

            self.board[xCoordinate - 1][yCoordinate - 1] = player.player

您正在检查 [x,y] 但正在分配给 [x-1,y-1]