Программа для программирования черепашка

Обновлено: 04.07.2024

Запустить интерпретатор python можно из командной строки:

Будьте внимательны — команда python запустит интерпретатор версии 2, с которым мы работать не будем. В системе Windows можно использовать пункт меню «Python (command line)».

Интерактивный режим

Откройте командную строку и напишите команду python3.

Вы увидите примерно следующее приглашение командной строки:

Вводите команды и наслаждайтесь результатом. А что можно вводить? Несколько примеров:

Первая команда вычисляет сумму двух чисел, вторая команда вычисляет 2 в степени 100, третья команда выполняет операцию конкатенации для строк, а четвертая команда печатает строку 'ABC' , повторенную 10 раз.

Хотите закончить работу с питоном? Введите команду exit() (именно так, со скобочками, так как это — функция) или нажмите Ctrl+D.

Программируемый режим

В предыдущей главе мы использовали Python для простых разовых вычислений, используя интерактивный режим. Теперь создадим программу и выполним её целиком.

Здесь мы используем переменные — объекты, в которых можно сохранять различные (числовые, строковые и прочие) значения. В первой строке переменной a присваивается значение 179 , затем переменной b присваивается значение 971 , затем переменной c присваивается значение арифметического выражения, равного длине гипотенузы. После этого значение переменной c выводится на экран.

Упражнение №1

Откройте произвольный текстовый редактор, например, spyder или Geany . Скопируйте туда текст программы, написанной выше. Сохраните текст в файле с именем hypot.py .

Запустите терминал, перейдите в каталог, где лежит файл hypot.py и выполните эту программу:

Интерпретатор языка Python вместо интерактивного режима выполнит последовательность команд из файла.

При этом значения вычисленных выражений не выводятся на экран (в отличии от интерактивного режима), поэтому для того, чтобы вывести результат работы программы, то есть значение переменной c , нужна функция print() .

Базовый синтаксис языка Python 3

Типы данных

Итак, мы видим, что Python умеет работать как минимум с двумя видами данных — числами и строками. Числа записываются последовательностью цифр, также перед числом может стоять знак минус, а строки записываются в одинарных кавычках. 2 и '2' — это разные объекты, первый объект — число, а второй — строка. Операция + для целых чисел и для строк работает по-разному: для чисел это сложение, а для строк — конкатенация.

Кроме целых чисел есть и другой класс чисел: действительные (вещественные числа), представляемые в виде десятичных дробей. Они записываются с использованием десятичной точки, например, 2.0 .

Определить тип объекта можно при помощи функции type :

Обратите внимание — type является функцией, аргументы функции указываются в скобках после ее имени.

Операции с числами

Вот список основных операций для чисел:

  • A+B — сумма;
  • A-B — разность;
  • A*B — произведение;
  • A/B — частное;
  • A**B — возведение в степень.

Полезно помнить, что квадратный корень из числа x — это x**0.5 , а корень степени n — это x**(1/n) .

Есть также унарный вариант операции -, то есть операция с одним аргументом. Она возвращает число, противоположное данному. Например: -A .

В выражении может встречаться много операций подряд. Как в этом случае определяется порядок действий? Например, чему будет равно 1+2*3**1+1 ? В данном случае ответ будет 8, так как сначала выполняется возведение в степень, затем — умножение, затем — сложение.

Более общие правила определения приоритетов операций такие:

  1. Выполняются возведения в степень справа налево, то есть 3**3**3 это 3²⁷.
  2. Выполняются унарные минусы (отрицания).
  3. Выполняются умножения и деления слева направо. Операции умножения и деления имеют одинаковый приоритет.
  4. Выполняются сложения и вычитания слева направо. Операции сложения и вычитания имеют одинаковый приоритет.

Операции над строками

  • A+B — конкатенация;
  • A*n — повторение n раз, значение n должно быть целого типа.

Ветвление

Ветвление (или условная инструкция) в Python имеет следующий синтаксис:

Блок_инструкций_1 будет выполнен, если Условие истинно. Если Условие ложно, будет выполнен Блок_инструкций_2 .

В условной инструкции может отсутствовать слово else и последующий блок. Такая инструкция называется неполным ветвлением. Например, если дано число x и мы хотим заменить его на абсолютную величину x , то это можно сделать следующим образом:

В этом примере переменной x будет присвоено значение -x , но только в том случае, когда x<0 . А вот инструкция print(x) будет выполнена всегда, независимо от проверяемого условия.

Для выделения блока инструкций, относящихся к инструкции if или else в языке Python используются отступы. Все инструкции, которые относятся к одному блоку, должны иметь равную величину отступа, то есть одинаковое число пробелов в начале строки. Рекомендуется использовать отступ в 4 пробела.

Вложенные условные инструкции

Внутри условных инструкций можно использовать любые инструкции языка Python, в том числе и условную инструкцию. Вложенное ветвление — после одной развилки в ходе исполнения программы появляется другая развилка. При этом вложенные блоки имеют больший размер отступа (например, 8 пробелов).

Примере программы, которая по данным ненулевым числам x и y определяет, в какой из четвертей координатной плоскости находится точка (x,y):

Операторы сравнения

Как правило, в качестве проверяемого условия используется результат вычисления одного из следующих операторов сравнения:

Оператор Значение
< Меньше — условие верно, если первый операнд меньше второго.
> Больше — условие верно, если первый операнд больше второго.
<= Меньше или равно — условие верно, если первый операнд меньше или равен второму.
>= Больше или равно — условие верно, если первый операнд больше или равен второму.
== Равенство. Условие верно, если два операнда равны.

Например, условие (x * x < 1000) означает «значение x * x меньше 1000», а условие (2 * x != y) означает «удвоенное значение переменной x не равно значению переменной y ».

Операторы сравнения в можно объединять в цепочки, например, a == b == c или 1 <= x <= 10 .

Тип данных bool

Операторы сравнения возвращают значения специального логического типа bool . Значения логического типа могут принимать одно из двух значений: True (истина) или False (ложь). Если преобразовать логическое True к типу int , то получится 1, а преобразование False даст 0. При обратном преобразовании число 0 преобразуется в False , а любое ненулевое число в True . При преобразовании str в bool пустая строка преобразовывается в False , а любая непустая строка в True .

Каскадные условные инструкции

Пример программы, определяющий четверть координатной плоскости, можно переписать используя «каскадную« последовательность операцией if. elif. else :

В такой конструкции условия if , . elif проверяются по очереди, выполняется блок, соответствующий первому из истинных условий. Если все проверяемые условия ложны, то выполняется блок else , если он присутствует. Обратите внимание, что таким образом мы чётче видим условия наступления случаев (нет "призраков"), а также отлавливаем ситуацию, когда точка не находится ни в одной из четвертей.

Цикл while

Цикл while («пока») позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.

Синтаксис цикла while в простейшем случае выглядит так:

При выполнении цикла while сначала проверяется условие. Если оно ложно, то выполнение цикла прекращается и управление передается на следующую инструкцию после тела цикла while . Если условие истинно, то выполняется инструкция, после чего условие проверяется снова и снова выполняется инструкция. Так продолжается до тех пор, пока условие будет истинно. Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции после цикла.

Например, следующий фрагмент программы напечатает на экран всех целые числа, не превосходящие n:

Общая схема цикла while в данном случае для перебора всех подходящих значений такая:

Выводем все степени двойки, не превосходящие числа n:

Цикл for

Цикл for может быть использован как более краткая альтернатива циклу while .

Для последовательного перебора целых чисел из диапазона [0; n) можно использовать цикл for :

Этот код по выполняемым действиям полностью соответствуют циклу while :

Можно задавать начальные и конечные значения для переменной цикла, а также шаг:

Аналогичный цикл while

Черепаха

Стандартная библиотека Python содержит модуль turtle , предназначенный для обучения программированию. Этот модуль содержит набор функций, позволяющих управлять черепахой. Черепаха умеет выполнять небольшой набор команд, а именно:

Команда Значение
forward(X) Пройти вперёд X пикселей
backward(X) Пройти назад X пикселей
left(X) Повернуться налево на X градусов
right(X) Повернуться направо на X градусов
penup() Не оставлять след при движении
pendown() Оставлять след при движении
shape(X) Изменить значок черепахи (“arrow”, “turtle”, “circle”, “square”, “triangle”, “classic”)
stamp() Нарисовать копию черепахи в текущем месте
color() Установить цвет
begin_fill() Необходимо вызвать перед рисованием фигуры, которую надо закрасить
end_fill() Вызвать после окончания рисования фигуры
width() Установить толщину линии
goto(x, y) Переместить черепашку в точку (x, y)

Например, следующая программа рисует букву S :

Упражнение №2: буква S

Сохраните и выполните предыдущую программу. Убедитесь в том, что черепаха работает.

Упражнение №3: квадрат

Нарисуйте квадрат. Пример:

Упражнение №4: окружность

Нарисуйте окружность. Воспользуйтесь тем фактом, что правильный многоугольник с большим числом сторон будет выглядеть как окружность. Пример:

Упражнение №5: больше квадратов

Нарисуйте 10 вложенных квадратов.

Упражнение №6: паук

Нарисуйте паука с n лапами. Пример n = 12:

Упражнение №7: спираль

Нарисуйте спираль. См. теорию. Пример:

Упражнение №8: квадратная «спираль»

Нарисуйте «квадратную» спираль. Пример:

Написание функций

Как было сказано раньше, функции — это своего рода готовые кирпичики, из которых строится программа. До этого момента мы использовали стандартные функции ( print , input , функции модуля turtle ), теперь настало время написать функцию:

Так же, как и в случае циклов и условных операторов, тело функции выделяется при помощи отступов.

Вызов функции осуществляется по имени с указанием параметров:

Внутри функции можно использовать те же синтаксические конструкции, что и вне её — циклы, ветвления, можно даже описывать новые функции. Естественно, внутри функции можно работать и с переменными.

Написанная ранее функция имеет особенность — она просто просто выводит текст на экран и не возвращает никакого результата. Многие функции, напротив, занимаются вычислением какого-либо значения, а затем возвращают его тому, кто эту функцию вызвал. В качестве примера можно рассмотреть функцию для сложения двух чисел:

Для возврата значения из функции используется оператор return : в качестве параметра указывается значение, которое требуется вернуть.

Упражнение №9: правильные многоугольники

Нарисуйте 10 вложенных правильных многоугольников. Используйте функцию, рисующую правильный n-угольник. Формулы для нахождения радиуса описанной окружности. Пример:

Упражнение №10: «цветок»

Нарисуйте «цветок» из окружностей. Используйте функцию, рисующую окружность. Пример:

Упражнение №11: «бабочка»

Нарисуйте «бабочку» из окружностей. Используйте функцию, рисующую окружность. Пример:

Упражнение №12: пружина

Нарисуйте пружину. Используйте функцию, рисующую дугу. Пример:

Упражнение №13: смайлик

Нарисуйте смайлик с помощью написанных функций рисования круга и дуги. Пример:

Упражнение №14: звезды

Нарисуйте две звезды: одну с 5 вершинами, другую — с 11. Используйте функцию, рисующую звезду с n вершинами. Пример:

Красивый код на Python

Важная мысль создателя языка Python, Гвидо ван Россума : код читается намного больше раз, чем пишется.

Поэтому существуют рекомендации о стиле кодирования PEP8. Они направлены на то, чтобы улучшить читаемость и сделать его согласованным между большим числом проектов. В идеале, весь код будет написан в едином стиле, и любой сможет легко его прочесть.

Исполнитель черепашка
Первые шаги

Вначале программист дает черепашке простые приказы, например ВПЕРЕД 100 , что означает "передвинуться вперед на 100 шагов", или НАЛЕВО 60 , т. е. "сделать поворот влево на 60 градусов". Эти команды можно использовать для создания программ, рисующих геометрические фигуры, необходимо только запомнить, что каждая команда пишется на отдельной строке. Передвигаясь по экрану, черепашка оставляет за собой след (по умолчанию цвет кисти у черепахи - ярко зеленый).

Вставлять в программу команды удобно, используя кнопки в левой части экрана.

Шаги черепашки очень маленькие - равны расстоянию между двумя соседними точками на экране, поэтому действие команды "ВПЕРЕД 1" можно и не заметить.

Выполняя команды НАЛЕВО или НАПРАВО, черепашка поворачивается на заданный угол (при этом она считает, что угол задан в градусах). При повороте черепашка остается на месте, не смещаясь ни в какую сторону, меняется только ее направление. Не забывайте, что направление поворота (налево или направо) определяется "с точки зрения" черепашки.

Число или числовое выражение, которое указывает черепашке сколько шагов пройти или на какой угол повернуть, называется аргументом команды. Если аргумент не задан, то черепашка считает его равным нулю.

Запускают программу на выполнение с помощью большой красной кнопки с надписью Выполнить или с помощью клавиши F5 на клавиатуре. Выйти из выполняемой программы, можно с помощью серой кнопки с крестиком в верхнем правом углу окна исполнения или с помщью клавиши Escape на клавиатуре.

Попробуем вместе начертить квадрат. Чтобы заставить черепашку двигаться по квадрату, мысленно проделайте за нее весь путь и опишите получившееся.

Если сторона квадрата будет длиной в 100 черепашьих шагов, можно составить такую последовательность команд:

вперед 100
налево 90
вперед 100
налево 90
вперед 100
налево 90
вперед 100
налево 90

В этой последовательности 4 раза повторяется группа команд ВПЕРЕД 100 НАЛЕВО 90. Чтобы не писать одни и те же команды четыре раза подряд, познакомимся с еще одной командой, которую знает черепашка, - командой ПОВТОРИТЬ . Наша программа, рисующая квадрат, будет выглядеть так :

повторить 4 вперед 100
налево 90
>

В фигурных скобках в нужной последовательности записываются те команды, которые необходимо сделать черепашке несколько раз.

Фигурные скобки можно ставить и так:

повторить 4
вперед 100
налево 90
>

--> повторить 4 вперед 100
налево 90>

Для того чтобы увидеть выполнение команд в более медленном режиме, можно воспользоваться командой ПАУЗА , после которой необходимо указать время в миллисекундах. В одной секунде - 1000 миллисекунд. То есть, если мы хотим сделать задержку в полсекунды, следует дать команду пауза 500 .

Теперь подумаем, как нарисовать равносторонний треугольник?

При рисовании равностороннего треугольника черепашка должна нарисовать три одинаковых линии и сделать три одинаковых поворота. При создании программы нам поможет одно простое правило, которое называется "Правило 360 градусов".

Правило 360 градусов

Обратите внимание, что при рисовании квадрата черепашка начинает и заканчивает свой путь в одной и той же точке и смотрит в одну и ту же сторону, т.е. ее начальное и конечное положения совпадают. Рисуя квадрат, она совершает полный оборот, т.е. поворачивается на 360 градусов. Разделив 360 на 4 (равных поворота), мы получим 90 - величину угла поворота. При рисовании треугольника черепашка должна сделать три одинаковых поворота и вернуться в начальное положение. Следовательно, каждый из углов поворота равен 360 : 3 = 120.

повторить 3 вперед 100
налево 120
>

Можно легко научить черепашку рисовать правильный пятиугольник. Каждый раз черепашка поворачивается на угол, равный 72 градусам (360:5=72), а повторяет 5 раз. Шестиугольник — 360:6=60, повторяет 6 раз.

А теперь попробуйте нарисовать восьмиугольник и двенадцатиугольник самостоятельно.

Черепашья графика, turtle – принцип организации библиотеки графического вывода, построенный на метафоре Черепахи, воображаемого роботоподобного устройства, которое перемещается по экрану или бумаге и поворачивается в заданных направлениях, при этом оставляя (или, по выбору, не оставляя) за собой нарисованный след заданного цвета и ширины.

Проще: черепашка ползает по экрану и рисует. Мы управляем черепашкой на плоскости при помощи программы.

Начало работы. Движения

В первой строке необходимо добавить:

Мы командуем черепашкой простыми словами на английском языке. left, right – поворот налево и направо, forward и backward – движение вперед и назад. В программе каждое действие – вызов функции из модуля turtle. Простая программа:

Что произошло:

  • Поворот направо на 90 градусов
  • Движение вперед на 100 шагов (пикселей)
  • Поворот налево на 90 градусов
  • Движение назад на 100 шагов

Не похоже на черепашку, это ползающая стрелка! Исправим это:




Отлично! Теперь это черепашка, пусть и монохромная. Дополнительно, функция exitonclick() позволяет закрыть окно и завершить выполнение программы кликом мышкой по окну.
А еще можно использовать сокращенные названия функций: fd(100) вместо forward(100), rt вместо right, lt вместо left, bk вместо backward.

Геометрические фигуры

Рисуем простые геометрические фигуры:

  • Прямая: просто движение вперед
  • Квадрат: вперед, поворот на 90 градусов и так 4 раза. Повторение команд – значит, можно выполнить их в цикле for!
  • Пятиконечная звезда: вперед, поворот на 144 градусов и так 5 раз.

Если мы хотим выполнить инструкции n раз, мы пишем их в цикле

Далее идут инструкции с отступом в 4 пробела. Код с отступами – тело цикла. Когда цикл завершается, отступы больше не ставятся.

Рисуем квадрат:

Скучно рисовать одинокие фигуры. Поэтому мы приготовились рисовать сразу несколько и теперь создаем отдельный экземпляр класса Turtle для каждой фигуры. Так мы можем менять цвет линии и другие параметры отдельно для каждой фигуры. Потом, когда мы захотим дорисовать или изменить параметры фигуры, у нее будут сохранены старые параметры. Их не надо будет устанавливать заново, как это было бы без отдельных экземпляров класса для каждой фигуры.

Звезда рисуется также:

Самостоятельно:

  1. Нарисуйте пятиконечную звезду (угол поворота 144 градуса).
  2. Квадрат и звезду в одной программе, на одном графическом поле, но с разными экземплярами класса Turtle.
  3. Восьмиконечную звезду (угол поворота 135 градусов).
  4. Фигуру из анимации в начале страницы.

Решения

Изменяем параметры во время движения

При отрисовке простых фигур черепашка возвращалась в исходную точку, и программа останавливалась, ожидая, когда будет закрыто окно. Если в цикле продолжить рисовать по прежним инструкциям, фигура будет нарисована заново по уже нарисованным контурам. А если ввести дополнительный угол поворота?


Мы также добавили:

  • color('red', 'green') определяет цвет линии и цвет заполнения. Черепашка теперь зеленая!
  • begin_fill() и end_fill() обозначают начало и конец заполнения

Больше программирования!

Напишем обобщенную программу рисования выпуклых равносторонних многоугольников. num_sides – количество граней, side_length – длина грани, angle – угол поворота.

Что будет, если на каждом шаге увеличивать длину пути? В первый день 10 шагов, во второй – 20, далее 30, 40 и так до 200:

Координаты на плоскости

Положение на плоскости определяется двумя числами, x и y:


Черепашку в программе можно перемещать функцией goto(x, y). x и y – числа, или переменные. goto(0, 0) переместит черепашку в начало координат.

Вместо звезды-спирали мы получили 5 линий, расходящихся из точки начала координат.

Круг и точка

Не хватает плавных изгибов? На помощь приходят функции dot() и circle():



  • изменили заголовок окна функцией title(),
  • установили толщину линии – pensize(),
  • установили цвет линии – pencolor(),
  • Подняли черепашку перед перемещением – penup() и опустили после – pendown().

Самостоятельно:

  • Используя код из примеров и функцию goto(), нарисовать галерею из 5 или более многоугольников на одном поле. Использовать экземпляр класса turtle.Turtle().
  • Нарисованные многоугольники закрасить разными цветами. Пробуйте стандартные цвета или их шестнадцатеричное представление. Не забудьте кавычки вокруг названия или кода цвета!

Решения

  • У нас есть два варианта нарисовать несколько фигур: используя отдельные классы и не используя их. Рассмотрим оба варианта.
  • Без классов:
  • Получается довольно многословно. С классами (начало):
  • Так еще многословнее. Зачем нам понадобилось писать для каждой фигуры отдельный класс? Для того, чтобы подготовиться к написанию программы с помощью функций, которые помогут обобщить и сократить наш код.
    Создадим функции, используя написанную ранее обобщенную программу рисования выпуклых равносторонних многоугольников. Функция prepare() делает все приготовления для рисования: переходит в нужную точку холста, устанавливает нужный цвет и дает команду заполнять цветом. У функции три входных параметра: координаты по осям X, Y и кодовое слово цвета.
    Функция draw_polygon() – наш старый знакомый, так мы рисуем выпуклый многоугольник. У функции два входных параметра: количество граней и длина грани.
  • Получилось существенно сократить программу, и она стала более читаемой. Но повторяющиеся действия остались. Значит, есть еще работа для программиста! Будем рисовать все 5 фигур в цикле. Для этого все параметры соберем в списки, а внутри цикла будем брать значение параметра по индексу (номеру минус 1) в списке. Теперь всего 22 строки кода:
  • Получились фигуры разного размера. Самостоятельно: Задать переменной внутри цикла длину грани так, чтобы фигуры казались (или являлись) равновеликими.

Делаем фигуры равновеликими

Площадь квадрата со стороной 100 пикселей – 10 000 квадратных пикселей. Вычислим площади всех фигур со стороной 100 от треугольника до 7-угольника. Формула площади правильного многоугольника содержит тангенс, поэтому «поверим на слово» результату, зависимости количество углов (вершин) – площадь:

  • 3 – 4330.13
  • 4 – 10000
  • 5 – 17204.77
  • 6 – 25980.76
  • 7 – 36339.12

Изобразим ее на графике:


Получается, что площадь 7-угольника в 36339.12 / 4330.13 = 8.4 раза больше, чем площадь треугольника! Это очень заметно на рисунке:


Чтобы фигуры стали равновеликими, надо сделать длину грани вместо константы 100 – переменной, которая зависит от количества углов.

Как: приведем все площади к 10000. Для треугольника площадь увеличится на 10000 / 4330.13 = 2.31 раза. Для 7-угольника – уменьшится в 36339.12 / 10000 = 3.63 раз. Значит, стороны должны измениться в 1.52 и 0.52 раз соответственно, то есть, до 152 и 32.7 пикселей (снова «верим на слово»). Эту зависимость можно нащупать «на глаз», в чем и заключалось задание.

Наша программа без труда масштабируется до большего количества фигур:


Программа, в которой вычисляются точные значения:

Как построить график (если кто захочет):

  1. Поставить Matplotlib, набрав в командной строке
  2. Запустить программу

Другие полезные функции:

  • turtle.setup(800, 400) устанавливает размеры окна в 800 на 400 пикселей
  • turtle.setworldcoordinates(0, 0, 800, 400) устанавливает начало координат в точку 800, 400
  • turtle.tracer(0, 0) отключает анимацию
  • setpos(x, y) устанавливает черепашку (курсор) в позицию с координатами (x, y)
  • seth(x) устанавливает направление в градусах. 0 – горизонтально направо (на восток), 90 – вверх (на север) и так далее
  • hideturtle() скрывает черепашку (или стрелку, курсор)
  • speed(x) изменяет скорость рисования. Например, speed(11) – почти моментальная отрисовка простых фигур
  • clear() очищает холст от нарисованного
  • reset() очищает холст и возвращает курсор в начало координат

Пример двух рисунков – экземпляров класса Turtle() – на одном полотне


Что произошло:

  1. Задали название окна,
  2. создали экземпляр класса Turtle под именем circ. Все изменения сохраняются для класса circ;
  3. цвет линии и заполняющий цвет,
  4. форму и размер курсора,
  5. установили 10-ю скорость
  6. продвинулись на 150 пикселей вперед от старта,
  7. начали заполнять фигуру цветом,
  8. нарисовали круг
  9. закончили заполнять цветом,
  1. Объявили переменную n и присвоили ей значение 10,
  2. создали новый экземпляр класса Turtle под именем t. У него нет настроек экземпляра класса circ!
  3. В цикле while: пока переменная n меньше или равна 50, рисовать круги радиусом n;
  4. после нарисованного круга увеличить переменную n на 10.
  5. Алгоритм рисования кругов прекратит рисовать круги после 4-го круга.

Итог: функции и классы на примере turtle

  • Функция – фрагмент программного кода, к которому можно обратиться по имени. Иногда функции бывают безымянными.
  • У функции есть входные и выходные параметры. Функция fd(150) – фрагмент программного кода, который двигает курсор вперед на заданное во входном значении количество пикселей (150). Выходного значения у функции fd() нет.
  • Когда функцию надо выполнить, после ее названия пишут круглые скобки. fd – просто название, ничего не происходит. fd(100) – функция выполняется с входным параметром 100. Обычно названия функций пишут с маленькой буквы.
  • Класс – программный шаблон для создания объектов, заготовка для чего-то, имеющего собственное состояние. Мы можем нарисовать прямоугольник и назвать его кнопкой, но это еще не кнопка, потому что у нее нет собственных свойств и поведения. Прямоугольник надо научить быть самостоятельной, отличной от других, кнопкой.
  • Turtle – класс, его имя пишется с большой буквы. через оператор присваивания = мы создаем экземпляр класса: circ = turtle.Turtle(). Turtle – класс (шаблон, трафарет, заготовка), circ – его экземпляр (рисунок, набор уникальных цветов, штрихов и свойств). На картинке выше видно, что экземпляр класса circ богат установленными свойствами, а экземпляр t обладает свойствами по умолчанию: тонкая черная линия, треугольный курсор.
  • Программирование с использованием классов и их экземпляров будем называть объектно-ориентированным программированием, ООП. объектно-ориентированный подход необходим при построении графического интерфейса пользователя, GUI.

Графический интерфейс средствами библиотеки turtle.

Нарисуем прямоугольник и сделаем его кнопкой: при нажатии кнопка исчезает и появляется круг:

Что произошло:

  1. Задали название и размеры (500 на 500 пикселей) окна,
  2. Создали экземпляр класса btn1 и спрятали курсор (черепашку),
  3. Нарисовали прямоугольник 80 на 30;
  4. подняли перо и перешли на координаты (11, 7);
  5. написали Push me шрифтом Arial 12-го размера, нормальное начертание. Попробуйте вместо normal ключевые слова bold (полужирный), italic (наклонный);

Задаем поведение кнопки:

  • Функции turtle.listen() и turtle.onscreenclick() будут слушать (listen) и реагировать на клик по экрану (onscreenclick). Реакцией будет запуск функции btnclick(x, y)
  • Напишем btnclick(x, y). У нее 2 входных параметра – координаты точки, куда мы кликнули. Наша задача: если клик был по кнопке, спрятать ее и показать оранжевый круг
  • Мы помним: кнопка 80 на 30 пикселей от точки (0, 0). Значит, мы попали по кнопке, если x между 0 и 80 и y между 0 и 30. Условие попадания по кнопке: if 0<x<80 and 0<y<30:
  • 1) Убираем кнопку: btn1.clear(), 2) создаем экземпляр класса ball = turtle.Turtle(), 3) устанавливаем ему нужные свойства.

Самостоятельно:

  • Нарисовать вторую кнопку (не изменяя первую!), сделать обработчик нажатия: при клике программа завершается, выполняется функция exit()
  • При нажатии на первую кнопку появляется случайная фигура: при рисовании фигуры использовать random:

Уточнения

  • Чтобы окно не закрывалось сразу, мы использовали turtle.exitonclick(). Теперь, когда клик обрабатывается функцией, пишем в конце turtle.done().
  • функция exit() самостоятельная, это не команда turtle. Писать turtle.exit() неверно.
  • Случайная фигура – это любая фигура, при рисовании которой используются случайные числа. Например: Но есть и второй вариант: случайное число будет индексом списка и укажет на одну из заранее подготовленных неслучайных фигур: Таким приемом можно случайно выбирать цвета фигур. Функция choice делает тоже самое изящнее:

Управляем рисунком с клавиатуры

Итак, мы умеем рисовать фигуры разных форм и стилей, перемещать курсор в разные точки холста, а также обрабатывать клик мышкой по фигуре. Добавим к этим действиям обработку нажатий клавиш. Для этого существуют две функции:

  • turtle.onkeypress(fun, key): вызывается функция fun при нажатии клавиши key
  • turtle.onkey(fun, key): вызывается функция fun при отпускании клавиши key

Клавиша задается строкой с ее названием. Например, 'space' – пробел, 'Up' (с заглавной буквы) – стрелка вверх. Клавиши букв задаются заглавными, только если мы хотим нажать именно заглавную (с Shift или Caps Lock).

По нажатию клавиши мы будем перемещать фигуру. Для этого понадобятся функции, которые сообщают и изменяют координаты:

  • xcor() и ycor() выдают координаты по x и y как дробные числа
  • setx(x) и sety(y) устанавливают координаты. x и y – числа

Создадим экземпляр класса Turtle и выведем его координаты:

Получили вывод "0.0 0.0". Теперь напишем функцию up(), которая будет запускаться при нажатии стрелки вверх и перемещать наш circ на 10 пикселей вверх:

Очень похоже на нажатие мышкой! Функцию up() можно сократить до одной строчки:

Будет работать, но функции в одну строчку писать не принято. Для таких случаев используют анонимные функции: у них может вовсе не быть имени. В Python в качестве анонимных функций используются лямбда-выражения, мы их уже использовали для сортировки. Так будет выглядеть лямбда-функция up:

Она используется у нас только в одном месте, внутри функкии turtle.onkeypress(). А почему бы не соединить их вместе? Так будет выглядеть наша программа в сокращенном виде:

Всего 8 строк, и функции действительно не понадобилось имени! Как видим, язык Python дает возможность писать разными стилями, и мы можем выбирать на свой вкус: писать развернуто и красиво (как писал Гавриил Романович Державин) или кратко (как Эрнест Хемингуэй).

Самостоятельно:

  • Добавить движение circ влево, вправо и вниз
  • Скорость движения (у нас пока 10 пикселей за раз) сделать переменной

Соединяем все вместе

У нас уже есть кнопка с текстом и обработчик клика мышкой. Соединим все в одну программу:

Есть стартовый экран, управляемый с клавиатуры персонаж. Добавим препятствие, и уже почти готова игра!

Изучаемые вопросы. Знакомство со средой КуМир. Система команд исполнителя Черепаха. Работа с пультом управления. Редактирование и оптимизация программ.

Исполнитель: Черепаха


Среда исполнителя. Черепаха живёт на квадратном поле со стороной 500 пикселей. Поле ограничено рвом с водой. Черепаха может перемещаться по полю, но не может его покинуть. Черепаха рисует кончиком хвоста, перемещаясь вперёд или назад на указанное количество пикселей. Поворот Черепахи происходит относительно кончика хвоста либо по часовой стрелке (команда вправо ), либо против часовой стрелки (команда влево ) на указанное количество градусов. При запуске исполнителя (команда верхнего меню Миры → Черепаха ) Черепаха находится в центре поля, хвост опущен, смотрит вниз.

Комментарии

Используется для бесследного перемещения.

Используется для рисования.

Черепаха перемещается вперёд на Х пикселей

Черепаха перемещается назад на Х пикселей

Черепаха поворачивается направо (по часовой стрелке) на Х градусов

Черепаха поворачивается налево (против часовой стрелки) на Х градусов

Для непосредственного управления Черепахой используют пульт управления
(команда верхнего меню Миры → Черепаха Пульт)


Чтобы скрыть изображение Черепахи, надо щёлкнуть по ней мышью. Второй щелчок возвращает Черепаху на поле.

Более подробное описание Черепахи вызовите командой верхнего меню,


Задание 1. Используя пульт управления, выполните программу:

• Какую фигуру нарисовала Черепаха?

• Как надо изменить программу, чтобы Черепаха нарисовала ту же самую фигуру, но в два раза больше?

• Как изменится картинка, если все команды «вперед» заменить на команды «назад»?

• Как изменится картинка, если все команды «вправо» заменить на команды «влево»?

Задание 2. Какой длины отрезок нарисует Черепаха при выполнении фрагмента программы:

Упростите программу, записав её минимальным количеством команд.

Задание 3. На сколько пикселей относительно исходного положения сдвинется Черепаха после выполнения программы:

Упростите программу, записав её минимальным количеством команд.

Задание 4. На какой угол вправо повернётся Черепаха после выполнения фрагмента программы:

Упростите эту программу.

Задание 5 . Упростите программу, записав её минимальным количеством команд.

Задание 6. Считая, что сторона одной клетки равна 20 пикселям, с помощью пульта управления нарисуйте ёлку.


Задание 7. С помощью пульта управления нарисуйте произвольный рисунок. Упростите программу.

Кратко: Программа, предназначена для обучения навыкам программирования с использованием черепашьего мира.

Черепашка - Рекомендую тем, кто желает научиться программировать, но кому языки высокого уровня кажутся слишком сложными и скучными. Черепашка рисует, но использует команды в виде слов текста, что гораздо интереснее Паскаля. Несмотря, на простоту реализации в программе реализованы такие понятия как переменные, ветвления и процедуры.

Информация о программе

Скачивание программы


Рекомендованный софт

Программа предназначена для удобного просмотра и удаления установленных в системе компонентов (объектов) ActiveX.

Audio Grabber - это легкая в использовании и мощная программа для захвата и записи аудио. Вы можете делать свои WAV/MP3/WMA файлы.

Мнения о программе:

Матвей
[о версии «Черепашка 1.12»]

Не получается скачать! И через MediaGet и через прямую ссылку, и выдаёт что ошибка 404!

Аноним
[о версии «Черепашка 1.12»]

Это очень классная и полезная программа для информатики. Всем советую.

Аноним
[о версии «Черепашка 1.12»]

Мы ее 2жды проходили, она клевая, хочу ее

28 Февраля, 2018

алька
[о версии «Черепашка 1.12»]

Сделайте так :
повторить 50 вперед 200
налево 145
>.

Крутой Расул
[о версии «Черепашка 1.12»]

Очень понравилось, я влюблен в эту программуЛАРИН РУЛИТ!!

Аноним
[о версии «Черепашка 1.12»]

> Я ничего не понял!Очень сложная программа! Очень, Очень.

Аноним
[о версии «Черепашка 1.12»]

Я очень люблю алплого

Эльвин
[о версии «Черепашка 1.12»]

Я ничего не понял!Очень сложная программа! Очень, Очень.

Аноним
[о версии «Черепашка 1.12»]

24 Февраля, 2016

Аноним
[о версии «Черепашка 1.12»]

Когда у нас был урок информатики, мы изучали эту тему, мне очень понравилась эта программа я её хочу.

17 Сентября, 2013

Полезные программы

В состав демки вошли два трека для режима Quick Race, три трека для режима Challenge и три модели гоночных болидов.

Драйвер планшетного сканера Mustek 1248UB. Версия драйвера предназначена для операционных систем Microsoft Windows XP/2000/98/Me/Vista (32-64bit).

Программа для эмуляции CD/DVD приводов. Alcohol 52% позволяет создавать точные копии дисков и загружать их в виртуальные накопители.

Читайте также: