Python 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)
Вариант с 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()Синий квадрат.
Вариант с градиентом
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)Вариант с 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')При нажатии стрелки вверх черепаха движется вперед.
Вариант с несколькими клавишами
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)Пятиконечная звезда.
Вариант с разными углами
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)На черном фоне мерцают звезды разного размера.
Спираль Архимеда
Спираль строится увеличением длины шага с каждым поворотом.
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)Треугольная снежинка с фрактальными краями.