Как построить пирамиду

Python — как построить пирамиду?

Python - построить пирамидуНедавно где-то встретился текст о том, что в Yandex (и не только у них) при поступлении на работу любят задавать задачку о построении пирамиды с помощью символьной графики. Не знаю, насколько это правда, но стало интересно — а как же это реализовать?

Фактически, кроме построения пирамидки в виде … пирамиды:) данная задача может иметь варианты:
— банальная односторонняя пирамидка с расширением вправо-вниз (решается банальным циклом, пример которого ниже):

Как видно из кода — односторонняя пирамидка формируется в списке по циклу, логика которого сводится к алгоритму: загоняем в список символ #, выводим на печать, увеличиваем на единицу значение переменной stage — которая отвечает за количество уровней, добавляем в список символ # и снова выводим на печать и далее-далее-далее. Причем, все это делается до того момента, пока количество строк не будет равно заданному количеству в переменной quantity. В целом — тут все просто 🙂

— Более интересная задача с пирамидкой с расширением влево-вниз и уж совсем интересна пирамидка с центром и расширением вниз-в стороны. Основная сложность в данной задаче, как мне кажется — построение цикла в цикле. Саму логику этого можно представить так: у нас имеется переменная, которая обозначает общую максимальную ширину яруса, переменная, отвечающая за число пробелов в ярусе, и переменная, отвечающая за количество символов # в строке. Т.е. первая строка у нас складывается из:
Первый ярус: общее количество символов в ярусе, из которых один символ в конце строки — символ #, а все предыдущие — пробелы
Второй ярус: общее количество символов в ярусе минус, из которых два символа в конце строки — символ #, а все предыдущие — пробелы
и далее … и конечно, можно создать цикл в цикле, однако — почему бы не пойти другим путем?

Включаем режим лентяя, и открываем одну из моих предыдущих записей, посвященных работе со строками в Python. В одной из пунктов я рассказываю о выравнивании текста в строках: по центру, по левой стороне или правой. Ну — теперь все точно очень и очень просто 😉

Как видно из кода:

piramide = [] — создаем список

text = str(‘#’) — создаем переменную text (тот самый, который будет заполнять строку)

quantity = int(15) — задаем количество ярусов

stage = int(0) — начальное значение количества ярусов

while stage < quantity: - цикл будет работать, пока начальное количество ярусов не станет равным заданному количеству ярусов
piramide.append(text) — добавляем в список piramide текст #

print(text.rjust(quantity)) — выводим список на печать с выравниванием справа (за это отвечает rjust (если нужно будет выравнивать пирамиду по левому краю — используем ljust, если по центру — center). В то же время нужно подчеркнуть, что в случае работы кода по центру — пирамида получается несколько … кривоватой, ибо мы добавляем по одному символу в каждую последующую строку. Что бы исправить это — в последней строке нужно добавлять по два символа 😉

stage = stage + 1 — добавляем в переменную единицу т.е. увеличиваем количество и постепенно доходим до заданного максимума

text = text + ‘#’ — в переменную так же добавляем символ — что бы в следующей итерации вывести на символ больше.

Код так же доступен по ссылке на GitHub. В случае возникновения вопросов — пишите на почту. И не забывайте сделать репост на свою страницу в социальных сетях 🙂