§19. Изучение и изменение готовых программ

19.1. Дополнительные команды Черепахи

При рисовании Черепаха может изменять цвет линий и заливать нарисованные фигуры. Для этого используются команды color (х) и fillcolor (х) соответственно. Вместо переменной х нужно указать значение цвета. Его можно задавать с помощью английских названий цветов, которые записываются в кавычках. Этот способ определен по умолчанию. Если нужно задать цвет числовыми значениями, то можно изменить режим ввода цвета с помощью команды colormode (255). Посмотреть эти значения можно в графическом редакторе Paint. Для обратной смены режима ввода цвета используется команда colormode (1.0).
Для задания цвета линий и цвета заливки можно использовать две разные команды или одну с двумя параметрами: color (х, у). Первый параметр х определит цвет линии, а второй у — цвет заливки. В примере 19.1 показаны разные способы задания цвета и смены режима отображения цветов. Посмотреть текстовые и числовые значения цветовых констант можно в дополнительных материалах.
Кроме команд, которые были рассмотрены в предыдущем параграфе, у исполнителя Черепаха есть и другие. В таблице приведены возможные команды исполнителя Черепаха.

Команда Действие
pensize(x) Изменить цвет линии, которую рисует Черепаха
begin_fill() Команда прописывается перед командами рисования фигуры
end_fill() Залить фигуру, которая нарисована с помощью команд, расположенных между begin_fill() и end_fill()
circle(r)
Нарисовать окружность радиуса r
setpos(x, y)
Переместить Черепаху в точку с координатами (x,y)
setheading(x)
Задать направление движения Черепахи
setup(w,h)
Изменить размеры окна Черепахи: w – ширина окна, h – высота окна
towards(x, y)
Получить угол между текущим направлением Черепахи и прямой от Черепахи к точке (x,y)
distance(x, y)
Получить расстояние до точки (x,y)

Направление Черепахи в команде setheading (х) задается величиной угла. Некоторые значения параметра х приведены в примере 19.2.
Если текст программы большой, то ее сложно читать, поэтому в программе часто пишут комментарии — строки текста, которые поясняют написанные команды. Перед текстом комментариев ставится знак # (пример 19.3). Комментарии можно писать по русски. Исполнитель пропускает их при выполнении программы.

19.2. Изображение домика
Пример 19.4. Составить алгоритм построения изображения домика и написать программу для исполнителя Черепаха.
Выберем следующий алгоритм построения изображения:

  1. Построить отрезки для крыши: АВ, ВС, СА.
  2. Построить отрезки для дома: AD, DE, ЕС.
  3. Построить отрезки для двери: KL, LM, MN.
  4. Построить отрезки для окна FG, GQ, QR, RF.

Для подбора размеров и координат желательно сначала нарисовать изображение на листе бумаги в клетку.

Словесное описание алгоритма:

Поднять перо
В точку (-150, 50)
Опустить перо
Построить крышу
Налево (30)
Вперед (200)
Направо (60)
Вперед (200)
Направо (150)
Вперед (346)
Построить дом
Налево (90)
Вперед (200)
Налево (90)
Вперед (346)
Налево (90)
Вперед (200)
Поднять перо
В точку (-100, 0)
Опустить перо
Построить окно
Поднять перо
В точку (90, -150)
Опустить перо
Построить дверь

Написанные программы с некоторыми изменениями можно использовать для решения других задач.
Пример 19.5. Требуется изменить изображение домика из примера 19.4.
При сравнении нового изображения и изображения из примера 19.4 обнаружим два отличия: первое — в размерах окна Черепахи, второе — в форме окна домика. В целом рисунки похожи. Значит, для создания изображения нового домика можно использовать программу из примера 19.4. Внесем изменения в текст программы в окне редактора среды программирования, используя правила редактирования текста:

  • добавим команду изменения окна в начало программы;
  • изменим фрагмент рисования окна домика.

Остальные команды в программе останутся неизменными.

19.3. Изображение треугольников
Пример 19.6. Написать программу построения треугольника.

У треугольника три стороны одинаковой длины. Все углы равны по 60°. Угол поворота Черепахи — 180° — 60° = 120°.

Словесное описание алгоритма 1 построения треугольника:

Вперед (100)
Влево (120)
Вперед (100)
Влево (120)
Вперед (100

Аналогичный результат можно получить и с помощью другого алгоритма (алгоритм 2).

В точку (100, 0)
В точку (50, 75)
В точку (0, 0)

Программа данного алгоритма приведена в примере 19.7.
Если сравнить два алгоритма, то можно сделать следующие выводы:

  1. Второй алгоритм имеет меньшее количество команд, чем первый.
  2. Треугольник, построенный по первому алгоритму, может располагаться в любом месте плоскости. Его местоположение зависит только от начального положения Черепахи.
  3. Треугольник, построенный по второму алгоритму, может быть нарисован только в одном месте плоскости. Его местоположение определено координатами вершин.
  4. Первый алгоритм, невзирая на большее количество команд, является более универсальным. Его можно использовать для построения других изображений.

Пример 19.8. Написать программу построения елки, состоящей из трех одинаковых треугольников. Треугольники строим, используя алгоритм 1. Алгоритм построения елки может быть следующим:

Поднять перо
В точку (-50, -85)
Опустить перо
Построить треугольник
Поднять перо
В точку (-50, 0)
Опустить перо
Построить треугольник
Поднять перо
В точку (-50, 85)
Опустить перо
Построить треугольник

Для построения треугольника в программе нужно три раза скопировать фрагмент программы из примера 19.6.

Пример 19.9. Изменить программу из примера 19.6 для получения прямоугольного треугольника с углами 45°, 45°, 90° и длиной катетов 100.
Определим отличия данного треугольника от треугольника из примера 19.6.

  1. У этого треугольника углы неодинаковы. Черепаха должна дважды повернуться на угол 135° (180° — 45°) и затем на угол 90°.
  2. Длины двух сторон треугольника нам известны, а третьей нет. Для вычисления ее длины можно воспользоваться тем, что длина гипотенузы у такого треугольника примерно в 1,41 раза больше катета.

19.4. Изображение цифры «3»
Пример 19.10. Написать про¬грамму построения изображения цифры «3» в почтовом индексе с помощью исполнителя Черепаха.

Алгоритм построения изображения:

В точку А (-50, 60)
Опустить перо
Построить цифру, двигаясь по отрезкам АВ, ВС, CD, DE.

Данное изображение состоит из Двух одинаковых фрагментов, каждый из которых представляет собой прямоугольный треугольник без одного прорисованного катета. Поэтому можно воспользоваться программой из примера 19.9. Длина горизонтальной линии равна 30, диагональной — 30 • 1,41 ≈ 42.
В некоторых изображениях часто повторяются одинаковые фрагменты. Для создания программ построения таких изображений можно скопировать повторяющийся фрагмент программы и использовать его нужное число раз так, как это делали в примере 19.8 для построения елки.
Пример 19.11. Написать программу для построения трех одинаковых цифр «3» красного, зеленого и синего цвета.
Мы видим, что программу построения этого изображения можно составить на основе программы из примера 19.8. Изоб-ражение первой цифры начинается от верхней точки слева, ее координаты (-50, 60). Координаты такой же точки для второй цифры (0, 60), для третьей — (50, 60).
Таким образом, для создания изображения из трех цифр «3» в тексте программы из примера 19.10 нужно скопировать фрагмент

turtle.penupO
turtle.setpos(-50,60)
turtle.pendown()
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)

затем следует вставить скопированный фрагмент нужное число раз. В каждом из вставленных фрагментов изменить параметры команды turtle. setpos(-50, 60) — задать координаты начальных точек. Также в каждом фрагменте нужно дописать команды изменения цвета.

 
Пример 19.1. Задание цвета.
По умолчанию задан режим установки цвета с использованием текстовых значений. В 15-ой строке программы режим меняется. Теперь цвет можно задавать числовыми значениями. В 24-ой строке возвращен способ задания цвета по умолчанию.
Программа:

1. import turtle

2. turtle.shape(‘turtle‘)
3. turtle.pensize(2)
4. turtle.penup()
5. turtle.setpos(-100,0)
6. turtle.pendown()
7. turtle.color(‘darkred‘)
8. turtle.fillcolor(‘tomato‘)
9. turtle.begin_fill()
10. turtle.circle(50)
11. turtle.end_fill()
12. turtle.penup()
13. turtle.setpos(0,0)
14. turtle.pendown()
15. turtle.colormode(255)
16. turtle.color(255,165,0)
17. turtle.fillcolor(255,255,0)
18. turtle.begin_fill()
19. turtle.circle(50)
20. turtle.end_fill()
21. turtle.penup()
22. turtle.setpos(100,0)
23. turtle.pendown()
24. turtle.colormode(1.0)
25. turtle.color(‘green‘,’lime‘)
26. turtle.begin_fill()
27. turtle.circle(50)
28. turtle.end_fill()

Результат выполнения программы:

В таблице перечислены не все команды исполнителя Черепаха. Еще она может выполнять команды: dot(), stamp(), speed(), clear() и др. О том, какие действия выполняют эти команды, можно узнать в справочной системе.

Пример 19.2. Направление движения Черепахи.

Угол поворота
Направление Черепахи
0 Вправо, на восток
90 Вверх, на север
180 Влево, на запад
270
Вниз, на юг

Пример 19.3. Комментарии в программе.

#желтый круг
turtle.penupO
turtle.setpos(0,0)
turtle.pendown()
turtle.colormode(255)
turtle.color(255,165,0)
turtle.fillcolor(255,255,0)
turtle.begin_fill()
#радиус круга 50
turtle.circle (50)
turtle.end_fill()

Здесь комментариями являются две строки.

#желтый круг
#радиус круга 50

Первая срока поясняет, что в программе содержатся команды для рисования круга желтого цвета. Вторая — назначение следующей за ней команды.

Пример 19.4. Программа изображения домика.

import turtle

turtle.shape(‘turtle‘)
turtle.pensize(2)
turtle.penup()
turtle.setpos(-150,50)
turtle.pendown()
turtle.color(‘brown‘)
#крыша
turtle.left(30)
turtle.forward(200)
turtle.right(60)
turtle.forward(200)
turtle.right(150)
turtle.forward(346)
#дом
turtle.left(90)
turtle.forward(200)
turtle.left(90)
turtle.forward(346)
turtle.left(90)
turtle.forward(200)
#окно
turtle.penup()
turtle.setpos(-100,0)
turtle.pendown()
turtle.setheading(0)
turtle.color(‘blue‘)
turtle.forward(100)
turtle.right(90)
turtle.forward(50)
turtle.right(90)
turtle.forward(100)
turtle.right(90)
turtle.forward(50)
#дверь
turtle.penup()
turtle.setpos(90,-150)
turtle.pendown()
turtle.setheading(90)
turtle.color(‘red‘)
turtle.forward(100)
turtle.right(90)
turtle.forward(50)
turtle.right(90)
turtle.forward(100)

Результат работы программы:

Пример 19.5. Измененный рисунок.

Изменения в программе:

import turtle
turtle.shape(‘turtle‘)
turtle.setup(450, 350)
#окно
turtle.penup()
turtle.setpos(-100,0)
turtle.pendown()
turtle.setheading(0)
turtle.color(‘blue‘)
turtle.forward(100)50
turtle.right(90)
turtle.forward(50)
turtle.right(90)
turtle.forward(100)50
turtle.right(90)
turtle.forward(50)

Красной рамкой обведены строки, которые отображают необходимые изменения. Вместо зачеркнутых чисел нужно записать числа, стоящие после скобок.
Пример 19.6. Программа получения изображения треугольника. Алгоритм 1.

import turtle

turtle.shape(‘turtle‘)
turtle.color(‘green‘)
turtle.pensize(2)
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)

Пример 19.7. Программа получения изображения треугольника. Алгоритм 2.

import turtle

turtle.shape(‘turtle‘)
turtle.color(‘green‘)
turtle.pensize(2)
turtle.setpos(100,0)
turtle.setpos(50,75)
turtle.setpos(0,0)

Пример 19.8. Программа рисования елки.

import turtle

turtle.shape(‘turtle‘)
turtle.color(‘green‘)
turtle.pensize(2)
#нижний треугольник
turtle.penup()
turtle.setpos(-50,-85)
turtle.pendown()
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
#средний треугольник
turtle.penup()
turtle.setpos(-50,0)
turtle.pendown()
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
#верхний треугольник
turtle.penup()
turtle.setpos(-50,85)
turtle.pendown()
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)
turtle.forward(100)
turtle.left(120)

Результат работы программы:

Пример 19.9. Программа рисования прямоугольного треугольника.

import turtle

turtle.shape(‘turtle‘)
turtle.color(‘green‘)
turtle.pensize(2)
turtle.forward(100)
turtle.right(135)
turtle.forward(141)
turtle.right(135)
turtle.forward(100)
turtle.right(90)

Результат работы программы:

 

Для вычисления расстояния можно использовать команду distance. Для этого нужно в программе заменить команду

turtle.forward(141)

на команду

turtle.forward
(turtle.distance(0,100))

Однако при таком подходе мы потеряем универсальность рисования нашего треугольника: его местоположение будет привязано к точке (0, 100).

Пример 19.10. Программа получения изображения цифры 3.

import turtle

turtle.shape(‘turtle’)
turtle.pensize(2)
turtle.penup()
turtle.setpos(-50,60)
turtle.pendown()
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)

Результат работы программы:

Значения параметров команд Черепахи можно записывать выражением. Например, вместо команды turtle, forward (42) можно записать команду turtle. for ward (30 *1.41).

Пример 19.11. Программа построения изображения из трех одинаковых цифр разного цвета.

import turtle

turtle.shape(‘turtle‘)
turtle.pensize(2)
#первая тройка
turtle.penup()
turtle.color(‘red‘)
turtle.setpos(-50,60)
turtle.pendown()
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)
#вторая тройка
turtle.penup()
turtle.color(‘green‘)
turtle.setpos(0,60)
turtle.pendown()
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)
#третья тройка
turtle.penup()
turtle.color(‘blue‘)
turtle.setpos(50,60)
turtle.pendown()
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)
turtle.forward(30)
turtle.right(135)
turtle.forward(42)
turtle.left(135)

Результат работы программы:

 

1. Как получить справочную информацию о командах setheading, pensize?
2. Как задать цвет линии Черепахи?
3. Как закрасить нарисованную Черепахой фигуру?
4. Какое значение должно быть у команды forward, если Черепаха должна переместиться по диагонали квадрата с длиной стороны 120?

Упражнения

1. Измените программу примера 19.1 для получения изображений:

а)

  б)

2. Измените программу из примера 19.4 для получения изображений. Конечное положение Черепахи может быть другим.

а)

б)

в)

г)

д)

е)

3. Используйте программы примеров 19.6 и 19.8 для получения изображений:

а)

б)

в)

4. Вставьте в редактор среды программирования IDLE текст программы, определите результат ее выполнения:

import turtle

turtle.shape(‘turtle‘)
#буква Б
turtle.left(90)
turtle.penup()
turtle.forward(30)
turtle.pendown()
turtle.right(90)
turtle.forward(30)
turtle.right(90)
turtle.forward(30)
turtle.right(90)
turtle.forward(30)
turtle.right(90)
turtle.forward(60)
turtle.right(90)
turtle.forward(30)
#переход
turtle.penup()
turtle.setpos(40, 0)
turtle.pendown()

#буква Г
turtle.left(90)
turtle.forward(60)
turtle.right(90)
turtle.forward(30)
#переход
turtle.penup()
turtle.setpos(80, 0)
turtle.pendown()
#буква У
turtle.forward(30)
turtle.left(90)
turtle.forward(60)
turtle.left(90)
turtle.penup()
turtle.forward(30)
turtle.pendown()
turtle.left(90)
turtle.forward(30)
turtle.left(90)
turtle.forward(30)

Измените программу для построения изображений.

а) б)
в) В программе из пункта а) внесите изменения так, чтобы вместо буквы Б рисовалась буква Л:
5. Скопируйте и вставьте в редактор среды программирования IDLE текст программы, определите результат ее выполнения:
import turtle

turtle.shape(‘turtle‘)
turtle.color(‘blue‘)
turtle.pensize(2)
turtle.forward(60)
turtle.left(90)
turtle.forward(120)
turtle.left(90)
turtle.forward(60)
turtle.left(90)
turtle.forward(120)
turtle.left(90)

Измените программу для построения изображения:

6. *Составьте программы для выполнения заданий. Подумайте, какие из уже выполненных заданий можно использовать для получения этих изображений.
а)

б)

в)

Упр_19_6_в

г)

Упр_19_6_г