#python #python-3.x #doctest
#python #python-3.x #doctest
Вопрос:
Я пытаюсь написать вывод списка, который я расширяю на несколько строк в 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]]
Комментарии:
1. @glhr Да, в этом суть.
Ответ №1:
Используйте NORMALIZE_WHITESPACE
опцию. Его можно включить разными способами, например, директивой внутри docstring:
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]]
"""
Ответ №2:
Если вы хотите увидеть красивый результат, вы можете использовать встроенный для этого 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]]
Комментарии:
1. Это правильно. Но решение немного подробное, потому что вам нужно импортировать
pprint
. В любом случае спасибо.