Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 03.12.2021
Сообщений: 25

Напишите функцию, которая принимает на вход список списков 3х3 — поле игры в крестики-нолики

17.03.2022, 23:08. Показов 3587. Ответов 3

Студворк — интернет-сервис помощи студентам
Напишите функцию tic_tac_toe(field), которая принимает на вход список списков 3х3 — поле игры в крестики-нолики.

На этом поле отражен игровой момент: незанятой (пустой) клетке соответствует '-', крестикам и ноликам соответственно 'x' и '0'.

Ваша функция должна попытаться определить, есть ли победитель в данном игровом моменте и вывести фразу x win, если победили «крестики» или 0 win, если победили «нолики».

В случае, когда однозначно определить победителя не представляется возможным необходимо вывести слово draw.

Пример


Ввод
data = """0 - 0
x x x
0 0 -"""

field = [line.split() for line in data.split('\n')]
tic_tac_toe(field)

Вывод

x win

Примечания
Игровая ситуация задается корректно, то есть расположений, для которых существует несколько исходов, например, такого:

0 0 0
x x x
- - -

быть не может.

Программа должна соответствовать стандартам PEP8
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.03.2022, 23:08
Ответы с готовыми решениями:

Напишите функцию square ,которая принимает на вход список целых чисел
Напишите функцию square ,которая принимает на вход список целых чисел и возвращает список с возведенными в квадрат элементами. Используйте...

Напишите функцию бинарного поиска bin_search, которая принимает на вход отсортированный список и элемент
Напишите функцию бинарного поиска bin_search, которая принимает на вход отсортированный список и элемент. Функция должна возвращать индекс...

Напишите функцию, которая создает список случайных элементов. На вход функция принимает кол-во элементов, минимальное и
Напишите функцию, которая создает список случайных элементов. На вход функция принимает кол-во элементов, минимальное и максимальное...

3
 Аватар для avdivo
303 / 213 / 112
Регистрация: 03.12.2016
Сообщений: 409
18.03.2022, 01:40
noobmaster2007,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import sys, os
 
 
def tic_tac_toe(field):
    options = ({0, 10, 20}, {1, 11, 21}, {2, 12, 22}, {0, 1, 2},
               {10, 11, 12}, {20, 21, 22}, {0, 11, 22}, {20, 11, 2})
    zero = set(x * 10 + y for x in range(3) for y in range(3) if field[y][x] == '0')
    cross = set(x * 10 + y for x in range(3) for y in range(3) if field[y][x] == 'x')
    res = 'draw'
    for i in options:
        if len(zero) - len(zero - i) == 3:
            res = '0 win'
            return res
        if len(cross) - len(cross - i) == 3:
            res = 'x win'
            return res
    return res
 
 
input_file = os.path.join(sys.path[0], 'tic_tac_toe.txt')  # Файл ввода
matrix = []
with open(input_file, 'r') as f:
    lines = f.readlines()
    for line in lines:
        matrix.append(list(*line.rstrip().split()))  # Читаем первую матрицу
print(tic_tac_toe(matrix))
Вложения
Тип файла: txt tic_tac_toe.txt (13 байт, 9 просмотров)
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
18.03.2022, 02:50
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def tic_tac_toe(field):
    tr_field = list( zip(*field) )
    for symb in ('x', '0'):
        for F in ( field, tr_field ):
            for i in range(3):
                if ''.join( F[i] ) == symb * 3:
                    return print( f'{symb} win' )
        if field[0][0] + field[1][1] + field[2][2] == symb * 3 \
                or field[0][2] + field[1][1] + field[2][0] == symb * 3:
            return print( f'{symb} win' )
    print( 'draw' )
#==============================================================================
data = """- x 0
          - - 0
          - x 0"""
field = [ line.split() for line in data.split('\n') ]
tic_tac_toe( field )
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
19.03.2022, 01:54
Еще вариант:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def tic_tac_toe(field):
    tr_field    = list( zip(*field) )
    tr_tr_field = list( zip(*tr_field) )
    for symb in ('x', '0'):
        if tuple(symb)*3 in tr_field + tr_tr_field \
            + [ (field[0][0], field[1][1], field[2][2] ), ( field[0][2], field[1][1], field[2][0] ) ]:
            return print(f'{symb} win')
    print('draw')
# ==============================================================================
data = """x x x
          x - -
          - 0 -"""
field = [line.split() for line in data.split('\n')]
tic_tac_toe(field)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.03.2022, 01:54
Помогаю со студенческими работами здесь

Крестики-нолики на поле 3х3
Разработайте игру «Крестики-нолики» на поле 3×3 с графическим пользовательским интерфейсом на PyQT. Поле должно быть набором кнопок...

Напишите функцию, которая принимает на вход один аргумент
Задача: Напишите функцию, которая принимает на вход один аргумент `num`. Функция возвращает значение типа boolean, true, если число...

Напишите программу, которая принимает на вход список букв в одной строке
напишите программу, которая принимает на вход список букв в одной строке ( через генератор ). сформируйте список из гласных букв.

Массив 3х3 заполнить 0 и 1, это будет результат игры в крестики нолики
1. Массив 3х3 заполнить 0 и 1, это будет результат игры в крестики нолики. Вввести "да" если игра закончилась победой...

Напишите функцию formatted_grades, которая принимает на вход словарь оценки студентов за предмет
В прошлом модуле мы работали с системой оценки ECTS. Напишите функцию formatted_grades, которая принимает на вход словарь оценки студентов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru