diff --git a/content/images/lab2/butterfly.gif b/content/images/lab2/butterfly.gif new file mode 100644 index 0000000..60b976f Binary files /dev/null and b/content/images/lab2/butterfly.gif differ diff --git a/content/images/lab2/circle.gif b/content/images/lab2/circle.gif new file mode 100644 index 0000000..f92b2b5 Binary files /dev/null and b/content/images/lab2/circle.gif differ diff --git a/content/images/lab2/example.gif b/content/images/lab2/example.gif new file mode 100644 index 0000000..325b1b7 Binary files /dev/null and b/content/images/lab2/example.gif differ diff --git a/content/images/lab2/flower.gif b/content/images/lab2/flower.gif new file mode 100644 index 0000000..dd17741 Binary files /dev/null and b/content/images/lab2/flower.gif differ diff --git a/content/images/lab2/nested_rectangles.gif b/content/images/lab2/nested_rectangles.gif new file mode 100644 index 0000000..7caa3e3 Binary files /dev/null and b/content/images/lab2/nested_rectangles.gif differ diff --git a/content/images/lab2/rect_spiral.gif b/content/images/lab2/rect_spiral.gif new file mode 100644 index 0000000..6eb221f Binary files /dev/null and b/content/images/lab2/rect_spiral.gif differ diff --git a/content/images/lab2/rectangle.gif b/content/images/lab2/rectangle.gif new file mode 100644 index 0000000..0254c0a Binary files /dev/null and b/content/images/lab2/rectangle.gif differ diff --git a/content/images/lab2/regular_polygon.gif b/content/images/lab2/regular_polygon.gif new file mode 100644 index 0000000..4a5e66f Binary files /dev/null and b/content/images/lab2/regular_polygon.gif differ diff --git a/content/images/lab2/smile.gif b/content/images/lab2/smile.gif new file mode 100644 index 0000000..5e74e41 Binary files /dev/null and b/content/images/lab2/smile.gif differ diff --git a/content/images/lab2/spider.gif b/content/images/lab2/spider.gif new file mode 100644 index 0000000..82465cd Binary files /dev/null and b/content/images/lab2/spider.gif differ diff --git a/content/images/lab2/spiral.gif b/content/images/lab2/spiral.gif new file mode 100644 index 0000000..62c0c22 Binary files /dev/null and b/content/images/lab2/spiral.gif differ diff --git a/content/images/lab2/spring.gif b/content/images/lab2/spring.gif new file mode 100644 index 0000000..0377dab Binary files /dev/null and b/content/images/lab2/spring.gif differ diff --git a/content/images/lab2/star11.gif b/content/images/lab2/star11.gif new file mode 100644 index 0000000..447304f Binary files /dev/null and b/content/images/lab2/star11.gif differ diff --git a/content/images/lab2/star5.gif b/content/images/lab2/star5.gif new file mode 100644 index 0000000..ca7d9be Binary files /dev/null and b/content/images/lab2/star5.gif differ diff --git a/content/lab2.rst b/content/lab2.rst new file mode 100644 index 0000000..bd038f4 --- /dev/null +++ b/content/lab2.rst @@ -0,0 +1,233 @@ +Практика: Черепаха +################## + +:date: 2017-09-01 09:00 +:lecture_link: https://youtu.be/KdZ4HF1SrFs + +.. default-role:: code +.. contents:: Содержание + +Черепаха +======== + +Стандартная библиотека Python содержит модуль `turtle`, предназначенный для обучения программированию. Этот модуль +содержит набор_ функций, позволяющих управлять черепахой. Черепаха умеет выполнять небольшой набор команд, а именно: + +.. _набор: https://docs.python.org/3/library/turtle.html#methods-of-rawturtle-turtle-and-corresponding-functions + ++-------------+--------------------------------------------+ +| Команда | Значение | ++=============+============================================+ +| 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`: + +.. code-block:: python + + import turtle + + turtle.shape('turtle') + turtle.forward(50) + turtle.left(90) + turtle.forward(50) + turtle.left(90) + turtle.forward(50) + turtle.right(90) + turtle.forward(50) + turtle.right(90) + turtle.forward(50) + +.. image:: {filename}/images/lab2/example.gif + +Упражнение №2: буква S +---------------------- + +Сохраните и выполните предыдущую программу. Убедитесь в том, что черепаха работает. + +Упражнение №3: квадрат +---------------------- + +Нарисуйте квадрат. Пример: + +.. image:: {filename}/images/lab2/rectangle.gif + +Упражнение №4: окружность +------------------------- + +Нарисуйте окружность. Воспользуйтесь тем фактом, что правильный многоугольник с большим числом сторон будет выглядеть +как окружность. Пример: + +.. image:: {filename}/images/lab2/circle.gif + +Упражнение №5: больше квадратов +------------------------------- + +Нарисуйте 10 вложенных квадратов. + +.. image:: {filename}/images/lab2/nested_rectangles.gif + +Упражнение №6: паук +------------------- + +Нарисуйте паука с n лапами. Пример n = 12: + +.. image:: {filename}/images/lab2/spider.gif + +Упражнение №7: спираль +---------------------- + +Нарисуйте спираль. См. теорию_. Пример: + +.. _теорию: https://ru.wikipedia.org/wiki/%D0%90%D1%80%D1%85%D0%B8%D0%BC%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0_%D1%81%D0%BF%D0%B8%D1%80%D0%B0%D0%BB%D1%8C + +.. image:: {filename}/images/lab2/spiral.gif + +Упражнение №8: квадратная «спираль» +----------------------------------- + +Нарисуйте «квадратную» спираль. Пример: + +.. image:: {filename}/images/lab2/rect_spiral.gif + +Написание функций +----------------- + + +Как было сказано раньше, функции — это своего рода готовые кирпичики, из которых строится программа. До этого момента мы +*использовали* стандартные функции (`print`, `input`, функции модуля `turtle`), теперь настало время *написать* функцию: + +.. code-block:: pycon + + >>> def hello(name): + ... print('Hello, ', name, '!') + ... + >>> hello('world') + Hello, world! + +Это простейший пример функции, которая принимает в качестве **параметра** имя, а затем выводит на экран сообщение +`Hello, <имя>`. Как видно из примера, функции в языке Python описываются при помощи ключевого слова `def`: + +.. code-block:: python + + def Имя_функции(параметр_1, параметр_2, ...): + Блок_операций + +Так же, как и в случае циклов и условных операторов, **тело** функции выделяется при помощи отступов. + +Вызов функции осуществляется по имени с указанием параметров: + +.. code-block:: python + + hello('world') + +Внутри функции можно использовать те же синтаксические конструкции, что и вне её — циклы, ветвления, можно даже +описывать новые функции. Естественно, внутри функции можно работать и с переменными. + +Написанная ранее функция имеет особенность — она просто просто выводит текст на экран и не возвращает никакого +результата. Многие функции, напротив, занимаются вычислением какого-либо значения, а затем **возвращают** его тому, кто +эту функцию **вызвал**. В качестве примера можно рассмотреть функцию для сложения двух чисел: + +.. code-block:: pycon + + >>> def sum(a, b): + ... return a + b + ... + >>> sum(1, 2) + 3 + >>> sum(5, -7) + -2 + +Для возврата значения из функции используется оператор `return`: в качестве параметра указывается значение, которое +требуется вернуть. + + +Упражнение №9: правильные многоугольники +---------------------------------------- + +Нарисуйте 10 вложенных правильных многоугольников. Используйте функцию, рисующую правильный n-угольник. Формулы_ для +нахождения радиуса описанной окружности. Пример: + +.. _Формулы: https://www.fxyz.ru/%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D1%8B_%D0%BF%D0%BE_%D0%B3%D0%B5%D0%BE%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D0%B8/%D0%BF%D0%BB%D0%BE%D1%81%D0%BA%D0%B8%D0%B5_%D1%84%D0%B8%D0%B3%D1%83%D1%80%D1%8B/%D0%B2%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%B8_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%B8/%D1%80%D0%B0%D0%B4%D0%B8%D1%83%D1%81_%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%BD%D0%BE%D0%B9_%D0%BE%D0%BA%D1%80%D1%83%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8/%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D0%B3%D0%BE%D0%BB%D1%8C%D0%BD%D0%B8%D0%BA%D0%B0/ + +.. image:: {filename}/images/lab2/regular_polygon.gif + +Упражнение №10: «цветок» +------------------------ + +Нарисуйте «цветок» из окружностей. Используйте функцию, рисующую окружность. Пример: + +.. image:: {filename}/images/lab2/flower.gif + + +Упражнение №11: «бабочка» +------------------------- + +Нарисуйте «бабочку» из окружностей. Используйте функцию, рисующую окружность. Пример: + +.. image:: {filename}/images/lab2/butterfly.gif + +Упражнение №12: пружина +----------------------- + +Нарисуйте пружину. Используйте функцию, рисующую дугу. Пример: + +.. image:: {filename}/images/lab2/spring.gif + + +Упражнение №13: смайлик +----------------------- + +Нарисуйте смайлик с помощью написанных функций рисования круга и дуги. Пример: + +.. image:: {filename}/images/lab2/smile.gif + +Упражнение №14: звезды +---------------------- + +Нарисуйте две звезды: одну с 5 вершинами, другую — с 11. Используйте функцию, рисующую звезду с n вершинами. Пример: + +.. image:: {filename}/images/lab2/star5.gif +.. image:: {filename}/images/lab2/star11.gif + + +Красивый код на Python +=============================================== + +Важная мысль создателя языка Python, `Гвидо ван Россума`: **код читается намного больше раз, чем пишется**. + +.. _`Гвидо ван Россума`: https://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D1%81%D1%81%D1%83%D0%BC,_%D0%93%D0%B2%D0%B8%D0%B4%D0%BE_%D0%B2%D0%B0%D0%BD + +Поэтому существуют рекомендации о стиле кодирования PEP8. Они направлены на то, чтобы улучшить читаемость и сделать его согласованным между большим числом проектов. В идеале, весь код будет написан в едином стиле, и любой сможет легко его прочесть. + +На русском можно прочитать про PEP8 тут_, на английском — здесь_. + +.. _тут: http://pythonworld.ru/osnovy/pep-8-rukovodstvo-po-napisaniyu-koda-na-python.html +.. _здесь: https://www.python.org/dev/peps/pep-0008/">https://www.python.org/dev/peps/pep-0008/