Turtle: инструмент для визуализации алгоритмов и разработки мини-игр
Библиотека Turtle: основы создания графики
Как нарисовать простейшую фигуру с помощью черепашки?
Библиотека Turtle предоставляет удобный способ рисования линий, фигур и создания анимации. Основной элемент - виртуальная черепаха, которая перемещается по экрану, оставляя след. Для начала требуется импортировать модуль, создать окно и получить объект черепахи. Пример ниже рисует квадрат со стороной 100 пикселей.
import turtle
window = turtle.Screen()
window.bgcolor("lightgray")
t = turtle.Turtle()
t.color("blue")
t.pensize(3)
for _ in range(4):
t.forward(100)
t.right(90)
turtle.done()Python библиотека turtle (библиотека turtle для python)
После запуска откроется окно с черепахой, которая нарисует синий квадрат. Команда turtle.done() удерживает окно открытым. Если её не вызвать, окно закрывается сразу после завершения скетча.
Цель данного решения - быстро познакомиться с командами перемещения (forward, backward), поворотов (right, left) и управления пером (pensize, color). Применяется в обучении алгоритмике и создании простых иллюстраций.
Как нарисовать спираль с изменением цвета?
Изменяя длину шага и угол поворота, можно получить спираль. Добавим смену цвета с помощью цикла и списка цветов.
import turtle
t = turtle.Turtle()
t.speed(0) # максимальная скорость
colors = ["red", "green", "blue", "orange", "purple"]
length = 10
for i in range(100):
t.color(colors[i % len(colors)])
t.forward(length)
t.right(91)
length += 1
turtle.done()Вариант используется для демонстрации циклов, динамических вычислений и работы со списками. Спирали хорошо смотрятся на экране и помогают понять принцип фракталов.
Как закрасить замкнутую область (заполнение)?
Для заливки фигуры используется команда begin_fill() и end_fill(). Пример рисует красный круг с жёлтой заливкой.
import turtle
t = turtle.Turtle()
t.pensize(2)
# жёлтый круг
c1 = turtle.Turtle()
c1.color("black", "yellow")
c1.begin_fill()
c1.circle(50)
c1.end_fill()
# красный квадрат поверх
c2 = turtle.Turtle()
c2.penup()
c2.goto(30, 0)
c2.pendown()
c2.color("blue", "red")
c2.begin_fill()
for _ in range(4):
c2.forward(80)
c2.right(90)
c2.end_fill()
turtle.done()Этот приём применяется для создания цветных диаграмм и графических композиций.
Как создать анимацию движения черепашки?
Можно анимировать перемещение объекта, изменяя его координаты в цикле и очищая экран. Пример - черепаха, движущаяся по синусоиде.
import turtle
import math
wn = turtle.Screen()
wn.tracer(0) # отключаем автоматическое обновление
t = turtle.Turtle()
t.shape("turtle")
t.penup()
x = -200
t.goto(x, 0)
t.pendown()
for x in range(-200, 200, 2):
y = 50 * math.sin(x / 30)
t.goto(x, y)
wn.update() # обновляем экран
turtle.done()Такой подход используется в учебных проектах по моделированию движения, создании простых игр или визуализации математических функций.
Расширенные примеры работы с Turtle
Фрактальное дерево
Рекурсивное рисование веток с уменьшением длины и поворотом.
import turtle
def draw_branch(branch_len, t):
if branch_len > 5:
t.forward(branch_len)
t.right(20)
draw_branch(branch_len - 15, t)
t.left(40)
draw_branch(branch_len - 15, t)
t.right(20)
t.backward(branch_len)
wn = turtle.Screen()
t = turtle.Turtle()
t.speed(0)
t.left(90)
t.penup()
t.goto(0, -200)
t.pendown()
draw_branch(80, t)
wn.mainloop()На экране появится симметричное дерево с ветвями, напоминающее настоящее.
Снежинка Коха
Фрактал на основе кривой Коха.
import turtle
def koch_curve(t, length, depth):
if depth == 0:
t.forward(length)
return
length /= 3
koch_curve(t, length, depth - 1)
t.left(60)
koch_curve(t, length, depth - 1)
t.right(120)
koch_curve(t, length, depth - 1)
t.left(60)
koch_curve(t, length, depth - 1)
wn = turtle.Screen()
t = turtle.Turtle()
t.speed(0)
t.penup()
t.goto(-150, 100)
t.pendown()
for _ in range(3):
koch_curve(t, 300, 3)
t.right(120)
wn.mainloop()Получается снежинка из трёх сегментов кривой Коха.
Рисование по щелчку мыши
Событийное программирование: черепаха рисует круг там, где пользователь кликнул.
import turtle
def draw_circle(x, y):
t.penup()
t.goto(x, y - 25)
t.pendown()
t.circle(25)
wn = turtle.Screen()
t = turtle.Turtle()
t.color("green")
t.pensize(2)
wn.onclick(draw_circle)
wn.mainloop()Каждый клик левой кнопкой мыши добавляет зелёный круг.
Анимация с использованием tracer и update
Плавное движение сразу нескольких черепашек.
import turtle
import random
wn = turtle.Screen()
wn.tracer(0)
colors = ["red", "blue", "green", "orange"]
turtles = []
for i, col in enumerate(colors):
t = turtle.Turtle()
t.color(col)
t.shape("circle")
t.penup()
t.goto(-200, i * 50 - 50)
turtles.append(t)
for _ in range(100):
for t in turtles:
t.forward(random.randint(1, 5))
wn.update()
wn.mainloop()Четыре круга разного цвета движутся вправо с разной скоростью.
Сохранение рисунка в векторный формат (SVG)
Turtle не поддерживает экспорт напрямую, но можно использовать модуль canvasvg или сохранить скриншот. Пример - преобразование в SVG через библиотеку svgwrite.
import turtle
import svgwrite
dwg = svgwrite.Drawing('drawing.svg', profile='tiny')
# Эмуляция команд turtle и запись в SVG - сложная задача.
# Вместо этого можно сделать скриншот окна с помощью PIL.
# Для простоты показан вызов библиотеки canvasvg (если установлена):
# import canvasvg
# canvasvg.saveall('drawing.svg', turtle.getscreen().getcanvas())Файл drawing.svg будет содержать векторное представление рисунка.