Вопрос об автоматизации скучных вещей: глава 4 - PullRequest
0 голосов
/ 28 апреля 2020

Я новичок в программировании, и у меня просто вопрос об автоматизации скучных вещей: Глава 4. Есть учебный проект, в котором вам нужно определенным образом переформатировать сетку. Вот мой код:

grid = [['.', '.', '.', '.', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['.', 'O', 'O', 'O', 'O', 'O'],
    ['O', 'O', 'O', 'O', 'O', '.'],
    ['O', 'O', 'O', 'O', '.', '.'],
    ['.', 'O', 'O', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.']]

for i in range(0, len(grid[0])):
    for j in range(0, len(grid)):
        print(grid[j][i], end = "")
    print("")

Вывод:

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

Я понимаю, как расположить этот код, используя циклы «for». Однако я не совсем понимаю, почему вы должны включить 'end = "" для достижения этой цели. Мне также интересно, почему вы должны включить последнее выражение print ("") для того, чтобы сделать это.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

В циклах for вы печатаете не каждую строку, а каждый символ. Обычный оператор печати по умолчанию равен end = '\ n' или новой строке. Например, если я запущу:

mylist = ['this', 'list', 'right', 'here']
for item in mylist:
    print(item)

Вывод будет:

this
list
right
here

Что делает ключевое слово end, это меняет то, как оператор print завершает каждую печать. в моем том же примере, если бы я вместо этого добавил end = '-', он добавил бы дефис между каждым элементом в списке.

this-list-right-here-

Обратите внимание, что он добавляет дефис к последнему слову. каждый раз, когда вызывается оператор print, он печатает то, что вы просите, а затем то, что вы ставите как «конец».

Поскольку вы добавляете пустую строку в качестве конца, каждый символ печатается сразу после предыдущего , но затем он переходит на новую строку. Почему? Когда ваш код заканчивает строку «j», он переходит к следующему индексу строк - или i. Когда это происходит, вы печатаете пустую строку, но вы делаете это с конечным значением по умолчанию, которое равно end = '\ n'. Было бы более понятно, если бы этот пример заставил вас явно записать эту часть. Здесь важно не то, что вы печатаете, а то, что добавляется к концу по умолчанию - новая строка. Итак, вы просматриваете каждый символ, распечатываете его, а затем продолжаете без новой строки, пока не достигнете конца строки, после чего вы печатаете новую строку и продолжаете.

Вы также можете заменить этот последний отпечаток ("") с print ("\ n", end = "") и получит тот же результат.

0 голосов
/ 28 апреля 2020

По умолчанию функция print() добавляет новую строку ко всему, что печатает.

Вы можете отключить это поведение, передав ему ключевое слово end, которое позволяет вам устанавливать то, что оно печатает вместо новой строки. Это может быть запятая, пробел, множественные переводы строк, что угодно - или это может быть пустая строка, означающая, что она ничего не печатает.

Это единственный способ напечатать несколько вещей на та же строка, что и (очевидно), если вы как-то не избавитесь от «automati c newline», все появится в отдельной строке, а это не то, что вам нужно.

Затем вы вызываете print() снова, либо без аргумента, либо с пустой строкой, и пусть он добавляет символ новой строки в качестве поведения по умолчанию.


В случае, если это помогает проиллюстрировать, следующее функционально эквивалентно:

print()
print('')
print('', end='\n')
print('\n', end='')

В каждом случае они печатают одну новую строку и ничего больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...