如何使用“yield”返回函数的结果序列?

2024-04-23 14:08:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习使用“屈服”。我们的教授让我们用“收益率”来解决N皇后问题。我的函数可以算出正确的解,但我不知道如何使用“yield”返回这些解。你知道吗

这是我的代码(其中“board”是一个一维列表):

def n_queens_valid(board):
# to decide if a position is allowed
    if len(board) != len(set(board)):
        return False

    for x in range(len(board)-1):
        for y in range(x+1,len(board)):
            if abs(y-x) == abs(board[x]-board[y]):
                return False
    return True


def n_queens_helper(n,board):
# to generate solutions
    if len(board) == n:
        print(board)
        yield copy.deepcopy(board) ############
    for queen in range(n):
        board.append(queen)
        if n_queens_valid(board):
            n_queens_helper(n, board) 
        board.pop()

solutions = n_queens_helper(4,[])
list(solutions)

如果删除yield语句,函数n_queens_helper(n,board)将能够打印所有的解决方案。然而,对于yield语句,最终结果将是[]。你知道吗

有人能帮我解决这个问题吗?你知道吗

其他信息 我正在使用python3.6!下面是可以打印结果的代码:

def n_queens_valid(board):
    if len(board) != len(set(board)):
        return False

    for x in range(len(board)-1):
        for y in range(x+1,len(board)):
            if abs(y-x) == abs(board[x]-board[y]):
                return False
    return True


def n_queens_helper(n,board):
    if len(board) == n:
        print(board)
    for queen in range(n):
        board.append(queen)
        if n_queens_valid(board):
            n_queens_helper(n, board) 
        board.pop()

n_queens_helper(7,[]) 

Tags: inhelperboardfalseforlenreturnif