Python 在'之外修改列表;而';在通过';而';环

Python 在'之外修改列表;而';在通过';而';环,python,list,Python,List,我目前正试图从头开始创建我自己的Tictatcoe游戏,我目前很难使用与我创建的列表相对应的“while”循环。 我正在使用以下列表: board = [1,2,3,4,5,6,7,8,9] 在Tictatcoe的3x3游戏中标记所有9个插槽。 但是,当一号玩家移动时(例如在插槽“1”中),列表应更改为显示 board = [X,2,3,4,5,6,7,8,9] 这应该一直持续到列表中的所有9个索引(我认为是合适的术语)都应该被“X”或“O”占据,这将在游戏中等于平局 现在我只是在进行实验,

我目前正试图从头开始创建我自己的Tictatcoe游戏,我目前很难使用与我创建的列表相对应的“while”循环。 我正在使用以下列表:

board = [1,2,3,4,5,6,7,8,9]
在Tictatcoe的3x3游戏中标记所有9个插槽。 但是,当一号玩家移动时(例如在插槽“1”中),列表应更改为显示

board = [X,2,3,4,5,6,7,8,9]
这应该一直持续到列表中的所有9个索引(我认为是合适的术语)都应该被“X”或“O”占据,这将在游戏中等于平局

现在我只是在进行实验,所以请原谅其余的代码,但我使用的完整代码是:

board = [1,2,3,4,5,6,7,8,9]
def CreateBoard(board):
    print('   |   |')
    print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
    print('   |   |')
    print('-----------')
    print('   |   |')
    print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
    print('   |   |')
    print('-----------')
    print('   |   |')
    print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
    print('   |   |')

PlayerOne = 'X'
Turn = 'player one'
GameRunning = True



while [0] == 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 in board == True:
    if Turn == 'player one':
       letter = 'X'
       Move = input("Please pick where to go next: ")
       Move = int(Move)
       if Move in board:
          board.insert(Move, letter)
          board.remove(Move)
          print(board)
          Turn = 'player two'




       else:
          print("This move is invalid")

  if Turn == 'player two':
     letter = 'O'
     Move = input("Pick where to go next: ")
     Move = int(Move)
     if Move in board:
        board.insert(Move, letter)
        board.remove(Move)
        print(board)
        Turn = 'player one'


     else:
         print("This move is invalid")
我得到的输出是:

我猜while循环正在运行循环之外的列表,但我正在尝试找到一种方法来改变它!
我还没有弄明白为什么它会打印“那个举动是无效的”

while循环的问题是非零整数总是被认为是“真的”。所以

while [0] == 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 in board == True:
实际上是指“当包含0的列表等于整数1(始终为false)、2(true)、3(true)…或9 in(线路板)(如果9仍在线路板上,则为true)时,输入块。”

我相信你的意思是:

while any((cell in range(1,10) for cell in board)):
这意味着当电路板中的任何单元在1(包括)到10(不包括)的范围内时,请输入块

请看下面的代码:

player = [
    {"name": "Player One", "letter": "X"},
    {"name": "Player Two", "letter": "O"},
]


def print_board(board):
    def print_vbars():
        print("   |   |")
    def print_hbars():
        print("-----------")

    print_vbars()
    for row in range(3):
        print(" {} | {} | {}".format(*(board[row*3 : row*3+3])))
        print_vbars()
        print_hbars()
        print_vbars()
    print_vbars()


def final_state(board):
    winning_combinations = (
        (0,1,2), # Horizontal top row
        (3,4,5), # Horizontal middle row
        (6,7,8), # Horizontal bottom row
        (0,3,6), # Vertical left row
        (1,4,2), # Vertical middle row
        (2,5,7), # Vertical right row
        (0,4,8), # Downward diagonal
        (2,4,6), # Upward diagonal
    )
    for letter in ("X", "O"):
        for combination in winning_combinations:
            row_state = (board[index] for index in combination)
            if all(map(lambda cell: letter == cell, row_state)):
                return "{} wins".format(letter)

    if all(map(lambda cell: cell in ("X", "O"), board)):
        return "Game is a draw."

    return False


def play_game():
    board = list(range(9))
    starting_player = 0
    turn = 0
    active_player = starting_player
    while final_state(board) is False:
        turn += 1
        print("Turn {}:".format(turn))
        print_board(board)
        name, letter = player[active_player]["name"], player[active_player]["letter"]
        move = None
        while move is None:
            try:
                move = input("{} please make your move: ".format(name))
                move = int(move)
                if move in board:
                    board[move] = letter
                    print("{} played {} on {}.".format(name, letter, move))
                    active_player = 1 - active_player
                else:
                    print("Move {} is invalid.".format(move))
                    move = None
            except Exception as e:
                    print("Move {} is invalid.".format(move))
                    move = None
    print_board(board)
    print(final_state(board))


if __name__ == "__main__":
    play_game()

while循环的问题是非零整数总是被认为是“true”。所以

while [0] == 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 or 9 in board == True:
实际上是指“当包含0的列表等于整数1(始终为false)、2(true)、3(true)…或9 in(线路板)(如果9仍在线路板上,则为true)时,输入块。”

我相信你的意思是:

while any((cell in range(1,10) for cell in board)):
这意味着当电路板中的任何单元在1(包括)到10(不包括)的范围内时,请输入块

请看下面的代码:

player = [
    {"name": "Player One", "letter": "X"},
    {"name": "Player Two", "letter": "O"},
]


def print_board(board):
    def print_vbars():
        print("   |   |")
    def print_hbars():
        print("-----------")

    print_vbars()
    for row in range(3):
        print(" {} | {} | {}".format(*(board[row*3 : row*3+3])))
        print_vbars()
        print_hbars()
        print_vbars()
    print_vbars()


def final_state(board):
    winning_combinations = (
        (0,1,2), # Horizontal top row
        (3,4,5), # Horizontal middle row
        (6,7,8), # Horizontal bottom row
        (0,3,6), # Vertical left row
        (1,4,2), # Vertical middle row
        (2,5,7), # Vertical right row
        (0,4,8), # Downward diagonal
        (2,4,6), # Upward diagonal
    )
    for letter in ("X", "O"):
        for combination in winning_combinations:
            row_state = (board[index] for index in combination)
            if all(map(lambda cell: letter == cell, row_state)):
                return "{} wins".format(letter)

    if all(map(lambda cell: cell in ("X", "O"), board)):
        return "Game is a draw."

    return False


def play_game():
    board = list(range(9))
    starting_player = 0
    turn = 0
    active_player = starting_player
    while final_state(board) is False:
        turn += 1
        print("Turn {}:".format(turn))
        print_board(board)
        name, letter = player[active_player]["name"], player[active_player]["letter"]
        move = None
        while move is None:
            try:
                move = input("{} please make your move: ".format(name))
                move = int(move)
                if move in board:
                    board[move] = letter
                    print("{} played {} on {}.".format(name, letter, move))
                    active_player = 1 - active_player
                else:
                    print("Move {} is invalid.".format(move))
                    move = None
            except Exception as e:
                    print("Move {} is invalid.".format(move))
                    move = None
    print_board(board)
    print(final_state(board))


if __name__ == "__main__":
    play_game()

你想用这个循环做什么陈述?你的while条件将永远是真的。你的情况糟透了。正因为如此,你的“如果”检查命中了“else”块。语句?我不太清楚你的意思,但我正在尝试将代码开头的列表更改为任何值,在它运行“While”循环后,最终替换列表中的所有内容。我看到了“While”循环中if语句的错误所在,我刚刚修复了不太熟悉python的问题,但是,如果您将其设置为字符串而不是数组,并使用正则表达式,这不会简化您的测试吗?您仍然可以编辑索引字符,并将其视为数组,对吗?您试图使用此循环生成什么语句?您的while条件将始终为true。你的情况糟透了。正因为如此,你的“如果”检查命中了“else”块。语句?我不太清楚你的意思,但我正在尝试将代码开头的列表更改为任何值,在它运行“While”循环后,最终替换列表中的所有内容。我看到了“While”循环中if语句的错误所在,我刚刚修复了不太熟悉python的问题,但是,如果您将其设置为字符串而不是数组,并使用正则表达式,这不会简化您的测试吗?您仍然可以编辑索引字符并将其视为数组,对吗?本质上,我想我可以将其称为家庭作业,而您的代码可以解决问题,我之所以通过我熟悉的东西进行实验来编写代码,是为了将我已经知道的东西复合起来,以确保我完全理解它,而且您代码中的许多功能不符合我自己编写代码的原因,但除此之外,您的代码将解决许多问题。我更新了我的答案,以更直接地解决这些问题你的问题。本质上我想我可以称之为家庭作业,虽然你的代码可以解决这个问题,我之所以通过我熟悉的东西进行实验来编写代码,是为了将我已经知道的东西复合起来,以确保我完全理解它,而且您代码中的许多功能不符合我自己编写代码的原因,但除此之外,您的代码将解决许多问题。我更新了我的答案,以更直接地解决这些问题你的问题。