№ 13843 (Уровень: Базовый)
(Е.Джобс) Исполнитель Черепаха действует на плоскости с декартовой системой координат. В начальный момент Черепаха находится в начале координат, её голова направлена вдоль положительного направления оси ординат, хвост опущен. При опущенном хвосте Черепаха оставляет на поле след в виде линии. В каждый конкретный момент известно положение исполнителя и направление его движения.
У исполнителя существует 6 команд:
Запись Повтори k [Команда1 Команда2 … КомандаS] означает, что последовательность из S команд повторится k раз.
Черепахе был дан для исполнения следующий алгоритм:
Повтори 5 [Вправо 45 Вперед 10 Вправо 45]
Повтори 6 [Вперед 20 Вправо 90]
Сколько точек с целочисленными координатами находится внутри области объединения полученных контуров? Точки на линиях контуров учитывать не следует.
Комментарии к коду решения:
import turtle as t
- импорт модуляturtle
под псевдонимомt
для работы с графикой.t.tracer(0)
- отключение анимации для ускорения отрисовки.t.left(90)
- поворот черепахи на 90 градусов влево.m = 20
- задание переменнойm
со значением 20.t.up()
- поднятие пера черепахи.- Цикл
for _ in range(10):
для отрисовки рисунка:t.right(120)
- поворот на 120 градусов вправо.t.forward(12 * m)
- перемещение вперед на 12 единиц, умноженных наm
.t.down()
- опускание пера черепахи для рисования.- Цикл
for _ in range(7):
для отрисовки прямоугольника:t.forward(7 * m)
- передвижение вперед на 7 единиц, умноженных наm
.t.right(90)
- поворот на 90 градусов вправо.- Цикл
for _ in range(5):
для отрисовки шестиугольника:t.right(60)
- поворот на 60 градусов вправо.t.forward(20 * m)
- перемещение вперед на 20 единиц, умноженных наm
.t.right(30)
- поворот на 30 градусов вправо.t.up()
- поднятие пера черепахи.- Вложенные циклы
for x in range(-30, 30)
иfor y in range(-30, 30)
для отображения красных точек:t.goto(x * m, y * m)
- перемещение черепахи в точку с координатами (xm, ym).t.dot(2, 'red')
- отображение точки радиусом 2 и красного цвета.t.done()
- завершение работы с модулемturtle
.
import turtle as t
t.tracer(0)
t.left(90)
m = 20
t.up()
for _ in range(10):
t.right(120)
t.forward(12 * m)
t.down()
for _ in range(7):
t.forward(7 * m)
t.right(90)
for _ in range(5):
t.right(60)
t.forward(20 * m)
t.right(30)
t.up()
for x in range(-30, 30):
for y in range(-30, 30):
t.goto(x * m, y * m)
t.dot(2, 'red')
t.done()