功能来检查对手之间的平局或平局是否在 python 中的井字游戏中不能正常工作

function to check if match draws or ties between the opponents not working properly in tic tac toe in python

我正在为一个基本的 "tic tac toe" 游戏编写一个程序,当变量 "won" 在退出游戏结束时返回为 False 时,我想在其中打印 "match draws"我的循环。

虽然一切正常,但最后还是不会打印"match draws"。

还请建议如何缩短或改进它,或者我可以如何改进它。我才刚刚开始。

下面是基本代码:

import numpy
import random
board=numpy.array=["-","-","-"],["-","-","-"],["-","-","-"]
p1s="x"
p2s="o"

def place(symbol):
    print (numpy.matrix(board))
    while(1):
        row=int(input("enter row"))
        col=int(input("enter column"))
        if (row>0 and row <4 and col>0 and col<4 and board[row-1][col-1]=="-"):
            break
        else:
            print("please enter valid input")
    board[row-1][col-1]=symbol
def won(symbol):
    return check_rows(symbol) or check_columns(symbol) or check_diagonals(symbol)
def check_rows(symbol):
    for r in range(3):
        count=0
        for c in range(3):
            if board[r][c]==symbol:
                count+=1
        if (count==3):
            print(numpy.matrix(board))
            print(symbol,"won")
            return True
    return False
def check_columns(symbol):
    for c in range(3):
        count=0
        for r in range(3):
            if board[r][c]==symbol:
                count+=1
        if (count==3):
            print(numpy.matrix(board))
            print(symbol,"won")
            return True
    return False
def check_diagonals(symbol):
    if (board[0][0] == board[1][1] and board[1][1]==board[2][2] and board[1][1]==symbol):
        print(numpy.matrix(board))
        print(symbol,"won")
        return True
    if (board[0][2] == board[1][1] and board[1][1]==board[2][0] and board[1][1]==symbol):
        print(numpy.matrix(board))
        print(symbol,"won")
        return True
    return False


def play():
    turn=start+1
    count=1
    for count in range(8):
        if turn%2==0:
                print("count is",count)
                count+=1
                turn+=1
                print("X turn")
                place(p1s)
                if won(p1s):
                    break
        else:
            print("count is",count)
            count+=1
            turn+=1
            print("O turn")
            place(p2s)
            if won(p2s):
                break
    if (won==False):
        print("match draws")



start=random.randint(1,100)
print(start)
if (start%2==0):
    print("X turn")
    place(p1s)
    play()
else:
    print("O turn")
    place(p2s)
    play()

won 是一个函数对象,因此您不能简单地将它与布尔值进行比较并期望比较结果为真。

如果循环没有 break 找到玩家获胜,您可以改为使用 for-else 构造将游戏视为平局。

变化:

if (won==False):
    print("match draws")

至:

else:
    print("match draws")