Узоры в виде пирамид
В этой статье собрано десять небольших программ на Python, которые выводят разные пирамидальные узоры: из звёздочек, цифр, букв, перевёрнутых пирамид, а также треугольников Паскаля и Флойда. Все они построены на сочетании циклов for и while.
Что нужно знать
Перед изучением примеров полезно понимать:
Оператор if…else в Python — условный оператор
if...elsePython: цикл for — цикл
forPython: цикл while — цикл
whilePython: break и continue — операторы
breakиcontinue
Список примеров:
Треугольники из звёздочек, цифр и букв
Пример 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.