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

Мини-проект — координатная мишень

Настоящая маленькая инфографика — мишень, оси, случайные точки и подпись, собранные из уже знакомых инструментов.

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

koordinatnaya_mishen.py
import turtle
import random

random.seed(4)
screen = turtle.Screen()
screen.setup(width=420, height=420)
artist = turtle.Turtle()
artist.speed(0)
artist.hideturtle()

rings = [(140, "#DC2626"), (100, "#FAFAFC"), (60, "#DC2626"), (20, "#FAFAFC")]
for radius, color in rings:
    artist.penup()
    artist.goto(0, -radius)
    artist.pendown()
    artist.fillcolor(color)
    artist.pencolor("#0D0230")
    artist.begin_fill()
    artist.circle(radius)
    artist.end_fill()

artist.penup()
artist.goto(-160, 0)
artist.pendown()
artist.goto(160, 0)
artist.penup()
artist.goto(0, -160)
artist.pendown()
artist.goto(0, 160)

artist.penup()
for _ in range(6):
    x = random.randint(-120, 120)
    y = random.randint(-120, 120)
    artist.goto(x, y)
    artist.dot(10, "#059669")

artist.goto(-190, 170)
artist.write("Координатная мишень", font=("Arial", 13, "bold"))

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

Полноценная небольшая инфографика — не просто мишень, а мишень С осями координат, точками «попаданий» и подписью. Соберём её из того, что уже знаем: концентрические окружности с заливкой, оси через goto(), случайные точки из главы 6 и подпись через write().

Разложим на слои

СлойИз чего состоитЧто уже знакомо
Кольца мишени4 закрашенные окружности убывающего радиусаbegin_fill()/circle()/end_fill()
Перекрестьедве линии через центрgoto() из главы 6
Точки попаданийслучайные координатыrandom + dot() из главы 6
Подписьтекст в углуwrite() из этой главы

Код целиком

koordinatnaya_mishen_kod.py
import random

random.seed(4)   # фиксированный seed — точки одинаковые при каждом запуске

# кольца мишени
rings = [(140, "#DC2626"), (100, "#FAFAFC"), (60, "#DC2626"), (20, "#FAFAFC")]
for radius, color in rings:
    artist.penup()
    artist.goto(0, -radius)
    artist.pendown()
    artist.fillcolor(color)
    artist.begin_fill()
    artist.circle(radius)
    artist.end_fill()

# перекрестье осей
artist.penup(); artist.goto(-160, 0); artist.pendown(); artist.goto(160, 0)
artist.penup(); artist.goto(0, -160); artist.pendown(); artist.goto(0, 160)

# случайные точки попаданий
artist.penup()
for _ in range(6):
    x = random.randint(-120, 120)
    y = random.randint(-120, 120)
    artist.goto(x, y)
    artist.dot(10, "#059669")

# подпись
artist.goto(-190, 170)
artist.write("Координатная мишень", font=("Arial", 13, "bold"))
Почему random.seed(4)
Как и в главе 6, фиксированный seed делает картинку воспроизводимой — при каждом запуске точки окажутся ровно там же. Уберите эту строку, чтобы получить новый набор точек при каждом запуске.
★★ Самостоятельная задача
Подпись координат

Рядом с каждой точкой попадания добавьте write() с её координатами.

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

Посчитайте (напечатайте в консоль), сколько случайных точек попало в центральное красное кольцо (радиус < 60) — потребуется формула расстояния из главы 5.

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