Вот решение задачи на языке Python:
def is_winner(P, player):
"""
Проверяет, есть ли в поле P выигрышная ситуация для игрока player.
Args:
P: Игровое поле в виде двумерного списка.
player: Играющий игрок, 'x' или 'o'.
Returns:
'ДА', если игрок победил, и 'НЕТ' - в противном случае.
"""
for i in range(len(P)):
if P[0] == P[1] == P[2] == player:
return 'ДА'
if P[0] == P[1] == P[2] == player:
return 'ДА'
if P[0][0] == P[1][1] == P[2][2] == player:
return 'ДА'
if P[0][2] == P[1][1] == P[2][0] == player:
return 'ДА'
return 'НЕТ'
P = [['x', 'x', 'o'], ['o', 'x', 'x'], ['#', 'x', '#']]
print(is_winner(P, 'x')) Пример вывода:
ДА Чтобы проверить, есть ли выигрышная ситуация для ноликов, необходимо изменить параметр player на 'o'.
Вот ещё один способ решения этой задачи: def is_winner(P, player):
"""
Проверяет, есть ли в поле P выигрышная ситуация для игрока player.
Args:
P: Игровое поле в виде двумерного списка.
player: Играющий игрок, 'x' или 'o'.
Returns:
'ДА', если игрок победил, и 'НЕТ' - в противном случае.
"""
for i in range(3):
if all(P[j] == player for j in range(3)):
return 'ДА'
for i in range(3):
if all(P[j] == player for j in range(3)):
return 'ДА'
if all(P == player for i in range(3)):
return 'ДА'
if all(P[2 - i] == player for i in range(3)):
return 'ДА'
return 'НЕТ' Этот вариант более эффективен, так как он проверяет не только горизонтальные, вертикальные и диагональные линии, но и диагонали, смещенные на один квадрат.