Узоры в виде пирамид

В этой статье собрано десять небольших программ на Python, которые выводят разные пирамидальные узоры: из звёздочек, цифр, букв, перевёрнутых пирамид, а также треугольников Паскаля и Флойда. Все они построены на сочетании циклов for и while.

Что нужно знать

Перед изучением примеров полезно понимать:

Список примеров:

Треугольники из звёздочек, цифр и букв

Пример 1. Половина пирамиды из звёздочек

*
* *
* * *
* * * *
* * * * *

Код

rows = int(input("Enter number of rows: "))

for i in range(rows):
    for j in range(i+1):
        print("* ", end="")
    print()

Как работает программа:

  • Сначала запрашивается высота пирамиды rows.

  • Внешний цикл проходит от i = 0 до i = rows.

  • Внутренний цикл идёт от j = 0 до i + 1; на каждой итерации выводится i + 1 звёздочек подряд без перевода строки. То есть номер строки задаёт количество звёздочек в этой строке.

  • После завершения внутреннего цикла печатается перевод строки.

Пример 2. Половина пирамиды из чисел

1
1 2
1 2 3
1 2 3 4
1 2 3 4 5

Код

rows = int(input("Enter number of rows: "))

for i in range(rows):
    for j in range(i+1):
        print(j+1, end=" ")
    print()

Логика та же, что и в примере 1, но вместо звёздочки печатается число от 1 до j, где j пробегает от 0 до i.

Пример 3. Половина пирамиды из букв

A
B B
C C C
D D D D
E E E E E

Код

rows = int(input("Enter number of rows: "))

ascii_value = 65

for i in range(rows):
    for j in range(i+1):
        alphabet = chr(ascii_value)
        print(alphabet, end=" ")

    ascii_value += 1
    print()

Здесь используются ASCII-коды букв: 65 соответствует A. На каждой итерации внешнего цикла значение ascii_value увеличивается на 1, и через chr() получается следующая буква.

Перевёрнутые треугольники из звёздочек и цифр

Пример 4. Перевёрнутый треугольник из звёздочек

* * * * *
* * * *
* * *
* *
*

Код

rows = int(input("Enter number of rows: "))

for i in range(rows, 0, -1):
    for j in range(0, i):
        print("* ", end=" ")

    print()

В отличие от прямого треугольника, здесь внешний цикл идёт от rows к 0 с шагом -1: количество звёздочек на каждой следующей строке уменьшается на одну.

Пример 5. Перевёрнутый треугольник из чисел

1 2 3 4 5
1 2 3 4
1 2 3
1 2
1

Код

rows = int(input("Enter number of rows: "))

for i in range(rows, 0, -1):
    for j in range(1, i+1):
        print(j, end=" ")

    print()

Отличие от обычного треугольника из чисел только в том, что внешний цикл проходит в обратном порядке — от rows к 0.

Полные пирамиды

Пример 6. Полная пирамида из звёздочек

        *
      * * *
    * * * * *
  * * * * * * *
* * * * * * * * *

Код

rows = int(input("Enter number of rows: "))

k = 0

for i in range(1, rows+1):
    for space in range(1, (rows-i)+1):
        print(end="  ")

    while k!=(2*i-1):
        print("* ", end="")
        k += 1

    k = 0
    print()

Этот тип пирамиды сложнее предыдущих:

  • Внешний цикл идёт от i = 1 до i = rows + 1.

  • Первый внутренний цикл печатает нужное количество пробелов по формуле (rows-i)+1.

  • Цикл while печатает звёздочки по формуле 2 * i - 1 — именно столько звёздочек нужно в каждой строке.

Пример 7. Полная пирамида из чисел

        1
      2 3 2
    3 4 5 4 3
  4 5 6 7 6 5 4
5 6 7 8 9 8 7 6 5

Код

rows = int(input("Enter number of rows: "))

k = 0
count=0
count1=0

for i in range(1, rows+1):
    for space in range(1, (rows-i)+1):
        print("  ", end="")
        count+=1

    while k!=((2*i)-1):
        if count<=rows-1:
            print(i+k, end=" ")
            count+=1
        else:
            count1+=1
            print(i+k-(2*count1), end=" ")
        k += 1

    count1 = count = k = 0
    print()

Как и в примере 6, тут два вложенных цикла внутри внешнего for:

  • Внешний цикл проходит по строкам.

  • Для пробелов и для чисел используются два счётчика — count и count1.

  • Внутренний цикл for выводит пробелы по формуле (rows-i)+1.

  • Цикл while печатает числа; формула 2 * i - 1 задаёт количество элементов в строке.

Пример 8. Перевёрнутая полная пирамида из звёздочек

* * * * * * * * *
  * * * * * * *
    * * * * *
      * * *
        *

Код

rows = int(input("Enter number of rows: "))

for i in range(rows, 1, -1):
    for space in range(0, rows-i):
        print("  ", end="")
    for j in range(i, 2*i-1):
        print("* ", end="")
    for j in range(1, i-1):
        print("* ", end="")
    print()

В этом примере используются четыре цикла for:

  • Внешний цикл проходит от i = rows к i = 1.

  • Первый вложенный цикл печатает нужное количество пробелов.

  • Второй вложенный цикл печатает первую половину пирамиды (если смотреть на вертикальную ось симметрии), третий — вторую.

Треугольник Паскаля

Пример 9

          1
        1   1
      1   2   1
    1   3   3    1
  1  4    6   4   1
1  5   10   10  5   1

Код

rows = int(input("Enter number of rows: "))
coef = 1

for i in range(1, rows+1):
    for space in range(1, rows-i+1):
        print(" ",end="")
    for j in range(0, i):
        if j==0 or i==0:
            coef = 1
        else:
            coef = coef * (i - j)//j
        print(coef, end = " ")
    print()

Программа использует три цикла for:

  • Внешний цикл идёт от 1 до rows + 1.

  • Первый внутренний цикл печатает пробелы.

  • Второй внутренний цикл вычисляет очередной биномиальный коэффициент по формуле coef = coef * (i - j) // j и выводит его на экран. Здесь i — номер строки, j — позиция в строке от 0 до i.

Треугольник Флойда

Пример 10

1
2 3
4 5 6
7 8 9 10

Код

rows = int(input("Enter number of rows: "))
number = 1

for i in range(1, rows+1):
    for j in range(1, i+1):
        print(number, end=" ")
        number += 1
    print()

Это один из самых простых узоров:

  • Переменная number инициализируется единицей.

  • Внешний цикл проходит от 1 до общего числа строк.

  • Внутренний цикл идёт от 1 до i + 1, где i — номер строки. После каждой итерации number увеличивается на 1.