簡體   English   中英

通過“ While”循環運行列表后,在“ While”循環外修改列表

[英]Modifying a list outside a 'While' loop after running it through the 'While' loop

我目前正在嘗試從頭開始創建自己的TicTacToe游戲,並且目前遇到與創建的列表相對應的“ while”循環的困難。 我正在使用以下列表:

board = [1,2,3,4,5,6,7,8,9]

在3x3的TicTacToe游戲中標記所有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循環的問題在於,非零整數始終被視為“ 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM