Python 不';I don’我不能离开董事会

Python 不';I don’我不能离开董事会,python,python-3.x,tic-tac-toe,Python,Python 3.x,Tic Tac Toe,我正在做一个“井字游戏”,在开始和结束时,它会问你是否“想玩游戏y/n?”,如果你按“是”,它工作得很好,如果你按“否”,它会说“再见”,并像它设想的那样关闭程序,但是如果你在第一次玩游戏后按“是”,它不会重新打印棋盘,只给你一个你已经填好的。有没有一种方法可以帮助我清理董事会 board = [" " for x in range(10)] #insert letter into the board def insertLetter(letter, pos):

我正在做一个“井字游戏”,在开始和结束时,它会问你是否“想玩游戏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=[“”表示范围内的x(10)]
#在黑板上插入字母
def插入字母(字母,位置):
董事会[职位]=信件
#那个空间可用吗?
def spaceIsFree(位置):
返回板[pos]==“”
#打印电路板
def打印板(板):
#董事会成立
打印(“| |”)
打印(“+板[1]+“|”+板[2]+“|”+板[3])
打印(“| |”)
打印(------------)
打印(“| |”)
打印(“+板[4]+“|”+板[5]+“|”+板[6])
打印(“| |”)
打印(------------)
打印(“| |”)
打印(“+板[7]+“|”+板[8]+“|”+板[9])
打印(“| |”)
def isWinner(bo,le):
#寻找赢家!
返回((bo[7]==le和bo[8]==le和bo[9]==le)或#穿过顶部
(bo[4]==le和bo[5]==le和bo[6]==le)或#穿过中间
(bo[1]==le和bo[2]==le和bo[3]==le)或#穿过底部
(bo[7]==le和bo[4]==le和bo[1]==le)或#在左侧下方
(bo[8]==le和bo[5]==le和bo[2]==le)或#在中间
(bo[9]==le和bo[6]==le和bo[3]==le)或#右侧下方
(bo[7]==le和bo[5]==le和bo[3]==le)或#对角线
(bo[9]==le和bo[5]==le和bo[1]==le))#对角线
def playerMove():
#抓取玩家移动,切克有效输入
运行=真
运行时:
移动=输入(“请选择一个位置放置\“X\”(1-9):)
尝试:
move=int(移动)
如果移动>0且移动<10:
如果spaceIsFree(移动):
运行=错误
插入字母(“X”,移动)
其他:
打印(“对不起,此空间已被占用!”)
其他:
打印(“请键入范围内的数字!”)
除:
打印(“请键入一个数字!”)
def compMove():
#计算机移动
possibleMoves=[x代表x,如果字母==“”和x!=0,则枚举(板)中的字母]
移动=0
#检查是否有可能获胜
对于租入[“O”,“X”]:
对于可能移动中的i:
boardCopy=板[:]
董事会副本[我]=出租
如果是赢家(董事会副本,请填写):
移动=i
回击
#检查是否有明角
cornersOpen=[]
对于可能移动中的i:
如果我在[1,3,7,9]中:
cornersOpen.append(一)
如果len(cornersOpen)>0:
移动=选择随机(角落打开)
回击
#检查中心是否移动
如果可能的移动中有5个:
移动=5
回击
#检查有无开口边缘
EdgeOpen=[]
对于可能移动中的i:
如果我在[2,4,6,8]中:
edgesOpen.append(一)
如果len(EdgeOpen)>0:
移动=选择随机(边打开)
回击
def selectRandom(li):
#选择随机数
随机输入
ln=len(li)
r=随机。随机范围(0,ln)
返回li[r]
def ISBOARD满(板):
#看看黑板上是否满了
如果board.count(“”)大于1:
返回错误
其他:
返回真值
def main():
打印(“欢迎来到Tic Tac Toe!”)
打印()
印刷板
而不是(isBoardFull(board)):
#做一个球员的动作,
#检查O是否获胜
如果不是(isWinner(董事会,“O”)):
playerMove()
印刷板
其他:
打印(“对不起,这次O赢了!”)
打破
#检查X是否获胜
如果不是(isWinner(董事会,“X”)):
move=compMove()
如果move==0:
打印(“平局游戏!”)
其他:
插入字母(“O”,移动)
打印(“计算机将O放置到位”,移动“:”)
印刷板
其他:
打印(“这次X赢了!干得好”)
打破
#没有人赢,这是平局
如果isBoardFull(板):
打印(“平局游戏!”)
尽管如此:
#重新开始/播放
replay=输入(“您想玩游戏吗?是/否:”)
如果replay==“否”:
打印(“再见”)
打破
其他:
打印()
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
中,并手动将其传递给每个需要它的函数。然后,当
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
是在全局范围内定义的,因此调用
ma