【问题标题】:If-statement issues with Tic Tac Toe井字游戏的 If 语句问题
【发布时间】:2020-06-16 04:59:14
【问题描述】:

我目前正在为井字游戏编写脚本,但遇到了一个问题。虽然我的获胜声明正在发挥作用,立即宣布一名球员是否有一个,但我的平局声明却没有。当填充最后一个会导致平局的空位时,它会像进行普通移动一样行事,并且只有在随后的移动中才会宣布平局。为澄清起见,董事会是一份清单。 我的代码如下。

class TicTacToe:
"""Defines a Tic Tac Toe game"""

def get_current_state(self):
    """Returns the current state of the Tic-Tac-Toe game"""
    return self._current_state

def __init__(self):
    """Initiates a new TicTacToe game with a board and current state"""
    self._board = [["", "", ""], ["", "", ""], ["", "", ""]]
    self._current_state = "UNFINISHED"

def make_move(self, row, column, player):
    """Places the users move on the board"""

    # Checks if any legal moves allowed and if so, places player on board
    if self._board[0][column] != player and self._board[1][column]\
            != player and self._board[2][column] != player or \
            self._board[row][0] != player and self._board[row][1] != player\
            and self._board[row][2] != player or self._board[0][0] != player\
            and self._board[1][1] != player and self._board[2][2] != player\
            or self._board[0][2] != player and self._board[2][0] != player\
            and self._board[1][1] != player and self._current_state == "UNFINISHED":

        self._board[row][column] = player


        # Checks for vertical wins and updates _current_state
        if self._board[0][column] == player and self._board[1][column] == player \
                and self._board[2][column] == player:
            self._current_state = player.upper() + "_WON"
            return True

        # Checks for horizontal wins and updates _current_state
        elif self._board[row][0] == player and self._board[row][1] == player \
                and self._board[row][2] == player:
            self._current_state = player.upper() + "_WON"
            return True

        # Checks for diagonal wins and updates _current_state
        elif self._board[0][0] == player and self._board[1][1] == player\
            and self._board[2][2] == player or self._board[0][2] == player\
                and self._board[2][0] == player and self._board[1][1] == player:
            self._current_state = player.upper() + "_WON"
            return True


        # Checks if the board is full with no wins and declares game a draw
        elif "" not in self._board and self._current_state == "UNFINISHED":
            self._current_state = "DRAW"
            return True

        return True

    else:
        return False

【问题讨论】:

  • self._board[row][col] != "x" and "o" 不起作用,您需要声明 `self._board[row][col] != "x" 和 self_board[row][col] != "o" NB你不止一次在那里。
  • …或self._board[row][col] not in {"x", "o"}
  • 这能回答你的问题吗? How to test multiple variables against a value?
  • @RolfofSaxony,感谢您澄清这一点。我继续在第一个 if 语句中更改了部分,但它仍然运行相同。我想我明白为什么,当它输入第一步时,self._board[row][col] 中没有“x”或“o”,但我不知道如何将其更改为借鉴这一举措,而不是下一个。
  • 如果没有完整的代码,我只能猜测其余部分,而且我现在要退出了。

标签: python list if-statement


【解决方案1】:

我对二维列表(也就是您所说的列表中的列表)也有同样的问题。简单地检查“”是否在您的整个板内是行不通的,因为您的“板”列表中充满了列表。我建议编写代码来检查板上的每个图块是否都被覆盖。

【讨论】:

  • 完美!谢谢。想通了
猜你喜欢
  • 2014-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-13
  • 2021-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多