You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

307 lines
12 KiB

---
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. Творческое задание: напишите две-три программы использующие максимальное количество полученной от статьи информации.