Вывод геометрических фигур – отличный способ отточить навыки применения циклов. В этой статье мы разберем, как вывести на экран ромб из звездочек при помощи цикла for
Python.
Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU
Сразу приведем рабочий код:
h = eval(input("Enter diamond's height: ")) for x in range(h): print(" " * (h - x), "*" * (2*x + 1)) for x in range(h - 2, -1, -1): print(" " * (h - x), "*" * (2*x + 1))
Вот вывод ромба с высотой, равной 7:
Enter diamond's height: 7 * *** ***** ******* ********* *********** ************* *********** ********* ******* ***** *** * Process finished with exit code 0
А теперь давайте разберем, как это работает.
Как построить ромб на Python
По сути задача состоит в том, чтобы правильно определить количество звездочек (*) и пробелов для каждой строки.
Рисунок ромба создается двумя циклами for
. Первый цикл печатает верхнюю часть ромба. Например, если высота ромба равна 7, то верхний цикл печатает строки 1-7, считая от вершины:
Второй цикл for
печатает нижнюю часть ромба. Например, если высота ромба равна 7, то нижний цикл печатает строки 8-13 (или 1-6, если считать с нижней вершины):
Теперь, когда вы понимаете, почему в коде есть два отдельных цикла for
, давайте рассмотрим их работу подробнее.
Верхняя часть ромба
Присмотритесь к ромбу. В верхней части количество звездочек в каждой строке равномерно прирастает (1, 3, 5, 7…). И если x
– номер строки ромба, а нумерация начинается с нуля, то 2x + 1
– количество звездочек в этой строке.
Чтобы компенсировать увеличение количества звездочек, на каждой новой строке количество пробелов слева должно уменьшаться на единицу. Таким образом, количество пробелов можно выразить формулой h - x
(высота ромба h
минус номер строки x
). Справа пробелов нет!
Итого, для каждой строки нужно напечатать h - x
пробелов и 2x + 1
звездочек. Здесь x – номер строки от 0 до высоты ромба, уменьшенной на единицу (h – 1).
for x in range(h): print(" " * (h - x), "*" * (2*x + 1))
Нижняя часть ромба
В нижней части количество звездочек уменьшается (…, 7, 5, 3, 1), а количество пробелов соответственно растет.
В нашем коде для нижней части ромба формулы для звездочек (2x + 1
) и пробелов (h - x
) остаются прежними. Весь фокус – в диапазоне цикла. Мы его разворачиваем.
for x in range(h - 2, -1, -1): print(" " * (h - x), "*" * (2*x + 1))
Здесь используется диапазон, заданный функцией range()
с тремя параметрами:
- первый параметр
h - 2
– начальное значение диапазона - второй параметр
-1
определяет конец диапазона (значение-1
в диапазон не входит, последнее вошедшее число – 0) - третий параметр
-1
задает размер шага. При отрицательном шаге диапазон идет от большего числа к меньшему.
Заключение
Сегодня вы узнали, как написать программу на Python, которая выводит на экран ромб с заданной высотой.
Вкратце напомним, что для этого нужны два цикла: один печатает верхнюю часть ромба, а другой – нижнюю. При этом количество звездочек определяется формулой 2x + 1
, где x
– номер строки. Количество пробелов слева равно h - x
, где h
– заданная высота ромба, а x
– номер строки.
Перевод статьи Artturi Jalli “Diamond Pattern in Python Using For Loop”.
спасибо, полезно