Рисуем узоры повторением

Превращаем циклы в художников: рисуем узоры из символов и понимаем, что красивое можно собрать из простого, если повторять.

Узор в программировании — это красивый рисунок, который получается, когда цикл много раз повторяет простую команду.

Красота из повторения

Оглянись вокруг: забор — это повторяющиеся доски, лесенка — повторяющиеся ступеньки, узор на обоях — повторяющийся рисунок. Природа и люди обожают повторения! И циклы помогают нам легко создавать такую красоту в программе.

Мы будем рисовать узоры из обычных символов — звёздочек * и решёток #. Это называется «рисование текстом», и это очень весело.

Хитрость: умножение строки

В Python есть маленькое волшебство. Если умножить строку на число, она повторится! Например, "*" * 5 даст ***** — пять звёздочек. Проверим:

print("*" * 5)
print("=" * 10)
print("ха" * 3)

Вывод:

*****
==========
хахаха

Удобно, правда? Теперь соединим этот трюк с циклом и нарисуем целую стену из звёздочек.

Рисуем прямоугольник из звёздочек

Чтобы получить прямоугольник, напечатаем строчку из звёздочек несколько раз. Цикл повторит печать, а умножение строки сделает каждую строчку длинной:

for i in range(5):
    print("*" * 5)

Вывод:

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

Пять строчек по пять звёздочек — получился квадратик из звёзд! Цикл повторил команду print("*" * 5) пять раз. Поменяй числа — и получится прямоугольник любого размера.

Растущая ёлочка

А что, если каждая строчка будет чуть длиннее предыдущей? Получится треугольник, похожий на ёлочку. Для этого используем счётчик i, который сам растёт с каждым повтором:

for i in range(1, 6):
    print("*" * i)

Вывод:

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

На первом повторе i равен 1 — одна звёздочка. На втором i равен 2 — две звёздочки. И так далее. Запись range(1, 6) значит «считай от 1 до 5» (последнее число 6 само не входит — об этом узнаем дальше). Так из простого цикла вырос настоящий рисунок!

Попробуй сам

Нарисуй лесенку из решёток. Запусти, а потом попробуй сделать её выше — поменяй число в range.

for i in range(1, 5):
    print("#" * i)

Вывод:

#
##
###
####

Частые ошибки

  • Перепутать «звёздочку умножения» и «звёздочку-символ». В "*" * 5 первая звёздочка в кавычках — это рисунок, а вторая (без кавычек) — знак умножения. Кавычки решают всё!
  • Ждать ровный треугольник по центру. Пока наши узоры «прижаты» к левому краю — это нормально и красиво. Узоры по центру — задачка на потом.

Что мы узнали

  • Из повторений рождается красота: узоры, фигуры, рисунки.
  • "символ" * число повторяет символ нужное число раз.
  • Счётчик i внутри цикла можно использовать, чтобы строчки росли.
Проверьте себя
1. Что напечатает print("*" * 3)?
A*3
B***
C* * *
DОшибку
2. Почему в цикле for i in range(1, 6) строчки растут, если печатать "*" * i?
AПотому что звёздочки сами размножаются
BПотому что счётчик i на каждом повторе становится больше
CПотому что Python любит треугольники
DЭто случайность
3. Чем отличаются две звёздочки в "*" * 5?
AНичем, это одно и то же
BПервая (в кавычках) — символ для печати, вторая — знак умножения
CОбе — знак умножения
DОбе — символы для печати
Поддержать проект