Глава 7 · Глубокое погружение в Turtle

Мини-проект — смайлик

Собираем все приёмы главы в одном дружелюбном рисунке, поэтапно — и подводим итоги.

Что мы построим

Финальный мини-проект главы — и всего блока о Turtle. Соберём дружелюбное лицо из примитивов, которые мы разбирали на протяжении всей главы: заливка, точки, дуга.

smajlik.py
import turtle

screen = turtle.Screen()
screen.setup(width=340, height=340)
artist = turtle.Turtle()
artist.speed(0)

artist.penup()
artist.goto(0, -100)
artist.pendown()
artist.fillcolor("yellow")
artist.pencolor("#0D0230")
artist.pensize(2)
artist.begin_fill()
artist.circle(100)
artist.end_fill()

artist.penup()
artist.goto(-35, 35)
artist.pendown()
artist.dot(20, "black")
artist.penup()
artist.goto(35, 35)
artist.pendown()
artist.dot(20, "black")

artist.penup()
artist.goto(-45, -25)
artist.setheading(-60)
artist.pendown()
artist.pensize(4)
artist.circle(55, 120)

artist.hideturtle()

screen.exitonclick()
Результат выполнения
Жёлтый закрашенный круг с двумя чёрными точками-глазами и изогнутой улыбкой из толстой линии
Готовый результат: жёлтое лицо, два глаза и улыбка-дуга

Разложим лицо на примитивы

ДетальИз чего состоитИнструмент
Лицозакрашенная окружность радиусом 100fillcolor() + circle() + begin_fill()/end_fill()
Глазадве точкиdot()
Улыбкадуга окружности радиусом 60, extent 120°circle(radius, extent)

Координатный план

ДетальКоордината/угол
Левый глаз(-35, 120)
Правый глаз(35, 120)
Старт улыбки(-50, 60), курс -60°

Этап 1: лицо

smajlik_lico.py
import turtle

screen = turtle.Screen()
screen.setup(width=340, height=340)
artist = turtle.Turtle()
artist.speed(0)

# circle(100) центрирует круг в 100 px СЛЕВА от курса — стартуем на
# 100 ниже (0, -100), чтобы лицо встало ровно по центру окна (0, 0)
artist.penup()
artist.goto(0, -100)
artist.pendown()
artist.fillcolor("yellow")
artist.pencolor("#0D0230")
artist.pensize(2)
artist.begin_fill()
artist.circle(100)
artist.end_fill()

screen.exitonclick()
Результат выполнения
Жёлтый закрашенный круг без каких-либо деталей лица
Этап 1 — лицо: закрашенная окружность
smajlik_lico_kod.py
artist.fillcolor("yellow")
artist.pencolor("#0D0230")
artist.pensize(2)

artist.begin_fill()
artist.circle(100)
artist.end_fill()

Этап 2: глаза

smajlik_glaza.py
import turtle

screen = turtle.Screen()
screen.setup(width=340, height=340)
artist = turtle.Turtle()
artist.speed(0)

artist.penup()
artist.goto(0, -100)
artist.pendown()
artist.fillcolor("yellow")
artist.pencolor("#0D0230")
artist.pensize(2)
artist.begin_fill()
artist.circle(100)
artist.end_fill()

artist.penup()
artist.goto(-35, 35)
artist.pendown()
artist.dot(20, "black")
artist.penup()
artist.goto(35, 35)
artist.pendown()
artist.dot(20, "black")

screen.exitonclick()
Результат выполнения
Тот же жёлтый круг, теперь с двумя чёрными точками-глазами сверху
Этап 2 — добавляем глаза: две точки
smajlik_glaza_kod.py
artist.penup()
artist.goto(-35, 120)
artist.pendown()
artist.dot(20, "black")

artist.penup()
artist.goto(35, 120)
artist.pendown()
artist.dot(20, "black")

Этап 3: улыбка — и готово

smajlik_ulybka_kod.py
artist.penup()
artist.goto(-50, 60)
artist.setheading(-60)
artist.pendown()
artist.pensize(4)
artist.circle(60, 120)

artist.hideturtle()
smajlik.py
import turtle

screen = turtle.Screen()
screen.setup(width=340, height=340)
artist = turtle.Turtle()
artist.speed(0)

artist.penup()
artist.goto(0, -100)
artist.pendown()
artist.fillcolor("yellow")
artist.pencolor("#0D0230")
artist.pensize(2)
artist.begin_fill()
artist.circle(100)
artist.end_fill()

artist.penup()
artist.goto(-35, 35)
artist.pendown()
artist.dot(20, "black")
artist.penup()
artist.goto(35, 35)
artist.pendown()
artist.dot(20, "black")

artist.penup()
artist.goto(-45, -25)
artist.setheading(-60)
artist.pendown()
artist.pensize(4)
artist.circle(55, 120)

artist.hideturtle()

screen.exitonclick()
Результат выполнения
Жёлтый закрашенный круг с двумя чёрными точками-глазами и изогнутой улыбкой из толстой линии
Готовый результат: жёлтое лицо, два глаза и улыбка-дуга
★ Базовая практика
Другое настроение

Измените дугу улыбки на дугу нахмуренных бровей — переверните направление extent.

★★ Самостоятельная задача
Цветной смайлик

Смените fillcolor лица на любой другой цвет.

★★★ Задача повышенной сложности
Щёчки

Добавьте два маленьких розовых dot() под глазами — получатся румяные щёчки.

Практика: рисуем смайлик
Модуль turtle открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →

Итоги главы

Что мы узнали в этой главе

  • Окно, холст и координатный мир — три разные вещи, которые Turtle позволяет настраивать раздельно.
  • colormode(1.0) и colormode(255) — два способа записать один и тот же RGB-цвет.
  • pencolor() красит контур, fillcolor() — заливку; color() задаёт оба сразу.
  • speed() влияет только на анимацию, не на итоговую геометрию; tracer(0) + update() ускоряют сложную графику, рисуя её пакетом.
  • circle() рисует вписанный многоугольник — center находится слева от черепашки, знак радиуса определяет направление, а steps управляет числом сторон явно.
  • stamp() оставляет отпечаток формы без движения и без линии.
  • write() выводит текст с настраиваемым align и font, начиная от текущей позиции.
  • Несколько объектов turtle.Turtle() живут на одном экране независимо — у каждого своё состояние; clone() копирует стартовое состояние, а дальше объекты расходятся.
  • clear(), reset() и home() стирают и двигают разные комбинации рисунка и позиции.

Что дальше

Turtle-графика на этом не заканчивается насовсем — но дальше курс пойдёт в сторону новых инструментов языка. В главе 8 мы начнём работать с текстом по-настоящему — со строками и словами, которые до сих пор появлялись у нас только как подписи на экране.