Как использовать «yield» для возврата последовательности результатов функции? - PullRequest
0 голосов
/ 17 сентября 2018

Я учусь использовать «доходность».Наш профессор попросил нас решить проблему N-Queens, используя «yield».Моя функция могла бы вырабатывать правильные решения, но я просто не знаю, как использовать «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) сможет распечатать всерешения.Однако с заявлением о доходности окончательный результат будет [].

Может ли кто-нибудь помочь мне с этой проблемой?

Дополнительная информация Я использую Python 3.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,[]) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...