---
title: Библиотека Python Turtle 
excerpt: Графическая библиотека turtle 
date: '2023-11-08'
tags:
  - Информатика
  - Программирование
  - Python
  - Turtle
---

<TableOfContents>

- [Урок 1](#урок-1)
- [Урок 2](#урок-2)

</TableOfContents>

# Урок 1 

Модуль turtle - это графическая библиотека для работы с 2D-графикой в Python. Сначала его нужно подключить к скрипту.

```python
import turtle
```

После этого необходимо создать "перо" и записать ссылку на него в переменную

```python
import turtle
pen = turtle.Pen()
turtle.exitonclick() #Выход при нажатии мышкой в окне Turtle
```

Команда forward() чертит прямую линию. Она принимает в качестве аргумента длину линии в пикселях.

```python
import turtle
pen = turtle.Pen()

pen.forward(100) # Прямая линия длиной в 100 пикселей
```

Команда left() и right() поворачивает курсор. Они принимают в качестве аргумента угол поворота.
```python
import turtle
pen = turtle.Pen()

pen.forward(200) # Прямая линия длиной в 200 пикселей
pen.left(135) # Поворачиваем на 135 градусов влево

pen.forward(200) # Прямая линия длиной в 200 пикселей
pen.right(135) # Поворачиваем на 135 градусов вправо

pen.forward(200) # Прямая линия длиной в 200 пикселей
```

Мы можем перемещать перо без начертания линий. Для этого нужно сначала поднять перо с помощью команды penup(), затем переместить его в нужную точку с помощью команды setpos(x, y), где x и y - это координаты точки, в которую мы перемещаем наше перо. После всех проделанных манипуляций необходимо опустить перо с помощью команды pendown().

Подведем итог. Для того чтобы переместить перо в другую точку нужно:

1. Поднять перо с помощью команды penup()

2. Переместить перо в точку x, y (x и y - координаты в пикселях, вместо них подставляем числа) командой setpos(x, y)

3. Опустить перо в нужно точке с помощью команды pendown()
```python
import turtle
pen = turtle.Pen()

# Первая линия
pen.forward(200)
pen.penup()
pen.setpos(0, 20)
pen.pendown()

# Вторая линия
pen.forward(200)
pen.penup()
pen.setpos(0, 40)
pen.pendown()

# Третья линия
pen.forward(200)
pen.penup()
pen.setpos(0, 60)
pen.pendown()
```
Код, приведенный выше рисует три параллельных линии друг над другом.

С помощью команды color() мы можем изменить цвет линий

В команду color() нужно передать цвет

```python
import turtle
pen = turtle.Pen()
pen.color('red')

pen.forward(200)

pen.penup()
pen.setpos(0, 20)
pen.pendown()

pen.color('blue')

pen.forward(200)
```
Экспериментируйте! Вот доступные цвета:
* red
* blue
* green
* yellow
* orange
* purple
* pink
* violet
И еще много других цветов

Задачи

1. Нарисуйте квадрат

2. Нарисуйте квадрат, у которого каждая сторона имеет свой цвет

3. Нарисуйте треугольник

4. Разноцветный треугольник

5. Много-много параллельных линий

6. Проявите фантазию, создайте свое неповторимое произведение

# Урок 2

Несколько полезных методов для изменения внешнего вида:

Метод bgcolor получает в качестве аргумента строковую переменную и изменяет цвет фона окна

```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold') # Цвет фона будет золотым
```

Метод width изменяет толщину пера. Он принимает в качестве аргумента целое число.

```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5) # Толщина линий станет 5 пикселей
```

Методы pu и pd позволяют поднять и опустить перо. Они используются, когда нам нужно переместить перо с помощью метода setpos.
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.forward(100)
p.pu() # Подняли перо
p.setpos(-100, -100) # Переместили перо в точку с координатами (-100, -100)
p.pd() # Опустили перо
```

Метод cirle рисует окружность. Он принимает в качестве аргумента целое число - радиус окружности в пикселях.
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
p.circle(100) # Окружность с радиусом 100 пикселей
```

Циклы и рисование фигур
В прошлой статье мы рисовали квадрат с помощью последовательного перечисления операций. Это совсем неудобно. Есть способ сократить этот код. Для полного понимания прочтите статью про цикл for.
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
for i in range(4): # ОБРАТИТЕ ВНИМАНИЕ, КОМАНДА НА СЛЕДУЮЩЕЙ СТРОЧКЕ ПОСЛЕ
    p.forward(100) # ДВОЕТОЧИЯ ИМЕЕТ ОТСТУП В ЧЕТЫРЕ ПРОБЕЛА
    p.left(90)
```
В примере, приведенном выше я использовал цикл for для повторения двух команд четыре раза. Давайте нарисуем пятиугольник. Я добавлю дополнительную переменную в наш код, в которой буду сохранять количество сторон
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 5 # Количество сторон
for i in range(number_sides): # Повторяем 5 раз
    p.forward(100)
    p.left(360 / number_sides) # Делаем поворот черепашки на 72 градуса
```
Таким образом, мы можем нарисовать пятиугольник. Изменив всего одну переменную, получаем шестиугольник
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 6 # Поменяли на 6
for i in range(number_sides):
    p.forward(100)
    p.left(360 / number_sides)
```
Поэкспериментируйте

Вложенные циклы
Мы можем выполнять один цикл в другом, например, нарисовать треугольник с тремя внешними треугольниками:
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 3 # Поменяли на 6
for i in range(number_sides):
    p.forward(100)
    p.left(360 / number_sides)
    for i in range(number_sides): # ОБРАТИТЕ ВНИМАНИЕ, КОМАНДА НА СЛЕДУЮЩЕЙ СТРОЧКЕ ИМЕЕТ
        p.forward(50) # ОТСТУП В ЧЕТЫРЕ ПРОБЕЛА
        p.right(360 / number_sides)
```
Треугольник с квадратами:
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 3 # Поменяли на 6
for i in range(number_sides):
    p.forward(100)
    p.right(360 / number_sides)
    for i in range(4): # Меняем number_sides на 4
        p.forward(50)
        p.right(360 / 4) # Меняем number_sides на 4
```
Больше вложенных циклов!!!!
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 3 # Поменяли на 6
for i in range(number_sides):
    p.forward(100)
    p.left(360 / number_sides)
    for i in range(number_sides):
        p.forward(50)
        p.right(360 / number_sides)
        for i in range(number_sides):
            p.forward(20)
            p.right(360 / number_sides)
```
Прием количества сторон от пользователя:
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = int(input()) # Приняли число от пользователя
for i in range(number_sides): # ОБРАТИТЕ ВНИМАНИЕ, КОМАНДА НА СЛЕДУЮЩЕЙ СТРОЧКЕ ПОСЛЕ
    p.forward(100) # ДВОЕТОЧИЯ ИМЕЕТ ОТСТУП В ЧЕТЫРЕ ПРОБЕЛА
    p.left(360 / number_sides)
```
Задаем позиции для квадратиков:
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
squares = int(input('Введите количество квадратиков: ')) # Приняли число от пользователя
for i in range(squares): # Делаем цикл для рисования каждого квадрата
    x = int(input('Введите координату х: '))
    y = int(input('Введите координату y: '))
    p.pu()
    p.setpos(x,y)
    p.pd()
    for k in range(4): # ОБРАТИТЕ ВНИМАНИЕ, КОМАНДА НА СЛЕДУЮЩЕЙ СТРОЧКЕ ПОСЛЕ
        p.forward(100) # ДВОЕТОЧИЯ ИМЕЕТ ОТСТУП В ЧЕТЫРЕ ПРОБЕЛА
        p.left(90)
```

Задачи
1. Напишите программу, которая принимает от пользователя длину стороны квадрата и рисует его

2. Напишите программу, которая рисует 5 разноцветных треугольников в различных местах окна (использовать перенос пера с помощью pu, setpos, pd)

3. Напишите программу, которая принимает от пользователя количество кругов для отрисовки и рисует эти круги в разных местах окна

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

5. Напишите программу, которая принимает количество сторон многоугольника, длину стороны многоугольника и его позицию и рисует его.

6. Творческое задание: напишите две-три программы использующие максимальное количество полученной от статьи информации.