Как мне сравнить объект в python с целым числом

#python

#python

Вопрос:

Это все, что я написал. Я знаю, что Increment.count равен 9, поскольку я ввел операторы печати и все проверил, но когда я устанавливаю Increment.count равным 9, по какой-то причине игра не заканчивается. Способ закончить игру — посмотреть, заполнено ли все места на доске, и никто еще не выиграл.

 import random

board_layout = [
    ' ', ' ', ' ',
    ' ', ' ', ' ',
    ' ', ' ', ' '
]


class Increment:
    count = 0

    def __init__(self):
        Increment.count  = 1


def board():
    print(board_layout[0]   '|'   board_layout[1]   '|'   board_layout[2])
    print('-'   ' '   '-'   ' '   '-')
    print(board_layout[3]   '|'   board_layout[4]   '|'   board_layout[5])
    print('-'   ' '   '-'   ' '   '-')
    print(board_layout[6]   '|'   board_layout[7]   '|'   board_layout[8])


def human_turn():
    position = ' '
    position = input('Enter a position from 1-9n')
    position = int(position) - 1
    board_layout[position] = 'O'
    Increment.count  = 1
    board()


def computer_turn():
    while True:
        try:
            position = random.randint(1, 9)
            if is_board_empty(position):
                board_layout[position] = 'X'
                board()
                Increment.count  = 1
                break
        except:
            pass


def is_board_empty(position):
    return board_layout[position] == ' '


def is_winner():
    if board_layout[0] != ' ' and board_layout[1] != ' ' and board_layout[2] != ' ' and 
            board_layout[0] == board_layout[1] == board_layout[2]:
        board()
        print(board_layout[0]   ' won!')
        return board_layout[0]
    elif board_layout[3] != ' ' and board_layout[4] != ' ' and board_layout[5] != ' ' and 
            board_layout[3] == board_layout[4] == board_layout[5]:
        board()
        print(board_layout[3]   ' won!')
        return board_layout[3]
    elif board_layout[6] != ' ' and board_layout[7] != ' ' and board_layout[8] != ' ' and 
            board_layout[6] == board_layout[7] == board_layout[8]:
        board()
        print(board_layout[6]   ' won!')
        return board_layout[6]
    elif board_layout[0] != ' ' and board_layout[3] != ' ' and board_layout[6] != ' ' and 
            board_layout[0] == board_layout[3] == board_layout[6]:
        board()
        print(board_layout[0]   ' won!')
        return board_layout[0]
    elif board_layout[1] != ' ' and board_layout[4] != ' ' and board_layout[7] != ' ' and 
            board_layout[1] == board_layout[4] == board_layout[7]:
        board()
        print(board_layout[1]   ' won!')
        return board_layout[1]
    elif board_layout[2] != ' ' and board_layout[5] != ' ' and board_layout[8] != ' ' and 
            board_layout[2] == board_layout[5] == board_layout[8]:
        board()
        print(board_layout[2]   ' won!')
        return board_layout[2]
    elif board_layout[0] != ' ' and board_layout[4] != ' ' and board_layout[8] != ' ' and 
            board_layout[0] == board_layout[4] == board_layout[8]:
        board()
        print(board_layout[0]   ' won!')
        return board_layout[0]
    elif board_layout[2] != ' ' and board_layout[4] != ' ' and board_layout[6] != ' ' and 
            board_layout[2] == board_layout[4] == board_layout[6]:
        board()
        print(board_layout[2]   ' won!')
        return board_layout[2]
    elif Increment.count == 9:
        print('draw')


while is_winner() is None and Increment.count != 9:
    human_turn()
    print('n')
    computer_turn()
    print('n')


if Increment.count == 9 and is_winner is None:
    print('draw')
 

Комментарии:

1. Привет, @James, не могли бы вы предоставить сценарий с входными данными, которые приводят к вашей проблеме… Спасибо!

2. На доске девять квадратов, поэтому и первый, и последний ход будут человеческими. Вы проверяете цикл while только после поворота компьютера. Increment.count будет четным числом только после поворота компьютера.

Ответ №1:

Похоже, что пока компьютер делает свой последний ход, плата заполнена, и компьютер переходит в бесконечный цикл, поэтому нам придется изменить компьютерный код, чтобы исправить это.

замените это

 def computer_turn():
    while True:
        try:
            position = random.randint(1, 9)
            if is_board_empty(position):
                board_layout[position] = 'X'
                board()
                Increment.count  = 1
                break
        except:
            pass
 

с

 def computer_turn():
    while True:
        try:
            if Increment.count == 9:  # If the board is already full
                break
            position = random.randint(1, 9)
            if is_board_empty(position):
                board_layout[position] = 'X'
                board()
                Increment.count  = 1
                break
        except:
            pass