Теория:
Для создания орнаментов и узоров с повторяющимися фрагментами удобно использовать циклы и процедуры.
Пример \(1\)
Нарисовать \(7\) красных кругов в ряд.
Рис. \(1\). Круги
Напишем программу, используя цикл \(for\).
Так как круги расположены в один ряд, то значение \(y\) можно сделать постоянным, а менять только значение \(x\).

Рис. \(2\). Программа для кругов в ряд
Пример \(2\)
Расположим круги по диагонали.

Рис. \(3\). Результат работы программы
В данном случае изменяется и \(x\), и \(y\), поэтому значения будем менять с шагом \(40\).

Рис. \(4\). Программа для рисования кругов по диагонали
Пример \(3\)
Нарисуем разноцветное «конфетти» разного цвета и размера.

Рис. \(5\). Результат работы программы
Для случайного выбора цвета, размера, координат центра будем использовать модуль \(random\).
Обозначим в цветовой модели RGB:
\(e\) — отвечает за интенсивность красного цвета;
\(c\) — отвечает за интенсивность зелёного цвета;
\(d\) — отвечает за интенсивность синего цвета.
Обозначим в цветовой модели RGB:
\(e\) — отвечает за интенсивность красного цвета;
\(c\) — отвечает за интенсивность зелёного цвета;
\(d\) — отвечает за интенсивность синего цвета.
Координаты \(x\) и \(y\), а также радиус \(r\) генерируются случайным образом:
\(x=randint(10,200)\);
\(y=randint(10,200)\);
\(r=randint(10,200)\);
а дальше в цикле рисуем окружности.

Рис. \(6\). Программа для рисования кругов
Пример \(4\)
Для рисования рисунка воспользуемся функциями, чтобы не повторять генерацию цветов и рисование квадратов.

Рис. \(7\). Результат работы программы
Данная функция рисует квадрат:
\(def\) \(sque(x1,y1):\)
\(rectangle(x1.y1,x1+20,y1+20)\)
Данная функция генерирует цвет:
\(def\) \(colorit:\)
\(c=randint(0,255)\)
\(e=randint(0,255)\)
\(d=randint(0,255)\)
\( penColor(e,c,d)\)
\( brushColor(e,c,d)\)
Дальше запишем четыре цикла (конечно, это не оптимально, но пока разберём пошагово).
1. Первый цикл рисует верхний ряд с шагом \(30\).
\(a=0\)
\(penSize(2)\)
\(for\) \(i\) \(in\) \(range(5):\)
\(colorit(1)\)
\(sque(10+a,10)\)
\(a=a+30\)
2. Второй цикл рисует левый столбик из квадратов с шагом \(30\).
\(b=10\)
\(for\) \(i\) \(in\) \(range(5):\)
\(colorit(1)\)
\(sque(10,b)\)
\(b=b+30\)
3. Третий цикл рисует нижний ряд с шагом \(30\).
\(m=0\)
\(for\) \(i\) \(in\) \(range(5):\)
\(colorit(1)\)
\(sque(10+m,130)\)
\(m=m+30\)
4. Четвёртый цикл рисует правый столбик с шагом \(30\).
\(n=0\)
\(for\) \(i\) \(in\) \(range(5):\)
\(colorit(1)\)
\(sque(130,n)\)
\(n=n+30\)
5. Программный код полностью.

Рис. \(8\). Программный код полностью
Создадим оптимальный код, исключив \(4\) цикла, и соединим всё в одном цикле.

Рис. \(9\). Оптимальная программа
Источники:
Рис. 1. Круги. © ЯКласс.
Рис. 2. Программа для кругов в ряд. © ЯКласс.
Рис. 3. Результат работы программы. © ЯКласс.
Рис. 4. Программа для рисования кругов по диагонали. © ЯКласс.
Рис. 5. Результат работы программы. © ЯКласс.
Рис. 6. Программа для рисования кругов. © ЯКласс.
Рис. 7. Результат работы программы. © ЯКласс.
Рис. 8. Программный код полностью. © ЯКласс.
Рис. 9. Оптимальная программа. © ЯКласс.