Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added content/images/lab2/butterfly.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/circle.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/example.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/flower.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/nested_rectangles.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/rect_spiral.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/rectangle.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/regular_polygon.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/smile.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/spider.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/spiral.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/spring.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/star11.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added content/images/lab2/star5.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
233 changes: 233 additions & 0 deletions content/lab2.rst
Original file line number Diff line number Diff line change
@@ -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/