【发布时间】:2018-12-07 03:36:06
【问题描述】:
如何删除此代码中的 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 个元素的数组,根据是否有 peg 包含 1 或 0。
我已尽力将(move, solved_num_occupied), solved_game_board 存储在一个数组中,并在for 循环之一之后返回它们,但它总是空的。我想我只是不太了解生成器是如何运行的,以及它在哪里终止。任何帮助将不胜感激!
这里是完整的代码,如果需要的话(注意:我在把它放在这里之前更改了函数中的变量名,以便更容易理解):https://pastebin.com/raw/dEyLY2SH
【问题讨论】:
-
无论哪里有产量,通过附加到一个列表来替换它;然后在最后返回列表。