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

Отладка графики

Более продвинутая графика добавляет новые, специфичные способы ошибиться — разберём их по схеме «симптом → причина → исправление».

Графика добавляет несколько новых, специфичных для более продвинутого Turtle способов что-то сделать не так — разберём их по схеме «симптом → причина → исправление».

СимптомПричинаИсправление
Окружность рисуется не в ту сторону, чем ожидалосьРадиус имеет не тот знак — положительный вместо отрицательного или наоборотПроверьте знак: положительный радиус — против часовой стрелки, отрицательный — по
Текст появился совсем не там, где ожидалосьЗабыли переместить черепашку через goto()/penup() перед write() — текст выводится от ТЕКУЩЕЙ позицииПереместитесь в нужную точку до вызова write()
Заливка не закрасилась, хотя fillcolor() был заданКонтур между begin_fill() и end_fill() не замкнулся — черепашка не вернулась в стартовую точкуПроверьте, что путь образует ЗАМКНУТУЮ фигуру — конец совпадает с началом
RGB-цвет вызывает ошибку вроде «недопустимое значение цвета»Числа не соответствуют текущему colormode — например, (255, 0, 0) при colormode(1.0)Сверьте числа с активным режимом — 0–255 или 0.0–1.0
Код выполняется без ошибок, но на экране совсем ничего не появилосьВызван screen.tracer(0), но забыт screen.update() — экран так и не обновился ни разуДобавьте screen.update() после всех команд рисования
На экране остался штамп, хотя казалось, что он должен был исчезнутьclearstamp() вызван с неверным id, либо id вообще не был сохранён при вызове stamp()Сохраняйте id каждого stamp() в переменную/список сразу при создании
Две черепашки двигаются одинаково, хотя должны были разойтисьОбе переменные на самом деле ссылаются на ОДНУ и ту же черепашку (например, bob = alice вместо bob = turtle.Turtle())Создавайте каждую черепашку отдельным вызовом turtle.Turtle() или через clone()
Курсор черепашки выглядит повёрнутым не в ту сторону, хотя движется верноСпутаны heading (направление движения) и tilt (визуальный поворот курсора) — они независимыheading меняют left()/right()/setheading(); внешний вид — только tilt()/tiltangle()
Часть рисунка не видна, хотя код точно её рисуетКоординаты вышли за пределы окна — оно не бесконечноеПроверьте screen.setup()/screensize() и держите координаты в пределах видимой области

tracer(0) без update() — разберём подробно

Это настолько частая и настолько незаметная ошибка, что заслуживает отдельного разбора. Программа выполняется полностью, без единой ошибки — но экран остаётся девственно пустым:

tracer_bug.py
screen.tracer(0)

for _ in range(4):
    artist.forward(100)
    artist.right(90)

# если здесь нет screen.update() — окно так и останется пустым!
Мысленная модель
tracer(0) — это не «выключить рисование», а «не показывать его на экране, пока не попросят». Рисование продолжает происходить по-настоящему, просто оно невидимо, пока не вызван update().
Практика: отладка графики (без Turtle)
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →