При создании игры Connect Four я столкнулся со странной проблемой в функции, называемой make_move
, когда два эквивалентных оператора возврата ведут себя по-разному.
Единственная функция прямой зависимости - это put_piece(board, column, player)
, которая помещаетфигура игрока в самом нижнем пустом месте в данном столбце доски.put_piece
возвращает кортеж из двух элементов: индекс строки, в которой фигура заканчивается (или -1, если столбец заполнен) и обновленная доска.Функция put_piece
реализована правильно.
Функция make_move
- это место, где возникают разногласия.Он успешно возвращает row
(индекс строки, в которой находится фрагмент) и board
(обновленная доска), если я реализую, используя обычную нотацию возврата if else, как показано здесь:
def make_move(board, max_rows, max_cols, col, player):
"""
Put player's piece in column COL of the board, if it is a valid move.
Return a tuple of two values:
1. If the move is valid, make_move returns the index of the row the
piece is placed in. Otherwise, it returns -1.
2. The updated board
"""
if 0 <= col < len(board[0]):
return put_piece(board, max_rows, col, player)
return -1, board
Вот как make_move
должен возвращать:
>>> rows, columns = 2, 2
>>> board = create_board(rows, columns)
>>> row, board = make_move(board, rows, columns, 0, 'X')
>>> row
1
>>> board
[['-', '-'], ['X', '-']]
Однако, если я изменю make_move
на
def make_move(board, max_rows, max_cols, col, player):
"""
Put player's piece in column COL of the board, if it is a valid move.
Return a tuple of two values:
1. If the move is valid, make_move returns the index of the row the
piece is placed in. Otherwise, it returns -1.
2. The updated board
"""
return put_piece(board, max_rows, col, player) if 0 <= col < len(board[0]) else -1, board
Оба возвращаемых значения будут назначены как кортеж на row
,board
просто переносит предыдущее значение.
>>> rows, columns = 2, 2
>>> board = create_board(rows, columns)
>>> row, board = make_move(board, rows, columns, 0, 'X')
>>> row
(1, [['-', '-'], ['X', '-']])
>>> board
[['-', '-'], ['-', '-']]
Два способа написания функции в буквальном смысле одинаковы, за исключением обозначений.Есть идеи, почему это происходит?