Как вывести ромб из звездочек на Python

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

1 комментарий к “Как вывести ромб из звездочек на Python”

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *