Python Turtle: примеры и решения для графической библиотеки

Раздел: Библиотеки -> Turtle графика

Основные команды Turtle

Библиотека turtle в Python позволяет создавать графические изображения с помощью простых команд. Ниже приведены основные приемы с примерами кода и разбором типичных ошибок.

Как нарисовать квадрат?

Наиболее эффективное решение - использование цикла for с поворотом на 90 градусов.

import turtle
t = turtle.Turtle()
for _ in range(4):
    t.forward(100)
    t.right(90)

Python turtle screen (работа с экраном в модуле turtle python)

Рисуется квадрат со стороной 100 пикселей.

Python turtle codes (коды для turtle в python)

Типичная ошибка: неправильный угол поворота (например, 180) приводит к возврату. Решение: использовать 90 градусов для квадрата.

Вариант с goto

t.penup()
t.goto(0,0)
t.pendown()
t.goto(100,0)
t.goto(100,100)
t.goto(0,100)
t.goto(0,0)

Turtle python goto (команда goto в модуле turtle python)

Подходит для точного позиционирования углов, но менее гибкий при изменении размера.

Вариант с параметром размера

def square(size):
    for _ in range(4):
        t.forward(size)
        t.right(90)
square(150)

графика turtle python (рисование с помощью модуля turtle в python)

Позволяет многократно использовать код для разных размеров.

Как нарисовать окружность?

Команда circle(r) рисует окружность заданного радиуса.

t.circle(50)

Python turtle точки (рисование точек с помощью turtle в python)

Окружность радиусом 50 пикселей.

Python turtle фигуры (какие фигуры можно нарисовать с помощью turtle в python)

Проблема: если не задан радиус, возникает ошибка. Решение: всегда указывать радиус.

Вариант с дугой

t.circle(50, 180)

Python turtle colors (цвета в модуле turtle python)

Рисуется полуокружность (дуга в 180 градусов).

Вариант через многоугольник

import math
def circle_poly(r, n=36):
    step = 2*math.pi*r/n
    angle = 360/n
    for _ in range(n):
        t.forward(step)
        t.right(angle)
circle_poly(50)

Turtle library python (основы работы с turtle)

Аппроксимация окружности многоугольником, полезна для понимания геометрии.

Как закрасить фигуру?

Используются команды begin_fill() и end_fill(). Перед рисованием указывается цвет заливки fillcolor().

t.fillcolor('blue')
t.begin_fill()
for _ in range(4):
    t.forward(100)
    t.right(90)
t.end_fill()
Синий квадрат.
Частая ошибка: begin_fill() без end_fill() оставляет фигуру незакрашенной. Решение: всегда закрывать блок.

Вариант с градиентом

t.fillcolor((0.2,0.5,0.8))  # RGB от 0 до 1
import turtle
screen = turtle.Screen()
screen.colormode(255)
t.fillcolor(50, 100, 200)

Можно задавать цвет в разных форматах.

Как изменить скорость рисования?

Команда speed() принимает значение от 1 (медленно) до 10 (быстро), 0 - максимальная скорость.

t.speed(10)
Проблема: speed(0) не отключает анимацию полностью, а только ускоряет. Для скрытия процесса используется tracer.

Вариант с tracer

screen = turtle.Screen()
screen.tracer(0)
# рисование
screen.update()

Позволяет выводить готовое изображение мгновенно, полезно для сложных рисунков.

Как реагировать на нажатия клавиш?

События клавиатуры обрабатываются с помощью listen() и onkey().

def move_forward():
    t.forward(10)
screen = turtle.Screen()
screen.listen()
screen.onkey(move_forward, 'Up')
При нажатии стрелки вверх черепаха движется вперед.
Ошибка: функция не вызывается, если не вызвать listen(). Решение: обязательно добавить screen.listen().

Вариант с несколькими клавишами

def turn_left():
    t.left(15)
def turn_right():
    t.right(15)
screen.onkey(turn_left, 'Left')
screen.onkey(turn_right, 'Right')

Позволяет управлять черепахой с клавиатуры.

Как нарисовать звезду?

Пятиконечная звезда получается поворотом на 144 градуса.

for _ in range(5):
    t.forward(100)
    t.right(144)
Пятиконечная звезда.
Ошибка: если угол 120, получается шестиугольник. Решение: для звезды использовать 144.

Вариант с разными углами

for _ in range(5):
    t.forward(100)
    t.left(72)  # также даёт звезду

Направление поворота (влево/вправо) меняет ориентацию.

Продвинутые проекты с Turtle

Фрактальное дерево

Рекурсивное рисование ветвящегося дерева. Каждая ветвь делится на две более короткие с поворотом.

Пример
import turtle
t = turtle.Turtle()
t.speed(0)
t.left(90)

def tree(branch_len):
    if branch_len < 5:
        return
    t.forward(branch_len)
    t.right(20)
    tree(branch_len - 15)
    t.left(40)
    tree(branch_len - 15)
    t.right(20)
    t.backward(branch_len)

tree(75)
t.hideturtle()
Рисуется симметричное дерево с ветвями, уменьшающимися в длину.
Проблема: бесконечная рекурсия при неверном условии остановки. Решение: задать минимальную длину ветви.

Анимация с мерцающими звездами

Использование tracer для управления частотой обновления экрана и создания эффекта мерцания.

Пример
import turtle, random
screen = turtle.Screen()
screen.bgcolor('black')
screen.tracer(0)
stars = []
for _ in range(20):
    star = turtle.Turtle()
    star.shape('circle')
    star.color('yellow')
    star.penup()
    star.goto(random.randint(-300,300), random.randint(-300,300))
    stars.append(star)

while True:
    for star in stars:
        star.shapesize(random.uniform(0.5, 2))
    screen.update()
    screen.ontimer(lambda: None, 500)
На черном фоне мерцают звезды разного размера.
Ошибка: бесконечный цикл блокирует программу. Решение: добавить условие выхода или использовать ontimer.

Спираль Архимеда

Спираль строится увеличением длины шага с каждым поворотом.

Пример
t.speed(0)
for i in range(200):
    t.forward(i * 0.1)
    t.right(15)
Раскручивающаяся спираль.

Снежинка Коха

Фрактал, получаемый заменой каждого отрезка на ломаную из четырёх отрезков.

Пример
def koch(length, depth):
    if depth == 0:
        t.forward(length)
    else:
        for angle in [60, -120, 60, 0]:
            koch(length/3, depth-1)
            t.left(angle)

for _ in range(3):
    koch(300, 3)
    t.right(120)
Треугольная снежинка с фрактальными краями.
Ошибка: глубина рекурсии слишком велика - зависание. Решение: начинать с глубины 1-3.

Коды для turtle в Python - comments

En
Python turtle codes (python)