Глава 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()
Результат выполнения
Разложим лицо на примитивы
| Деталь | Из чего состоит | Инструмент |
|---|---|---|
| Лицо | закрашенная окружность радиусом 100 | fillcolor() + 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()
Результат выполнения
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()
Результат выполнения
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 мы начнём работать с текстом по-настоящему — со строками и словами, которые до сих пор появлялись у нас только как подписи на экране.