Теория:

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

Нарисовать \(7\) красных кругов в ряд.
 
круги.jpg
Рис. \(1\). Круги
  
Напишем программу, используя цикл \(for\).

Так как круги расположены в один ряд, то значение \(y\) можно сделать постоянным, а менять только значение \(x\).
 
круги в ряд.jpg
Рис. \(2\). Программа для кругов в ряд

Пример \(2\)

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

Нарисуем разноцветное «конфетти» разного цвета и размера.
 
калейдоскоп.jpg
Рис. \(5\). Результат работы программы
 
Для случайного выбора цвета, размера, координат центра будем использовать модуль \(random\).

Обозначим в цветовой модели RGB:

\(e\) — отвечает за интенсивность красного цвета;
\(c\) — отвечает за интенсивность зелёного цвета;
\(d\) — отвечает за интенсивность синего цвета.

Координаты \(x\) и \(y\), а также радиус \(r\) генерируются случайным образом:

\(x=randint(10,200)\);
\(y=randint(10,200)\);
\(r=randint(10,200)\);

а дальше в цикле рисуем окружности.
 
Screenshot_1.jpg
Рис. \(6\). Программа для рисования кругов
 
Пример \(4\)

Для рисования рисунка воспользуемся функциями, чтобы не повторять генерацию цветов и рисование квадратов.
 
Закрашенные квадратики.jpg
Рис. \(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. Программный код полностью.
 
пппп.png
Рис. \(8\). Программный код полностью
 
Создадим оптимальный код, исключив \(4\) цикла, и соединим всё в одном цикле.
 
оптим.png
Рис. \(9\). Оптимальная программа
Источники:
Рис. 1. Круги. © ЯКласс.
Рис. 2. Программа для кругов в ряд. © ЯКласс.
Рис. 3. Результат работы программы. © ЯКласс.
Рис. 4. Программа для рисования кругов по диагонали. © ЯКласс.
Рис. 5. Результат работы программы. © ЯКласс.
Рис. 6. Программа для рисования кругов. © ЯКласс.
Рис. 7. Результат работы программы. © ЯКласс.
Рис. 8. Программный код полностью. © ЯКласс.
Рис. 9. Оптимальная программа. © ЯКласс.