{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Практические задания\n", "\n", "## Векторы\n", "\n", "Реализуйте класс `Vector3D`, который будет поддерживать все линейные операции: сложение, вычитание, умножение на число, а также скалярное `*` и векторное произведение `@`. \n", "\n", "## Алгебра функций\n", "\n", "Доработайте пример из подраздела [](call_obj) следующим образом. \n", "\n", "Реализуйте класс `Function`, который должен инкапсулировать в себе функцию одного аргумента и сам быть вызываемым, а кроме этого\n", "- поддерживать действие арифметических операций на функции. Считать, что, например, $(f + g)(x) = f(x) + g(x)$, $(-f)(x)=-f(x)$ и т.п. \n", "\n", "```python\n", "h = f + g # h(x) = f(x) + g(x)\n", "```\n", "\n", "- поддерживать композицию как прямым вызовом класса `Composition`, так и с помощью какого-нибудь свободного оператора (например, `<<`, чтобы подчеркнуть порядок вызова функций).\n", "```python\n", "h = f << g # h(x) = f(g(x))\n", "```\n", "- Конструктор класса `Composition` должен принимать произвольное количество функций на вход:\n", "```python\n", "f = Composition(f1, f2, f3, f4) # f(x) = f1(f2(f3(f4(x))))\n", "```\n", "- *Предусмотрите следующее увеличение производительности последующих вызовов объекта. Если в композиции подряд встречаются взаимообратные функции (например, `Composition(math.log, math.exp)`), то или уберите их, или замените их на тождественную функцию. \n", "```python\n", "Composition(abs, math.log, math.exp, math.sin) \n", "# то же самое, что и \n", "Composition(abs, math.sin)\n", "```\n", "\n", "Продумайте иерархию классов: количество и роль классов, в каком отношении они должны находится.\n", "```python\n", "from collections.abc import Callable\n", "\n", "\n", "class Function(Callable):\n", " pass\n", "```\n", "\n", "\n", "## Односвязный список\n", "\n", "Реализуйте структуру данных [связанный список](https://ru.wikipedia.org/wiki/%D0%A1%D0%B2%D1%8F%D0%B7%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA) в виде типа данных `LinkedList`, узлы которого должны содержать в себе данные и ссылку на следующий элемент. Кроме этого должна быть возможность\n", "- итерироваться по `LinkedList` в цикле, \n", "- добавлять элементы в конец списка, \n", "- удалять первый элемент списка с заданным значением в данных.\n", "\n", "```python\n", "from collections.abc import Iterable\n", "\n", "class LinkedList(Iterable):\n", " def __iter__(self):\n", " pass\n", "\n", " def append(self, value):\n", " pass\n", "\n", " def delete_first(self, value):\n", " pass\n", "```\n", "\n", "- *реализуйте индексацию списка." ] } ], "metadata": { "language_info": { "name": "python" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }