Загрузка данных


import random

def drawBoard(board):
    # Рисует игровое поле
    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(board, letter):
    # Проверяет, выиграл ли игрок с указанной буквой
    win_combinations = [
        [1,2,3], [4,5,6], [7,8,9],  # горизонтали
        [1,4,7], [2,5,8], [3,6,9],  # вертикали
        [1,5,9], [3,5,7]            # диагонали
    ]
    for combo in win_combinations:
        if all(board[i] == letter for i in combo):
            return True
    return False

def isBoardFull(board):
    # Проверяет, заполнена ли доска
    return all(board[i] != ' ' for i in range(1, 10))

def free(board, movesList):
    # Возвращает список свободных ячеек из переданного списка
    possibleMoves = []
    for i in movesList:
        if board[i] == ' ':
            possibleMoves.append(i)
    return possibleMoves

def randomMove(board, movesList):
    # Случайный ход из списка возможных
    possibleMoves = free(board, movesList)
    if len(possibleMoves) != 0:
        return random.choice(possibleMoves)
    else:
        return None

def getComputerMove(board):
    # Умный ход компьютера
    possibleMoves = free(board, [1,2,3,4,5,6,7,8,9])
    
    # Проверка: может ли компьютер выиграть
    for i in possibleMoves:
        board[i] = computerLetter
        if isWinner(board, computerLetter):
            board[i] = ' '
            return i
        board[i] = ' '
    
    # Проверка: может ли игрок выиграть? Если да, блокируем
    for i in possibleMoves:
        board[i] = playerLetter
        if isWinner(board, playerLetter):
            board[i] = ' '
            return i
        board[i] = ' '
    
    # Попытка занять углы
    move = randomMove(board, [1,3,7,9])
    if move != None:
        return move
    
    # Если углы заняты, центр
    if board[5] == ' ':
        return 5
    
    # Иначе любой из боковых
    return randomMove(board, [2,4,6,8])