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


print("*" * 10, " Игра Крестики-нолики 5 на 5 для двух игроков ", "*" * 10)

board = list(range(1, 26))


def draw_board(board):
    print("-" * 26)
    for i in range(5):
        print("|", end="")
        for j in range(5):
            print(f" {board[j + i * 5]:>2} |", end="")
        print("\n" + "-" * 26)


def take_input(player_token):
    valid = False
    while not valid:
        player_answer = input(f"Куда поставим {player_token}? ")
        try:
            player_answer = int(player_answer)
        except:
            print("Некорректный ввод. Вы уверены, что ввели число?")
            continue

        if 1 <= player_answer <= 25:
            if str(board[player_answer - 1]) not in "XO":
                board[player_answer - 1] = player_token
                valid = True
            else:
                print("Эта клетка уже занята!")
        else:
            print("Некорректный ввод. Введите число от 1 до 25.")


def check_win(board):
    win_coord = []

    for i in range(5):
        win_coord.append(tuple(range(i * 5, i * 5 + 5)))

    for i in range(5):
        win_coord.append(tuple(range(i, 25, 5)))

    win_coord.append((0, 6, 12, 18, 24))
    win_coord.append((4, 8, 12, 16, 20))

    for each in win_coord:
        if board[each[0]] == board[each[1]] == board[each[2]] == board[each[3]] == board[each[4]]:
            return board[each[0]]
    return False


def main(board):
    counter = 0
    win = False
    while not win:
        draw_board(board)
        if counter % 2 == 0:
            take_input("X")
        else:
            take_input("O")
        counter += 1

        if counter >= 9:
            tmp = check_win(board)
            if tmp:
                print(tmp, "выиграл!")
                win = True
                break

        if counter == 25:
            print("Ничья!")
            break
    draw_board(board)


main(board)
input("Нажмите Enter для выхода!")