Вывод геометрических фигур — отличный способ отточить навыки применения циклов. В этой статье мы разберем, как вывести на экран ромб из звездочек при помощи цикла 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».

спасибо, полезно