--- title: Библиотека Python Turtle excerpt: Графическая библиотека turtle date: '2023-11-08' tags: - Информатика - Программирование - Python - Turtle --- - [Урок 1](#урок-1) - [Урок 2](#урок-2) # Урок 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. Творческое задание: напишите две-три программы использующие максимальное количество полученной от статьи информации.