функция, чтобы проверить, совпадают ли dr aws или связи между противниками, не работающими должным образом в ti c ta c toe в python - PullRequest
1 голос
/ 17 апреля 2020

Я пишу программу для основной c "ti c ta c toe" игры, в которой я хочу напечатать "match dr aws", когда переменная "won" возвращается как False в конце игры после выхода из моего за l oop.

Несмотря на то, что все работает нормально, в конце все равно не будет напечатано «match dr aws».

Пожалуйста, также предложите, как сделать его короче или улучшить, или как я мог бы его улучшить. Я только начинаю.

Ниже приведен базовый c код:

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()

1 Ответ

0 голосов
/ 17 апреля 2020

won является функциональным объектом, поэтому вы не можете просто сравнить его с логическим значением и ожидать, что сравнение будет истинным.

Вместо этого вы можете использовать конструкцию for-else, чтобы считать игру ничьей если l oop не break не находит выигравшего игрока.

Измените:

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

на:

else:
    print("match draws")
...