Форум сайта python.su
0
Привет,всем!Сразу говорю что совсем новичок,и возник немного туповатый вопрос.
Суть такая,пишу функцию для игры крестики-нолики,которая принимает в виде аргумента доску(представлена списком из 9 значений) и возвращает победителя(winner),либо TIE(ничья),либо None.
Вот код:
def winner(board):
"""Определяет победителя в игре."""
WAYS_TO_WIN = ((0,1,2),
(3,4,5),
(6,7,8),
(0,3,6),
(1,4,7),
(2,5,8),
(0,4,8),
(2,4,6))
for row in WAYS_TO_WIN:
if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
winner = board[row[0]]
return winner
if EMPTY not in board:
return TIE
return None
board =["X","X","O"," ","O","X","O"," "," "]
print(winner(board))
>>>
O
def winner(board):
"""Определяет победителя в игре."""
WAYS_TO_WIN = ((0,1,2),
(3,4,5),
(6,7,8),
(0,3,6),
(1,4,7),
(2,5,8),
(0,4,8),
(2,4,6))
for row in WAYS_TO_WIN:
if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
winner = board[row[0]]
return winner
if EMPTY not in board:
return TIE
return None
>>>
None
Отредактировано (Фев. 26, 2012 15:31:46)
Офлайн
18
1. нет, не исполнится
2. прервется
3. натыкай везде принтов, что бы понять как твой код работает
Офлайн
20
При вызове return дальнейший код не выполняется (исключение блоки try-finally, но здесь их нет), цикл прерывается.
В вашем случае выигрышная комбинация (2, 4, 6), т.е. самая последняя в списке. Проверяем первую комбинацию (0, 1, 2) мы не видим победителя, поэтому условие не выполняется и winner не возвращается. Переходим к следующему условию: “if EMPTY not in board:”. Не знаю, что это такое, по всей видимости это условие тоже не выполняется. Идем дальше. Находим “return None”, возвращаем его, выполнение функции остановлено.
Табами в питоне определяются блоки, к которым относится код. В первом случае “return None” стоит за пределами цикла, во втором входит в тело цикла.
Офлайн
0
SotericСпасибо!
При вызове return дальнейший код не выполняется (исключение блоки try-finally, но здесь их нет), цикл прерывается.
В вашем случае выигрышная комбинация (2, 4, 6), т.е. самая последняя в списке. Проверяем первую комбинацию (0, 1, 2) мы не видим победителя, поэтому условие не выполняется и winner не возвращается. Переходим к следующему условию: “if EMPTY not in board:”. Не знаю, что это такое, по всей видимости это условие тоже не выполняется. Идем дальше. Находим “return None”, возвращаем его, выполнение функции остановлено.
Табами в питоне определяются блоки, к которым относится код. В первом случае “return None” стоит за пределами цикла, во втором входит в тело цикла.
Офлайн