Форум сайта python.su
Привет,всем!Сразу говорю что совсем новичок,и возник немного туповатый вопрос.
Суть такая,пишу функцию для игры крестики-нолики,которая принимает в виде аргумента доску(представлена списком из 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)
Офлайн
1. нет, не исполнится
2. прервется
3. натыкай везде принтов, что бы понять как твой код работает
Офлайн
При вызове return дальнейший код не выполняется (исключение блоки try-finally, но здесь их нет), цикл прерывается.
В вашем случае выигрышная комбинация (2, 4, 6), т.е. самая последняя в списке. Проверяем первую комбинацию (0, 1, 2) мы не видим победителя, поэтому условие не выполняется и winner не возвращается. Переходим к следующему условию: “if EMPTY not in board:”. Не знаю, что это такое, по всей видимости это условие тоже не выполняется. Идем дальше. Находим “return None”, возвращаем его, выполнение функции остановлено.
Табами в питоне определяются блоки, к которым относится код. В первом случае “return None” стоит за пределами цикла, во втором входит в тело цикла.
Офлайн
SotericСпасибо!
При вызове return дальнейший код не выполняется (исключение блоки try-finally, но здесь их нет), цикл прерывается.
В вашем случае выигрышная комбинация (2, 4, 6), т.е. самая последняя в списке. Проверяем первую комбинацию (0, 1, 2) мы не видим победителя, поэтому условие не выполняется и winner не возвращается. Переходим к следующему условию: “if EMPTY not in board:”. Не знаю, что это такое, по всей видимости это условие тоже не выполняется. Идем дальше. Находим “return None”, возвращаем его, выполнение функции остановлено.
Табами в питоне определяются блоки, к которым относится код. В первом случае “return None” стоит за пределами цикла, во втором входит в тело цикла.
Офлайн