我正在用Python做一个井字游戏

我正在用Python做一个井字游戏,python,python-3.9,Python,Python 3.9,这是我第一次发布问题,如果我遗漏了问题中的任何必要细节,我深表歉意 这是代码,它是用来玩机器的,一切都正常,直到机器轮到它,它覆盖了玩家选择的方块。如果随机函数选择了那个数字,我几乎可以肯定问题可能来自MakeListOfFreeFields(board)函数,但找不到任何东西 我还调用了一些无效点的自由场函数,看看它是否有效。没有 感谢您的帮助,谢谢 # coding=utf-8 from random import randrange def DisplayBoard(board):

这是我第一次发布问题,如果我遗漏了问题中的任何必要细节,我深表歉意

这是代码,它是用来玩机器的,一切都正常,直到机器轮到它,它覆盖了玩家选择的方块。如果随机函数选择了那个数字,我几乎可以肯定问题可能来自MakeListOfFreeFields(board)函数,但找不到任何东西

我还调用了一些无效点的自由场函数,看看它是否有效。没有

感谢您的帮助,谢谢

# coding=utf-8
from random import randrange

def DisplayBoard(board):
    print("+","-"*7,"+","-"*7,"+","-"*7,"+",sep="")
    print("|","|","|","|",sep="       ")
    print("|   ",board[0][0],"   |   ",board[0][1],"   |   ",board[0][2],"   |",sep="")
    print("|","|","|","|",sep="       ")
    print("+","-"*7,"+","-"*7,"+","-"*7,"+",sep="")
    print("|","|","|","|",sep="       ")
    print("|   ",board[1][0],"   |   ",board[1][1],"   |   ",board[1][2],"   |",sep="")
    print("|","|","|","|",sep="       ")
    print("+", "-"*7,"+","-"*7,"+","-"*7,"+",sep="")
    print("|","|","|","|",sep="       ")
    print("|   ",board[2][0],"   |   ",board[2][1],"   |   ",board[2][2],"   |",sep="")
    print("|","|","|","|",sep="       ")
    print("+", "-"*7,"+","-"*7,"+","-"*7,"+",sep="")
    return

def EnterMove(board):
    MakeListOfFreeFields(board)
    while True:
        movPlayer = int(input("Insert the box number you wish to select.\n"))
        if movPlayer < 1 and movPlayer > 9:
            print("Pick another number.\n")
            continue
        elif movPlayer not in board[0] and movPlayer not in board[1] and movPlayer not in board[2]:
            print("Spot taken, pick another one!")
            continue

        for row in range(0,3):
            for column in range(0,3):
                if board[row][column] == movPlayer:
                    board[row][column] = "O"
                    return

def MakeListOfFreeFields(board):
    for row in range(0,3):
        for column in range(0,3):
            if board[row][column] == "X" or board[row][column] == "O":
                continue
            else:
                emptySquares.append(([row],[column]))

def VictoryFor(board, sign):
    if board[0][0] == sign and board[0][1] == sign and board[0][2] == sign:
        return True
    elif board[1][0] == sign and board[1][1] == sign and board[1][2] == sign:
        return True
    elif board[2][0] == sign and board[2][1] == sign and board[2][2] == sign:
        return True
    elif board[0][0] == sign and board[1][0] == sign and board[2][0] == sign:
        return True
    elif board[0][1] == sign and board[1][1] == sign and board[2][1] == sign:
        return True
    elif board[0][2] == sign and board[1][2] == sign and board[2][2] == sign:
        return True
    elif board[0][0] == sign and board[1][1] == sign and board[2][2] == sign:
        return True
    elif board[2][0] == sign and board[1][1] == sign and board[0][2] == sign:
        return True
    else:
        return

def DrawMove(board):
    MakeListOfFreeFields(board)
    while True:
        row = randrange(3)
        column = randrange(3)

        if ([row],[column]) not in emptySquares:
            continue
        else:
            board[row][column] = "X"
            return

board = [[1,2,3],[4,"X",6],[7,8,9]]
emptySquares = []
moves = 1
player = "O"
CPU = "X"

print("Welcome to Tic-Tac-Toe!")

while moves < 9:
    moves += 1
    DisplayBoard(board)
    EnterMove(board)
    DisplayBoard(board)
    DrawMove(board)
    DisplayBoard(board)
    VictoryFor(board, player)

    if VictoryFor(board, player) == True:
        print("Congratulations! You've won!")
        break

    VictoryFor(board, CPU)
    if VictoryFor(board, CPU) == True:
        print("Better luck next time! You've lost. :(")
        break

#End of the program.
#编码=utf-8
从随机输入范围
def显示板(板):
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“|”,板[0][0],“|”,板[0][1],“|”,板[0][2],“|”,sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
印刷品(“|””,板[1][0],“|”,“板[1][1],“|”,“板[1][2],“|”,“九月=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
印刷品(“|””,板[2][0],“|”,“板[2][1],“|”,“板[2][2],“|”,“九月=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
返回
def EnterMove(板):
MakeListOfFreeFields(板)
尽管如此:
movPlayer=int(输入(“插入要选择的框号。\n”))
如果movPlayer<1且movPlayer>9:
打印(“选择另一个号码。\n”)
持续
elif movPlayer不在板[0]中,movPlayer不在板[1]中,movPlayer不在板[2]中:
打印(“现场拍摄,选择另一张!”)
持续
对于范围(0,3)中的行:
对于范围(0,3)内的列:
如果board[行][列]==movPlayer:
线路板[行][列]=“O”
返回
def MakeListOfFreeFields(板):
对于范围(0,3)中的行:
对于范围(0,3)内的列:
如果线路板[行][列]=“X”或线路板[行][列]=“O”:
持续
其他:
emptySquares.append(([行],[列])
def VictoryFor(板、标志):
如果电路板[0][0]==符号和电路板[0][1]==符号和电路板[0][2]==符号:
返回真值
elif板[1][0]==符号和板[1][1]==符号和板[1][2]==符号:
返回真值
elif板[2][0]==符号和板[2][1]==符号和板[2][2]==符号:
返回真值
elif板[0][0]==符号和板[1][0]==符号和板[2][0]==符号:
返回真值
elif板[0][1]==符号和板[1][1]==符号和板[2][1]==符号:
返回真值
elif板[0][2]==符号和板[1][2]==符号和板[2][2]==符号:
返回真值
elif板[0][0]==符号和板[1][1]==符号和板[2][2]==符号:
返回真值
elif板[2][0]==符号和板[1][1]==符号和板[0][2]==符号:
返回真值
其他:
返回
def DrawMove(板):
MakeListOfFreeFields(板)
尽管如此:
行=随机范围(3)
列=随机范围(3)
如果([行],[列])不在空格中:
持续
其他:
线路板[行][列]=“X”
返回
董事会=[[1,2,3],[4,“X”,6],[7,8,9]]
空方块=[]
移动=1
player=“O”
CPU=“X”
打印(“欢迎来到Tic Tac Toe!”)
当移动<9时:
移动+=1
显示板
企业(董事会)
显示板
拖板
显示板
胜利者(棋盘、棋手)
如果VictoryFor(棋盘、玩家)=真:
打印(“祝贺你!你赢了!”)
打破
VictoryFor(板、CPU)
如果VictoryFor(电路板、CPU)=真:
打印(“祝你下次好运!你输了:”)
打破
#节目结束了。

保留代码的一个解决方案是“清除”输出。 例如,使用:“IPython.display.clear_output()”

别忘了用“time.sleep()”来调整时间,以保持可读性

这是您的代码:

# coding=utf-8
import time
from random import randrange
from IPython.display import clear_output


def clear():
    clear_output(wait=True)

def DisplayBoard(board):
    print("+","-"*7,"+","-"*7,"+","-"*7,"+",sep="")
    print("|","|","|","|",sep="       ")
    print("|   ",board[0][0],"   |   ",board[0][1],"   |   ",board[0][2],"   |",sep="")
    print("|","|","|","|",sep="       ")
    print("+","-"*7,"+","-"*7,"+","-"*7,"+",sep="")
    print("|","|","|","|",sep="       ")
    print("|   ",board[1][0],"   |   ",board[1][1],"   |   ",board[1][2],"   |",sep="")
    print("|","|","|","|",sep="       ")
    print("+", "-"*7,"+","-"*7,"+","-"*7,"+",sep="")
    print("|","|","|","|",sep="       ")
    print("|   ",board[2][0],"   |   ",board[2][1],"   |   ",board[2][2],"   |",sep="")
    print("|","|","|","|",sep="       ")
    print("+", "-"*7,"+","-"*7,"+","-"*7,"+",sep="")
    return

def EnterMove(board):
    MakeListOfFreeFields(board)
    while True:
        movPlayer = int(input("Insert the box number you wish to select.\n"))
        if movPlayer < 1 and movPlayer > 9:
            print("Pick another number.\n")
            continue
        elif movPlayer not in board[0] and movPlayer not in board[1] and movPlayer not in board[2]:
            print("Spot taken, pick another one!")
            continue

        for row in range(0,3):
            for column in range(0,3):
                if board[row][column] == movPlayer:
                    board[row][column] = "O"
                    return

def MakeListOfFreeFields(board):
    for row in range(0,3):
        for column in range(0,3):
            if board[row][column] == "X" or board[row][column] == "O":
                continue
            else:
                emptySquares.append(([row],[column]))

def VictoryFor(board, sign):
    if board[0][0] == sign and board[0][1] == sign and board[0][2] == sign:
        return True
    elif board[1][0] == sign and board[1][1] == sign and board[1][2] == sign:
        return True
    elif board[2][0] == sign and board[2][1] == sign and board[2][2] == sign:
        return True
    elif board[0][0] == sign and board[1][0] == sign and board[2][0] == sign:
        return True
    elif board[0][1] == sign and board[1][1] == sign and board[2][1] == sign:
        return True
    elif board[0][2] == sign and board[1][2] == sign and board[2][2] == sign:
        return True
    elif board[0][0] == sign and board[1][1] == sign and board[2][2] == sign:
        return True
    elif board[2][0] == sign and board[1][1] == sign and board[0][2] == sign:
        return True
    else:
        return

def DrawMove(board):
    MakeListOfFreeFields(board)
    while True:
        row = randrange(3)
        column = randrange(3)

        if ([row],[column]) not in emptySquares:
            continue
        else:
            board[row][column] = "X"
            return

board = [[1,2,3],[4,"X",6],[7,8,9]]
emptySquares = []
moves = 1
player = "O"
CPU = "X"

print("Welcome to Tic-Tac-Toe!")

while moves < 9:
    moves += 1
    clear()
    DisplayBoard(board)
    time.sleep(0.3)
    clear()
    EnterMove(board)
    time.sleep(0.3)
    clear()
    DrawMove(board)
    time.sleep(0.3)
    clear()
    DisplayBoard(board)
    time.sleep(0.3)
    clear()
    VictoryFor(board, player)
    time.sleep(.3)

    if VictoryFor(board, player) == True:
        print("Congratulations! You've won!")
        break

    VictoryFor(board, CPU)
    if VictoryFor(board, CPU) == True:
        print("Better luck next time! You've lost. :(")
        break

#End of the program.
#编码=utf-8
导入时间
从随机输入范围
从IPython.display导入清除输出
def clear():
清除输出(等待=真)
def显示板(板):
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“|”,板[0][0],“|”,板[0][1],“|”,板[0][2],“|”,sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
印刷品(“|””,板[1][0],“|”,“板[1][1],“|”,“板[1][2],“|”,“九月=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
印刷品(“|””,板[2][0],“|”,“板[2][1],“|”,“板[2][2],“|”,“九月=”“)
打印(“|”、“|”、“|”、“|”、“|”、sep=”“)
打印(“+”、“-”*7、“+”、“-”*7、“+”、“-”*7、“+”、sep=”“)
返回
def EnterMove(板):
MakeListOfFreeFields(板)
尽管如此:
movPlayer=int(输入(“插入要选择的框号。\n”))
如果movPlayer<1且movPlayer>9:
打印(“选择另一个号码。\n”)
持续
elif movPlayer不在板[0]中,movPlayer不在板[1]中,movPlayer不在板[2]中:
打印(“现场拍摄,选择另一张!”)
持续
对于范围(0,3)中的行:
对于范围(0,3)内的列:
如果board[行][列]==movPlayer:
线路板[行][列]=“O”
返回
def MakeListOfFreeFields(板):
对于范围(0,3)中的行:
对于范围(0,3)内的列:
如果线路板[行][列]=“X”或线路板[行][列]=“O”:
持续
其他:
空方块(([