Как оператор return функции Python может хранить строки в одной строке, например print (arguments, end = '')? - PullRequest
0 голосов
/ 12 мая 2019

Я новичок в коде и пытаюсь, чтобы возвращаемые значения функции python были напечатаны в одной строке. Я знаю, что использовать print (аргумент, en = ''), хотя я не могу включить функцию печати в возвращение определенной функции.

В конечном итоге я пытаюсь получить каждый первый элемент списка в списке, затем второй и т. Д. Для печати дизайна, повернутого на 90 градусов. Сначала я получаю каждый список в цикле for, затем получаю каждый индекс оттуда и печатаю в секунду цикл for.

Имея код, как у меня сейчас, я получаю нужный результат, но в конце каждой строки есть «Нет», потому что у меня есть функция печати в функции вместо «возврата», так что я могу печатать каждое значение индекса по одной строке в списке. Мне любопытно, как отображать значения в одной строке, не используя аргумент end функции print в функции return. И я всегда хотел бы видеть лучший / более быстрый способ достижения этого результата.

..OO.OO.. .OOOOOOO. .OOOOOOO. ..OOOOO.. ...OOO... ....O....

Спасибо!

grid = [['.', '.', '.', '.', '.', '.',],
        ['.', '0', '0', '.', '.', '.',],
        ['0', '0', '0', '0', '.', '.',],
        ['0', '0', '0', '0', '0', '.',],
        ['.', '0', '0', '0', '0', '0',],
        ['0', '0', '0', '0', '0', '.',],
        ['0', '0', '0', '0', '.', '.',],
        ['.', '0', '0', '.', '.', '.',],
        ['.', '.', '.', '.', '.', '.',]]

xLength = len(grid[0])-1
yLength = len(grid)-1

listX = list(range(0, xLength))
listY = list(range(0, yLength))


def listGrid(y = 0):
    for x in grid:
        print(x[y], end = '')

for num in listX:
    print(listGrid(num))

1 Ответ

1 голос
/ 12 мая 2019

Вам необходимо вернуть значение из функции - если функция не возвращает ничего, она возвращает None неявно. Ваш код печатает «данные» внутри функции, а вы возвращаете функцию с помощью

print(listGrid(num))  # prints None

Напечатайте результаты вашей функции за пределами, используя end="" вариант:

grid = [['.', '.', '.', '.', '.', '.',],
        ['.', '0', '0', '.', '.', '.',],
        ['0', '0', '0', '0', '.', '.',],
        ['0', '0', '0', '0', '0', '.',],
        ['.', '0', '0', '0', '0', '0',],
        ['0', '0', '0', '0', '0', '.',],
        ['0', '0', '0', '0', '.', '.',],
        ['.', '0', '0', '.', '.', '.',],
        ['.', '.', '.', '.', '.', '.',]]

xLength = len(grid[0])  # fix, do not subtract 1 - range is upper border exclusive 
yLength = len(grid)-1

listX = list(range(0, xLength))
listY = list(range(0, yLength))

def listGrid(y = 0):
    return [x[y] for x in grid]  # return a list

for num in listX:
    for r in listGrid(num): 
        print(r, end="")
    print()

Или вы можете увеличить zip () , чтобы сделать столбцы из ваших строк и напечатать их:

# directly operates on your data - you do not need anything of your code beside 
# the grid definition  
for c in zip(*grid):
    print(''.join(c))

Выход:

..00.00..
.0000000.
.0000000.
..00000..
...000...
....0....
...