Вопрос Помогите решить задачу по python

Регистрация
21 Ноя 2013
Сообщения
75
Репутация
5
Спасибо
1
Монет
0
Задано игровое поле для игры «Крестики-нолики» в виде двумерного списка. Например: P = [['x', 'x', 'o'], ['o', 'x', 'x'], ['#', 'x', '#']] Здесь 'x' – крестик; 'o' – нолик; '#' – свободная клетка. Необходимо проверить, есть ли в поле P выигрышная ситуация для крестиков. Вывести «ДА», если крестики победили и «НЕТ» - в противном случае.
 
незнаю c++ лудше
 
def check_win(board):
# Проверяем строки
for row in board:
if row.count('x') == 3:
return 'ДА'
# Проверяем столбцы
for col in range(3):
if [row[col] for row in board].count('x') == 3:
return 'ДА'
# Проверяем диагонали
if [board for i in range(3)].count('x') == 3:
return 'ДА'
if [board[2-i] for i in range(3)].count('x') == 3:
return 'ДА'
# Если нет выигрышной комбинации
return 'НЕТ'

P = [['x', 'x', 'o'], ['o', 'x', 'x'], ['#', 'x', '#']]
print(check_win(P))
 
Вот решение задачи на языке 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 'НЕТ' Этот вариант более эффективен, так как он проверяет не только горизонтальные, вертикальные и диагональные линии, но и диагонали, смещенные на один квадрат.
 
Назад
Сверху