Python Docstring Как написать список в несколько строк в Docstring? - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь написать вывод списка, который я расширяю в несколько строк в doctest. Но фактический результат не соответствует тому, что я ожидаю.

Вот мой код.

def make_board(dimension: int, queens: list):
    """

    >>> make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)])
    [[False, True, False, False],
     [False, False, False, True],
     [True, False, False, False],
     [False, False, True, False]]
    """
    assert dimension == len(queens)
    return [[(row, col) in queens for col in range(dimension)] for row in range(dimension)]

Вот результаты теста .

Failed example:
    make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)])
Expected:
    [[False, True, False, False],
     [False, False, False, True],
     [True, False, False, False],
     [False, False, True, False]]
Got:
    [[False, True, False, False], [False, False, False, True], [True, False, False, False], [False, False, True, False]]

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Используйте опцию NORMALIZE_WHITESPACE.Его можно включить различными способами, например, с помощью директивы внутри строки документации:

def make_board(dimension: int, queens: list):
    """
    >>> make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)]) # doctest: +NORMALIZE_WHITESPACE
    [[False, True, False, False],
     [False, False, False, True],
     [True, False, False, False],
     [False, False, True, False]]
    """
0 голосов
/ 17 апреля 2019

Если вы хотите увидеть симпатичный результат, вы можете использовать встроенный pprint для этого:

from pprint import pprint

def make_board(dimension: int, queens: list):
"""

>>> make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)])
[[False, True, False, False],
 [False, False, False, True],
 [True, False, False, False],
 [False, False, True, False]]
"""
assert dimension == len(queens)

result = [[(row, col) in queens for col in range(dimension)] for row in range(dimension)]
pprint(result)

return result

Вы будете видеть результат каждый раз, когда вызываете функцию, поэтому я не рекомендую делать это.

>>>a=make_board(4, [(0, 1), (1, 3), (2, 0), (3, 2)])
[[False, True, False, False],
[False, False, False, True],
[True, False, False, False],
[False, False, True, False]]

>>>a
[[False, True, False, False], [False, False, False, True], [True, False, False, False], [False, False, True, False]]
...