Python turtle: от простых линий до фрактальных узоров
Python turtle: учебное пособие по библиотеке для графики
Библиотека turtle в Python позволяет создавать векторную графику с помощью виртуальной «черепашки». Она особенно полезна для обучения программированию и создания простых рисунков. Основная идея - черепашка перемещается по экрану, оставляя след, управляемый командами.
Для начала работы нужно импортировать модуль и создать объект черепашки:
import turtle
t = turtle.Turtle()Python turtle (python turtle (черепашка))
После этого черепашка готова выполнять команды. Например, нарисовать квадрат:
for _ in range(4):
t.forward(100)
t.right(90)
Результат - квадрат со стороной 100 пикселей. Для завершения работы используется turtle.done().
Типичная ошибка:
Если окно с графикой закрывается сразу, добавьте turtle.exitonclick() или turtle.done() в конец программы. Без этого окно может пропасть после выполнения всех команд.
Еще одна проблема - команды не выполняются из-за того, что модуль не импортирован. Убедитесь, что в начале файла есть import turtle или from turtle import *. В некоторых средах (например, IDLE) может потребоваться отдельно установить модуль? Нет, turtle входит в стандартную библиотеку Python.
Как нарисовать окружность?
Для рисования окружности используется метод circle(r), где r - радиус.
t.circle(50)
Это нарисует окружность радиусом 50 пикселей. Можно задать угол дуги параметром extent:
t.circle(50, 180) # полуокружность
Как залить фигуру цветом?
Для заливки используется комбинация begin_fill() и end_fill().
t.fillcolor('red')
t.begin_fill()
for _ in range(4):
t.forward(100)
t.right(90)
t.end_fill()
Перед началом заливки можно выбрать цвет с помощью fillcolor() или pencolor() для контура.
Ошибка: заливка не применяется, если фигура не замкнута или пропущена команда begin_fill(). Убедитесь, что все сегменты составляют замкнутый контур.
Как создать несколько черепашек одновременно?
Можно создать несколько объектов Turtle, каждый со своими координатами и направлением.
t1 = turtle.Turtle()
t2 = turtle.Turtle()
t1.forward(100)
t2.left(90)
t2.forward(100)
Каждая черепашка рисует независимо. Для управления их движением параллельно используйте цикл с проверкой.
Цель: рисование сложных узоров или анимация.
Как сделать анимацию движения черепашки?
Библиотека работает в однопоточном режиме, но анимацию можно создать с помощью turtle.tracer(0) и turtle.update().
turtle.tracer(0)
for i in range(360):
t.forward(1)
t.right(1)
turtle.update()
turtle.done()
Это нарисует спираль, обновляя экран на каждом шаге. Без tracer(0) анимация была бы очень быстрой и не заметной.
Как реагировать на нажатия клавиш?
Используются методы onkey() и listen().
def move_forward():
t.forward(10)
turtle.onkey(move_forward, 'space')
turtle.listen()
turtle.done()
При нажатии на пробел черепашка продвинется на 10 пикселей. Для клавиш со стрелками используйте 'Up', 'Down' и т.д.
Важно: окно должно быть в фокусе, иначе события не обрабатываются. Также убедитесь, что listen() вызывается после всех назначений.
Как изменить форму черепашки?
Метод shape() позволяет выбрать форму из набора: 'turtle', 'circle', 'square', 'triangle', 'classic', 'arrow'.
t.shape('turtle')
Также можно создать пользовательскую форму через register_shape().
Общие проблемы и их решения:
- Окно не появляется: в некоторых средах (например, PyCharm) нужно добавить turtle.done() или turtle.mainloop().
- Черепашка не двигается: проверьте, что она не поднята (penup()).
- Графика зависает: используйте turtle.tracer(0) и периодический update().
- Импорт не найден: turtle - стандартный модуль, переустановите Python или проверьте, что файл не называется turtle.py.
Расширенные примеры с turtle
Ниже приведены нестандартные примеры, демонстрирующие возможности turtle.
Фрактальное дерево
import turtle
t = turtle.Turtle()
t.speed(0)
t.left(90)
t.penup()
t.backward(200)
t.pendown()
def tree(branch_len):
if branch_len < 10:
return
t.forward(branch_len)
t.left(30)
tree(branch_len * 0.7)
t.right(60)
tree(branch_len * 0.7)
t.left(30)
t.backward(branch_len)
tree(100)
turtle.done()
Результат:
На экране появляется рекурсивное дерево с тонкими ветвями, уменьшающимися с каждым уровнем.
Снежинка Коха
import turtle
t = turtle.Turtle()
t.speed(0)
t.penup()
t.goto(-150, 100)
t.pendown()
def koch(length, n):
if n == 0:
t.forward(length)
else:
koch(length/3, n-1)
t.left(60)
koch(length/3, n-1)
t.right(120)
koch(length/3, n-1)
t.left(60)
koch(length/3, n-1)
for _ in range(3):
koch(300, 3)
t.right(120)
turtle.done()
Результат:
Фрактальная снежинка из трёх кривых Коха. Уровень рекурсии можно увеличить (например, 4) для более детализированного узора.
Игра «Догонялки» с двумя черепашками
import turtle
import random
screen = turtle.Screen()
screen.bgcolor('lightblue')
screen.tracer(0)
player = turtle.Turtle()
player.shape('triangle')
player.color('blue')
player.penup()
enemy = turtle.Turtle()
enemy.shape('circle')
enemy.color('red')
enemy.penup()
def move_player(x, y):
player.goto(x, y)
screen.onclick(move_player)
while True:
enemy.goto(random.randint(-200,200), random.randint(-200,200))
screen.update()
# Задержка для анимации
import time
time.sleep(0.5)
Результат:
При клике мышкой синяя черепашка перемещается в точку клика, красная случайным образом прыгает. Это прототип игры на реакцию.
Рисование спирали Фибоначчи
import turtle
t = turtle.Turtle()
t.speed(0)
a, b = 0, 1
for i in range(10):
t.circle(b * 5, 90)
a, b = b, a + b
turtle.done()
Результат:
Спираль, построенная на числах Фибоначчи. Каждая дуга - четверть окружности с радиусом, равным следующему числу Фибоначчи.
Управление несколькими черепашками с клавиатуры
import turtle
screen = turtle.Screen()
t1 = turtle.Turtle()
t1.color('red')
t2 = turtle.Turtle()
t2.color('blue')
def move_t1_up():
t1.setheading(90)
t1.forward(10)
def move_t1_down():
t1.setheading(270)
t1.forward(10)
def move_t2_left():
t2.setheading(180)
t2.forward(10)
def move_t2_right():
t2.setheading(0)
t2.forward(10)
screen.onkey(move_t1_up, 'w')
screen.onkey(move_t1_down, 's')
screen.onkey(move_t2_left, 'a')
screen.onkey(move_t2_right, 'd')
screen.listen()
screen.mainloop()
Результат:
Две черепашки управляются разными клавишами: W/S - красная вверх/вниз, A/D - синяя влево/вправо.