在递归代码中用 returns 替换 yield
Replacing yield with returns in recursive code
我如何删除此代码中的 yield 语句,并将其用作带有 return 语句的普通函数?
def solve(game_board):
num_occupied, board_layout=game_board
if num_occupied < 2:
yield (None, game_board)
else:
for move in possible_moves():
new_game_board = do_move(game_board, move)
if new_game_board:
for item in solve(new_game_board):
solved_num_occupied, solved_game_board = item
yield (move, solved_num_occupied), solved_game_board
求解器适用于三角接龙游戏,有 15 个索引。
game_board
结构是一个元组,包含板上占用的空间数和一个包含 15 个元素的数组,包含 1 或 0,具体取决于那里是否有钉子。
我已尽最大努力将 (move, solved_num_occupied), solved_game_board
存储在一个数组中,并在 for
循环之一后对它们进行 return,但结果总是空的。我想我只是不太了解生成器的运行方式以及它的终止位置。任何帮助将不胜感激!
如果需要的话,这里是完整的代码(注意:我在把它放在这里之前更改了函数中的变量名以使其更容易理解):https://pastebin.com/raw/dEyLY2SH
一次积累所有东西 return,而不是一次产生一个。正如我在评论中所说,只需将每个 yield
调用替换为对 list.append
的调用即可。
def solve(game_board):
# Initialise your list.
moves = []
num_occupied, board_layout=game_board
if num_occupied < 2:
# First change.
moves.append((None, game_board))
else:
for move in possible_moves():
new_game_board = do_move(game_board, move)
if new_game_board:
for item in solve(new_game_board):
solved_num_occupied, solved_game_board = item
# Second change
moves.append(((move, solved_num_occupied), solved_game_board))
# Final change.
return moves
我如何删除此代码中的 yield 语句,并将其用作带有 return 语句的普通函数?
def solve(game_board):
num_occupied, board_layout=game_board
if num_occupied < 2:
yield (None, game_board)
else:
for move in possible_moves():
new_game_board = do_move(game_board, move)
if new_game_board:
for item in solve(new_game_board):
solved_num_occupied, solved_game_board = item
yield (move, solved_num_occupied), solved_game_board
求解器适用于三角接龙游戏,有 15 个索引。
game_board
结构是一个元组,包含板上占用的空间数和一个包含 15 个元素的数组,包含 1 或 0,具体取决于那里是否有钉子。
我已尽最大努力将 (move, solved_num_occupied), solved_game_board
存储在一个数组中,并在 for
循环之一后对它们进行 return,但结果总是空的。我想我只是不太了解生成器的运行方式以及它的终止位置。任何帮助将不胜感激!
如果需要的话,这里是完整的代码(注意:我在把它放在这里之前更改了函数中的变量名以使其更容易理解):https://pastebin.com/raw/dEyLY2SH
一次积累所有东西 return,而不是一次产生一个。正如我在评论中所说,只需将每个 yield
调用替换为对 list.append
的调用即可。
def solve(game_board):
# Initialise your list.
moves = []
num_occupied, board_layout=game_board
if num_occupied < 2:
# First change.
moves.append((None, game_board))
else:
for move in possible_moves():
new_game_board = do_move(game_board, move)
if new_game_board:
for item in solve(new_game_board):
solved_num_occupied, solved_game_board = item
# Second change
moves.append(((move, solved_num_occupied), solved_game_board))
# Final change.
return moves