不清除板

doesn't clear the board

我正在制作一款井字游戏,在开始和结束时它会询问您是否“想玩游戏 y/n?”,如果您按“是”,则它运行良好,如果您按否,它会说“再见”并像它假设的那样关闭程序,但是如果你在玩完第一场比赛后立即按“是”,它不会重新打印棋盘,只会给你已经填写过的棋盘。有没有任何人可以帮我解决的方法?

board = [" " for x in range(10)]

#insert letter into the board

def insertLetter(letter, pos):
    board[pos] = letter

# Is that space avalible?

def spaceIsFree(pos):
    return board[pos] == " "

# Prints the board

def printBoard(board):

    #Board set up

    print("   |   |")
    print(" " + board[1] + " | " + board[2] + " | " + board[3])
    print("   |   |")
    print("-----------")
    print("   |   |")
    print(" " + board[4] + " | " + board[5] + " | " + board[6])
    print("   |   |")
    print("-----------")
    print("   |   |")
    print(" " + board[7] + " | " + board[8] + " | " + board[9])
    print("   |   |")

def isWinner(bo, le):

    #Look for winner!

    return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top
    (bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle
    (bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom
    (bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side
    (bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle
    (bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side
    (bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal
    (bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal
 

def playerMove():

    #Grabs player move, cheak for valid input

    run = True

    while run:
        move = input("Please select a position place an \"X\" (1-9): ")
    
        try:
            move = int(move)

            if move > 0 and move < 10:
            
                if spaceIsFree(move):
                    run = False
                    insertLetter("X", move)

                else:
                    print ("Sorry, this space is already taken!")

            else:
                print ("Please type a number within the range!")
        
        except:
               print("Please type a number!")
    

def compMove():

    # Computers move
        
    possibleMoves = [x for x, letter in enumerate(board) if letter == " " and x != 0]
    move = 0

    #check for a possible win

    for let in ["O", "X"]:
    
        for i in possibleMoves:
            boardCopy = board[:]
            boardCopy[i] = let
    
            if isWinner (boardCopy, let):
                move = i
                return move
        
    #check for open corners

    cornersOpen = []

    for i in possibleMoves:
        if i in [1,3,7,9]:
        cornersOpen.append(i)
         
    if len(cornersOpen) > 0:
        move = selectRandom(cornersOpen)
        return move

    #check for center move

    if 5 in possibleMoves:
        move = 5
        return move

    #check for open edges

    edgesOpen = []
    for i in possibleMoves:
        if i in [2,4,6,8]:
            edgesOpen.append(i)
        
    if len(edgesOpen) > 0:
        move = selectRandom(edgesOpen)
    
    return move

def selectRandom(li):

 # Selects random numbers

    import random
    ln = len(li)
    r = random.randrange(0,ln)
    return li[r]

def isBoardFull(board):

    #See if the board is full

    if board.count(" ") > 1:
        return False

    else:
        return True 

def main():
    print("Welcom to Tic Tac Toe!")
    print ()
    printBoard(board)

    while not (isBoardFull(board)):

        # Do a player move,

        # Check if O wins
    
        if not (isWinner(board, "O")):
            playerMove()
            printBoard(board)
            
        else:
            print("Sorry, O's won this time!")
            break

        # Check If X wins
    
        if not (isWinner(board, "X")):
            move = compMove()

            if move == 0:
                print("Tie Game!")

            else:
                insertLetter("O", move)
                print("Computer placed an O in position", move ,":")
                printBoard(board)
        
        else:
            print("X's won this time! Good Job")
            break

        # No one wins - it's a tie
    
    if isBoardFull(board):
        print ("Tie Game!")
    

while True:

    # Start/Play again
        
    replay = input ("Would you like to play a game? y/n: ")

    if replay == "no":
        print ("Goodbye")
        break

    else:
        print()
        main()    

你只在顶部创建一次板,然后永远不会重置它。

重置状态的最简单方法就是不全局保存它。重新配置您的代码,使 board 仅存在于 main 中,并手动将其传递给需要它的每个函数。然后,当 main 退出时,每次 main 运行时都会销毁并重新创建棋盘。

要修补您现有的代码以使其正常工作,我只需要创建一个函数来创建一个新板:

def new_board():
    return [" " for x in range(10)]

然后,在 main 的顶部,重置它:

def main():
    global board
    board = new_board()
    print("Welcom to Tic Tac Toe!")
    print ()
    printBoard(board)

从长远来看,我不推荐这样做,但这是一个快速解决方案。

board 是在全局范围内定义的,因此再次调用 main 不会影响它,您将保留以前的数据。一种选择是明确地重新初始化它:

else:
    board = [" " for x in range(10)]
    print()
    main()