Графика с циклами: спирограф и небо

⚠️ Как и в прошлом уроке, рисуем черепашкой: в обычной песочнице online-python рисунок не появится. Открой trinket.io/turtle — там картинка появляется прямо рядом с кодом. Хочешь рисовать на своём компьютере — попроси преподавателя помочь установить Python.

Ты уже рисуешь фигуры и умеешь циклы. Соединим их — и рисунки станут волшебными. Повторяя фигуру с маленьким поворотом, получим спирограф-узор, а случайными точками — звёздное небо. Немного кода — и на экране красота.

Черепашка рисует спирограф-узор и звёздное небо разными цветами
Как и в прошлом уроке, рисуем на trinket.io/turtle. Добавь t.speed(0) в начало — черепашка будет рисовать быстро.

Вложенный цикл: цикл внутри цикла

Спирограф строится на вложенном цикле — одном for внутри другого. Внутренний рисует фигуру (например квадрат), а внешний повторяет её много раз, каждый раз чуть поворачивая.

import turtle
t = turtle.Turtle()
t.speed(0)

for i in range(36):
    for j in range(4):
        t.forward(120)
        t.right(90)
    t.right(10)

turtle.done()
(на экране: узор-цветок из 36 повёрнутых квадратов)
  Вложенный цикл — цикл внутри цикла:

  for i in range(3):        внешний: 3 раза
      for j in range(4):    внутренний: 4 раза КАЖДЫЙ раз
          print(i, j)

  всего повторов тела:  3 * 4 = 12
В спирографе внутренний цикл рисует квадрат (4 стороны), а внешний повторяет его 36 раз, каждый раз поворачивая на 10°. 36 квадратов веером — и получается узор.

Случайные цвета и точки: звёздное небо

Добавим случайность (модуль random). t.goto(x, y) переносит черепашку в точку с координатами, t.dot(размер, цвет) ставит точку, а random.choice(список) берёт случайный цвет из списка. Фон красим turtle.bgcolor("black").

import turtle, random
t = turtle.Turtle()
t.penup()
turtle.bgcolor("black")

cveta = ["white", "yellow", "lightblue"]
for i in range(50):
    x = random.randint(-200, 200)
    y = random.randint(-200, 200)
    t.goto(x, y)
    t.dot(6, random.choice(cveta))

turtle.done()
(на экране: 50 разноцветных звёзд на чёрном небе)
  Звёздное небо: 50 точек в случайных местах

  for i in range(50):
      x = случайное от -200 до 200
      y = случайное от -200 до 200
      t.goto(x, y)               прыжок туда (перо поднято!)
      t.dot(6, случайный цвет)   ставим звезду
Важно: перед прыжками подними перо t.penup(), иначе черепашка нарисует линии между звёздами вместо отдельных точек. А random.choice(cveta) берёт случайный цвет из списка — списки ты уже знаешь!

Упражнение: спирограф и звёздное небо

Первый код — спирограф. Запусти на trinket.io/turtle и попробуй менять цвет, размер и угол поворота.

import turtle
t = turtle.Turtle()
t.speed(0)
t.color("purple")

for i in range(36):
    for j in range(4):
        t.forward(120)
        t.right(90)
    t.right(10)

turtle.done()
(узор-цветок из повёрнутых квадратов)

Второй код — звёздное небо со случайными цветами и местами.

import turtle, random
t = turtle.Turtle()
t.speed(0)
t.penup()
turtle.bgcolor("black")

cveta = ["white", "yellow", "lightblue", "pink"]
for i in range(60):
    x = random.randint(-250, 250)
    y = random.randint(-250, 250)
    t.goto(x, y)
    t.dot(random.randint(3, 9), random.choice(cveta))

turtle.done()
(60 разноцветных звёзд разного размера на чёрном небе)
  • В спирографе поменяй угол t.right(10) на 5 или 20 — узор изменится.
  • В спирографе замени внутренний квадрат на треугольник (range(3), right(120)).
  • В небе добавь свои цвета в список cveta и увеличь число звёзд.
Спирограф из треугольников, кругов или звёзд выглядит совсем по-разному. Меняй фигуру и угол — каждый раз новый узор. Это уже настоящее генеративное искусство кодом!

Контрольный вопрос. Как получается узор-спирограф?

АРисуем фигуру и каждый раз чуть поворачиваем её, повторяя много раз
БРисуем одну фигуру очень большого размера
ВСтавим много случайных точек

Подсказка: Секрет в повторении фигуры с маленьким поворотом на каждом шаге.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Сколько раз выполнится строка print(i, j) в этой программе? Впиши число.

Исходный код для этого задания:

for i in range(3):
    for j in range(4):
        print(i, j)

Подсказка: Вложенный цикл: внешний 3 раза, и на КАЖДЫЙ внутренний ещё 4. Перемножь.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что делает команда t.goto(50, 100)?

АПереносит черепашку в точку с координатами x=50, y=100
БДвигает черепашку вперёд на 50100 шагов
ВСтавит скорость 50

Подсказка: goto — «иди в». В скобках координаты точки на экране.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Что делает random.choice(cveta), если cveta — это список цветов?

АВозвращает один случайный цвет из списка
БВозвращает весь список сразу
ВСортирует список цветов

Подсказка: choice по-английски «выбор». Она случайно выбирает один элемент из списка.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Почему перед рисованием звёздного неба важно вызвать t.penup()?

Исходный код для этого задания:

for i in range(50):
    t.goto(x, y)
    t.dot(6, "white")
АИначе черепашка нарисует линии между точками вместо отдельных звёзд
БИначе программа не запустится
ВИначе точки будут одного цвета

Подсказка: goto с опущенным пером рисует линию до новой точки. Что убирает penup?

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Напиши строку-заголовок цикла for, который повторит тело 36 раз, используя переменную i.

Исходный код для этого задания:

# напиши ниже строку-заголовок цикла на 36 повторов
    t.forward(100)

Подсказка: Шаблон: for i in range(сколько):. Не забудь двоеточие.

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. Напиши команду, чтобы черепашка t перепрыгнула в центр экрана — в точку с координатами 0, 0.

Исходный код для этого задания:

import turtle
t = turtle.Turtle()
# напиши ниже команду перехода в точку 0, 0

Подсказка: Переход в точку — goto(x, y). Шаблон: t.goto(0, 0).

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Задание. Напиши код сам. В списке cveta лежат цвета. Напиши команду print, которая выведет один случайный цвет из этого списка.

Исходный код для этого задания:

import random
cveta = ["white", "yellow", "lightblue"]
# напиши ниже команду print со случайным цветом из cveta

Подсказка: Случайный элемент списка — random.choice(список). Шаблон: print(random.choice(cveta)).

✅ Готово, если: ты ввёл(а) верный ответ, и онлайн-проверка его приняла.

Онлайн-проверка ответа появится позже

Контрольный вопрос. Программа со звёздным небом падает с ошибкой на random.choice(…). Что забыли в начале?

Исходный код для этого задания:

cveta = ["white", "yellow"]
t.dot(6, random.choice(cveta))
АСтроку import random — модуль случайности не подключили
БСписок cveta нужно писать в круглых скобках
Вdot нельзя красить

Подсказка: Чтобы пользоваться random.choice, модуль random надо сначала подключить.

Онлайн-проверка ответа появится позже

Что дальше

Ты научился рисовать узоры вложенными циклами и раскрашивать небо случайными звёздами — это уже красивая генеративная графика. Ты прошёл весь фундамент Python! В следующем разделе — твой финальный проект: соберёшь свою игру или квест из всего, что уже умеешь.

Назад  ·  ↑ В начало урока  ·  ⌂ В начало курса  ·  Вперёд →

Школа Виктора Комлева