Модуль 2 · Неделя 2

Знакомство с черепашкой

4 урока. Первые шаги черепашки, квадрат и цикл, координаты, углы поворота.

Урок 1.Что такое черепашка

Черепашка (turtle) — это исполнитель, который действует в окне Python. Когда ты даёшь ей команды — она идёт, поворачивается, рисует. Всё, что она прошла, остаётся линией на экране. Получается рисунок, который наглядно показывает, что сделано, а что нет. Это отличный способ увидеть результат своей программы сразу. Не надо думать про числа и переменные — просто говоришь «иди вперёд», и она идёт.

Как её вызвать

Черепашка живёт в отдельном модуле — наборе готовых команд. Чтобы её использовать, нужно сначала импортировать модуль:

import turtle

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

t = turtle.Turtle()

Здесь t — это имя нашей черепашки. Можно назвать как угодно: bob, turtle1, artist — но t короче и удобнее. В большинстве программ мы будем использовать это краткое t.

Первая линия

Простейшая, но совершенно законченная программа выглядит так:

import turtle

t = turtle.Turtle()
t.forward(100)

turtle.done()

Что происходит:

  1. Подключаем модуль turtle.
  2. Создаём черепашку и называем её t.
  3. Говорим: «иди вперёд на 100 шагов».
  4. turtle.done() — «не закрывай окно, пока я сам его не закрою».

На экране появится окно, а в нём — черепашка (маленькая стрелочка), которая прошла вперёд и оставила за собой линию.

Важно: без turtle.done() окно закроется мгновенно, и ты ничего не увидишь. Поэтому в конце каждой программы с черепашкой добавляй эту команду.

Движение: forward и backward

  • t.forward(100) — идти вперёд на 100 шагов.
  • t.backward(50) — идти назад на 50 шагов.

Число в скобках — это сколько шагов пройти. Можно любое: 10, 200, 500.

import turtle

t = turtle.Turtle()
t.forward(100)
t.backward(50)
t.forward(30)

turtle.done()

Каждая команда — новый отрезок линии.

Повороты: right и left

Черепашка умеет поворачиваться не сходя с места:

  • t.right(90) — повернуться направо на 90 градусов.
  • t.left(45) — повернуться налево на 45 градусов.

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

import turtle

t = turtle.Turtle()
t.forward(100)
t.right(90)
t.forward(100)

turtle.done()

Здесь черепашка прошла вперёд, повернула направо и прошла ещё столько же. Получился прямой угол.

А теперь попробуй сам. Нарисуй букву «Т»: вертикальная линия и горизонтальная сверху. Подсказка: начни с горизонтальной линии, потом вернись в середину и проведи вертикальную.
↑ К содержанию недели

Урок 2.Квадрат и цикл. Перо. Скорость

Квадрат

Соединим движение и повороты — нарисуем квадрат:

import turtle

t = turtle.Turtle()

t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)
t.forward(100)
t.right(90)

turtle.done()

Четыре стороны, четыре поворота. Работает, но код длинный и повторяется. Обрати внимание: программа выполняет 4 одинаковых действия. Поэтому целесообразно использовать цикл, чтобы свернуть программу:

import turtle

t = turtle.Turtle()

# рисуем квадрат со стороной 60
for _ in range(4):
    t.forward(60)
    t.right(90)

turtle.done()

Что такое for _ in range(4) — мы разберём подробно в следующих уроках. Пока просто запомни: это «повтори 4 раза то, что внутри». Символ _ — это просто имя переменной, которое нам не нужно.

Перо: поднять и опустить

Черепашка всегда что-то рисует, когда идёт. Но иногда нужно перейти на другое место, не оставляя линии — например, чтобы нарисовать две отдельные фигуры.

Для этого есть две команды:

  • t.penup() — поднять перо. Черепашка идёт, но не рисует.
  • t.pendown() — опустить перо. Черепашка снова рисует.

По умолчанию перо опущено. То есть черепашка начинает рисовать сразу, как только ты её создал.

import turtle

t = turtle.Turtle()
t.forward(100)      # линия
t.penup()
t.forward(50)       # черепашка переместилась без линии
t.pendown()
t.forward(100)      # снова линия

turtle.done()

Скорость

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

t.speed(0)     # максимальная скорость
t.speed(5)     # средняя
t.speed(1)     # медленная

Числа от 0 до 10: 0 — мгновенно, 10 — быстро, 1 — очень медленно. Для длинных рисунков ставь speed(0), иначе можно заскучать.

Полная программа

Соберём всё вместе — нарисуем несколько многоугольников в ряд:

import turtle

t = turtle.Turtle()
t.speed(3)

t.penup()
t.forward(250)
t.left(180)
t.pendown()

for i in range(3, 7):
    # рисуем многоугольник с i сторонами
    for _ in range(i):
        t.forward(60)
        t.right(360 / i)

    t.penup()
    t.forward(120)
    t.pendown()

turtle.done()

Внешний цикл идёт по числу сторон: 3, 4, 5, 6. Внутренний — рисует сам многоугольник. Угол поворота считается по формуле 360 / i.

А теперь попробуй сам.

Задание 1. Измени программу так, чтобы она рисовала не справа налево, а слева направо.

Задание 2. Расположи треугольник, квадрат, пяти- и шестиугольник по углам окна вывода.

Задание 3. Поэкспериментируй: поставь t.speed(0) и нарисуй квадрат со стороной 200. Потом поставь t.speed(1) и нарисуй такой же. Почувствуй разницу.
↑ К содержанию недели

Урок 3.Координаты и черепашка

Как объяснить, где что находится?

Представь, что ты играешь в морской бой. Ты говоришь: «Б5». И соперник сразу понимает, куда стрелять. Почему? Потому что Б — это буква столбца, а 5 — номер строки. Два знака — и место найдено точно. Или представь, что ты в кинотеатре. «Ряд 7, место 12». Опять два числа — и ты точно знаешь, где сидеть.

Вот это и есть координаты — способ точно указать место с помощью чисел. Не «где-то там справа», а «вот здесь, конкретно».

Две оси

Чтобы задать координаты, нужно две линии — оси. Одна идёт слева направо (горизонтальная), вторая — снизу вверх (вертикальная). Они пересекаются в одной точке — начале координат.

Горизонтальная ось называется X (икс). Вертикальная — Y (игрек).

Запомнить легко: X — «вдоль земли», Y — «вверх-вниз».

Координаты пишут в скобках, через запятую: сначала X, потом Y.

(X, Y)

Первое число — насколько далеко вправо или влево. Второе — насколько высоко или низко.

Четыре направления

Центр — это точка (0, 0).

  • Вправо — X положительный: (5, 0).
  • Влево — X отрицательный: (-5, 0).
  • Вверх — Y положительный: (0, 5).
  • Вниз — Y отрицательный: (0, -5).

Если оба числа не ноль, точка уходит в сторону:

  • (3, 2) — 3 вправо, 2 вверх.
  • (-4, 1) — 4 влево, 1 вверх.
  • (2, -5) — 2 вправо, 5 вниз.
  • (-3, -3) — 3 влево, 3 вниз.

Первое число — по горизонтали, второе — по вертикали. Всегда в этом порядке.

Теперь черепашка

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

Центр окна — это (0, 0). Ось X идёт вправо, ось Y — вверх. Всё как на листе бумаги.

И черепашка знает, где она находится. Когда ты её создаёшь, она стоит ровно в центре — в точке (0, 0) — и смотрит вправо.

Прыжок в точку: goto

До сих пор мы двигали черепашку командами «вперёд» и «повернись». Но теперь, когда мы знаем координаты, можно сказать ей: «прыгни вот сюда».

Для этого есть команда goto(x, y):

import turtle

t = turtle.Turtle()
t.goto(100, 100)

turtle.done()

Черепашка пройдёт из текущего места в точку (100, 100) и нарисует линию. Если перо поднято — просто переместится, без линии.

import turtle

t = turtle.Turtle()
t.penup()
t.goto(-100, 50)
t.pendown()
t.forward(100)

turtle.done()

Так можно расставлять черепашку в нужные места, не думая о поворотах.

Где сейчас черепашка?

Черепашка умеет отвечать на вопрос «ты где?». Для этого есть две команды:

print(t.xcor())   # координата X
print(t.ycor())   # координата Y
import turtle

t = turtle.Turtle()
print("Старт:", t.xcor(), t.ycor())

t.goto(50, 30)
print("После goto:", t.xcor(), t.ycor())

turtle.done()

Рисуем по координатам

Теперь можно нарисовать фигуру, не думая о поворотах, — просто перечисляя точки:

import turtle

t = turtle.Turtle()

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

turtle.done()

Черепашка пройдёт по углам квадрата и вернётся в центр. Ни одного поворота — только точки.

Соединяем со старым

goto отлично работает вместе с penup() и pendown():

import turtle

t = turtle.Turtle()
t.speed(0)

# квадрат
t.goto(50, 50)
t.goto(100, 50)
t.goto(100, 100)
t.goto(50, 100)
t.goto(50, 50)

# перепрыгнули в другое место
t.penup()
t.goto(-100, -50)
t.pendown()

# ещё квадрат
t.goto(-50, -50)
t.goto(-50, 0)
t.goto(-100, 0)
t.goto(-100, -50)

turtle.done()

Два квадрата в разных местах — и ни одного поворота.

Одна тонкость

Когда черепашка идёт через goto, она не поворачивается в сторону движения. Она просто «скользит» в точку, оставаясь смотреть туда же, куда смотрела. Иногда это выглядит забавно — как будто черепашка едет боком.

Если хочется, чтобы она именно повернулась и пошла, — это уже другой подход, через forward и right. Но для рисования фигур по точкам goto удобнее.

А теперь попробуй сам.

Задание 1. Нарисуй с помощью goto прямоугольник с углами в точках (0, 0), (150, 0), (150, 80), (0, 80).

Задание 2. Нарисуй треугольник с углами (-50, -50), (50, -50), (0, 50).

Задание 3. Нарисуй две отдельные фигуры: квадрат в левой части окна и треугольник в правой. Используй penup() и goto(), чтобы перейти между ними.

Задание 4. Нарисуй домик: квадрат-основание и треугольник-крыша сверху.

Задание 5. Проверь, где оказалась черепашка после задания 1. Выведи её координаты через t.xcor() и t.ycor().
↑ К содержанию недели

Урок 4.Угол поворота

Откуда отсчитывается угол?

Мы уже знаем, что у окна черепашки есть оси X и Y. Так вот, угол поворота отсчитывается от оси X, то есть от направления вправо. И не по часовой стрелке, а против часовой.

Запомни главное:

  • 0° — черепашка смотрит вправо (на восток).
  • 90° — вверх (на север).
  • 180° — влево (на запад).
  • 270° — вниз (на юг).

Это как компас, только 0° — не север, а восток. Непривычно, но так устроена черепашка.

Как узнать, куда смотрит черепашка?

Есть команда heading() — она возвращает текущий угол:

import turtle

t = turtle.Turtle()
print("Старт:", t.heading())

t.right(90)
print("После right(90):", t.heading())

t.left(45)
print("После left(45):", t.heading())

turtle.done()

Обрати внимание: right(90) уменьшает угол (0° → 270°), потому что поворот по часовой стрелке. А left(90) — увеличивает (0° → 90°).

Как установить угол?

Вместо того чтобы поворачиваться на относительный угол, можно сказать черепашке: «смотри ровно туда». Для этого есть команда setheading() (или коротко seth()):

import turtle

t = turtle.Turtle()
t.speed(0)

for angle in [0, 90, 180, 270]:
    t.setheading(angle)
    t.forward(80)
    t.backward(80)

turtle.done()

Это абсолютный угол. Не «повернись на 90° от текущего», а «встань ровно на 90°».

Четыре главных направления

Вот таблица, которая всегда под рукой:

t.setheading(0)     # вправо →
t.setheading(90)    # вверх ↑
t.setheading(180)   # влево ←
t.setheading(270)   # вниз ↓

Можно использовать и t.setheading(-90) — это то же самое, что 270°. Минус означает «по часовой стрелке от нуля».

Произвольные углы

Можно ставить любой угол, не только 0, 90, 180, 270:

import turtle

t = turtle.Turtle()
t.speed(0)

for angle in [0, 45, 90, 135, 180, 225, 270, 315]:
    t.setheading(angle)
    t.forward(100)
    t.backward(100)

turtle.done()

Восемь лучей — во все стороны, через каждые 45°. Обрати внимание: backward возвращает черепашку в центр, не меняя угол.

Связь с right() и left()

Важно понять разницу:

  • right(90) — «повернись на 90° по часовой стрелке от того, где стоишь». Угол меняется относительно.
  • setheading(90) — «встань на угол 90° абсолютно». Неважно, где ты был до этого.
t.setheading(0)     # смотрим вправо
t.right(90)         # теперь смотрим вниз (270°)
t.setheading(90)    # а теперь смотрим вверх (90°)

setheading всегда перезаписывает угол, а right и left — прибавляют или отнимают.

Поворот к точке: towards()

Если черепашка стоит в одном месте, а тебе нужно, чтобы она посмотрела на другую точку, есть команда towards(x, y). Она возвращает угол, под которым находится эта точка:

t.setheading(t.towards(100, 100))

Теперь черепашка смотрит точно на точку (100, 100).

Пример: стрелка

import turtle

t = turtle.Turtle()
t.speed(3)

# рисуем стрелку, которая смотрит вверх
t.setheading(90)      # смотрим вверх
t.forward(100)        # линия вверх

# теперь рисуем наконечник
t.setheading(-135)     # влево-вниз
t.forward(30)
t.penup()
t.goto(0, 100)        # возвращаемся к кончику
t.pendown()
t.setheading(-45)      # вправо-вниз
t.forward(30)

turtle.done()

Одна тонкость

Если угол больше 360° — ничего страшного. setheading(450) — это то же самое, что setheading(90), потому что 450 − 360 = 90. Черепашка просто сделает полный оборот и встанет на 90°.

И ещё: heading() возвращает угол всегда в диапазоне от 0 до 360. Даже если ты повернул на -90°, она покажет 270°.

А теперь попробуй сам.

Задание 1. Поставь черепашку в центр. Установи угол 90° и пройди 100 шагов. Потом установи 180° и пройди 100 шагов. Потом 270° и 0°. Что получилось?

Задание 2. Напиши программу, которая выводит угол черепашки после каждого поворота. Поверни её на 45° влево, выведи угол через heading(), поверни ещё на 45° влево, снова выведи. И так далее, пока не сделаешь полный круг.

Задание 3. Нарисуй простую снежинку: шесть лучей через каждые 60°. Подсказка: используй setheading(0), setheading(60), setheading(120) и так далее.

Задание 4. Нарисуй стрелку, которая смотрит влево. Используй setheading(180).

Задание 5. Поставь черепашку в точку (50, 50) через goto. Затем установи угол так, чтобы она смотрела на центр (0, 0). Подсказка: используй t.setheading(t.towards(0, 0)).
↑ К содержанию недели