Глава 12 · Множество увлекательных мини-проектов!

Проект: гонка Turtle с использованием циклов

Несколько черепашек на одном экране одновременно — и подведение итогов всей проектной лаборатории.

Используем
Turtlelistwhilerandom
Уровень
★★★★ challenge
Результат
графика Turtle

Что создаём

Помните из главы 6, что экран и черепашка — разные объекты, и черепашек может быть несколько? Настало время это использовать: гонка из нескольких черепашек со случайным шагом.

gonka_turtle.py
import turtle
import random

random.seed(2)
screen = turtle.Screen()
screen.setup(500, 400)

cveta = ["red", "blue", "green", "orange"]
uchastniki = []

for i, cvet in enumerate(cveta):
    t = turtle.Turtle()
    t.shape("turtle")
    t.color(cvet)
    t.penup()
    t.goto(-200, i * 40 - 60)
    uchastniki.append(t)

finish_line = 200
pobeditel = None

while pobeditel is None:
    for t in uchastniki:
        t.forward(random.randint(1, 10))
        if t.xcor() >= finish_line:
            pobeditel = t.pencolor()
            break

screen.exitonclick()
Результат выполнения
Четыре цветные черепашки Turtle на разных позициях в конце гонки
Четыре черепашки в момент завершения гонки (seed зафиксирован для документации)
gonka_turtle.py
import random

screen = turtle.Screen()
screen.setup(500, 400)

cveta = ["red", "blue", "green", "orange"]
uchastniki = []

for i, cvet in enumerate(cveta):
    t = turtle.Turtle()
    t.shape("turtle")
    t.color(cvet)
    t.penup()
    t.goto(-200, i * 40 - 60)
    uchastniki.append(t)

finish_line = 200
pobeditel = None

while pobeditel is None:
    for t in uchastniki:
        t.forward(random.randint(1, 10))
        if t.xcor() >= finish_line:
            pobeditel = t.pencolor()
            break

print(f"Победила черепашка цвета {pobeditel}!")
Список черепашек — тот же список из главы 11
uchastniki — обычный список Python (глава 11), просто хранящий не числа, а объекты turtle.Turtle(). Цикл for t in uchastniki перебирает его точно так же, как перебирал бы список чисел или строк.
★★★ Задача повышенной сложности
Финишная лента

Нарисуйте вертикальную линию на финише (x=200) перед началом гонки, используя отдельную черепашку-«судью».

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

Итоги главы

Что мы теперь умеем строить

Что мы теперь умеем строить
Текстовые программы
Анализатор текста и частота слов
Викторина
Консоль команд
Записная книжка
Угадай число, версия 3
Программы с данными
Журнал оценок
Корзина покупок
Проверка пароля
Графика
Студия многоугольников
Пиксельная графика по сетке
Спирали и сложная мандала
Рождественская ёлка
Гонка Turtle
16 проектов — и всё это работает на одних и тех же инструментах глав 1-11
Всё это питается одними и теми же инструментами глав 1-11
Строки
input(), split(), .lower()
форматирование f-строками
Числа
арифметика, округление
random
Условия
if / elif / else
булевы флаги
Циклы
for, while, break
счётчики, накопители
Коллекции
list, dict, set
список словарей
Turtle
формулы поворота
вложенные циклы → графика

Как далеко мы продвинулись

Глава 1Глава 12
print("Hello")интерактивная игра, анализатор текста, викторина, записная книжка, структурированные данные, графический генератор

Чек-лист готовности проекта

Полный чек-лист — в §12.2 «Строим проект по шагам». Перед тем как считать любой из 16 проектов главы законченным, полезно пройтись по нему ещё раз.

Что дальше: зачем нужны функции

Присмотритесь к проектам этой главы: нормализация ввода (.strip().lower()) повторяется в анализаторе текста, в консоли команд и в викторине. Накопитель, который нужно завести до цикла — та же самая ошибка чинилась трижды в разных Debug Lab. Формула угла поворота Turtle появляется и в ёлке, и в мандале, и в студии многоугольников.

Скоро мы это упростим
Сейчас, если один и тот же блок кода нужен в нескольких местах, его приходится копировать. В следующей главе — «Автоматизация с помощью функций» — мы научимся давать группе команд имя и использовать её многократно, не копируя код заново. Ничего из глав 1-12 при этом не устареет — функции просто дадут более аккуратный способ организовать то, что мы уже умеем писать.

Что мы закрепили в этой главе

  • Декомпозиция — разбиение большой задачи на маленькие понятные шаги.
  • Инкрементальная разработка — маленькими шагами, каждый сразу проверяется, а не 80 строк за раз.
  • Данные отдельно от алгоритма — викторина и студия многоугольников показали, что одна и та же логика работает для любых входных данных.
  • Рефакторинг — улучшение структуры программы без изменения её поведения.
  • Условия, циклы, строки, числа, random, списки/множества/словари и Turtle — впервые работали вместе, в одной программе, а не по отдельности.
  • Системный воркфлоу отладки: ожидание vs реальность → первое расхождение → причина → исправление.
  • Сложные результаты (викторина, анализатор текста, мандала) — всегда комбинация нескольких простых, уже знакомых приёмов.