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