diff --git a/content/extra/lab14/2Numpy.ipynb b/content/extra/lab14/2Numpy.ipynb index 6fd70be..edd0a7e 100644 --- a/content/extra/lab14/2Numpy.ipynb +++ b/content/extra/lab14/2Numpy.ipynb @@ -404,7 +404,7 @@ "a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]])\n", "\n", "# Используя слайсинг, созадим матрицу b из элементов матрицы а\n", - "# будем использовать 0 и 1 строку, а так же 1 и 2 столебц\n", + "# будем использовать 0 и 1 строку, а так же 1 и 2 столбец\n", "# [[2 3]\n", "# [6 7]]\n", "b = a[:2, 1:3]\n", diff --git a/content/lab06.rst b/content/lab06.rst index 14d1c7a..f34babf 100644 --- a/content/lab06.rst +++ b/content/lab06.rst @@ -105,12 +105,16 @@ **Важно понимать, что ни classmethod ни staticmethod НЕ являются функциями от конкретного объекта класса и соответственно не принимают -self. Подчеркнем еще раз их различия:** - classmethod принимает cls как -первый параметр, тогда как staticmethod в специальных аргументах не -нуждается - classmethod может получать доступ или менять состояние -класса, в то время как staticmethod нет - staticmethod в целом вообще -ничего не знают про класс. Это просто функция над аргументами, -объявленная внутри класса. +self. Подчеркнем еще раз их различия:** + +- classmethod принимает cls как + первый параметр, тогда как staticmethod в специальных аргументах не + нуждается +- classmethod может получать доступ или менять состояние + класса, в то время как staticmethod нет +- staticmethod в целом вообще + ничего не знают про класс. Это просто функция над аргументами, + объявленная внутри класса. Специальные методы (магические) вида \_ *< param >* \_ @@ -297,6 +301,7 @@ y меньше у левого операнда. Реализуйте свой класс Complex для комплексных чисел, аналогично встроенной реализации complex: + 1. Добавьте инициализатор класса 2. Реализуйте основные математические операции 3. Реализуйте операцию модуля (**abs**, вызываемую как \|c\|) @@ -305,12 +310,13 @@ y меньше у левого операнда. Задача 2: ~~~~~~~~~ + 1. Создайте класс Vector с полями x, y, z определите для него конструктор, -метод __str__, необходимые арифметические операции. -Реализуйте конструктор, который принимает строку в формате "x,y". + метод __str__, необходимые арифметические операции. + Реализуйте конструктор, который принимает строку в формате "x,y". #. Программа получает на вход число N, далее координаты N точек. -Доопределите в классе Vector недостающие операторы, найдите и выведите координаты точки, -наиболее удаленной от начала координат. + Доопределите в классе Vector недостающие операторы, найдите и выведите координаты точки, + наиболее удаленной от начала координат. #. Используя класс Vector выведите координаты центра масс данного множества точек. #. Даны два вектора. Выведите площадь параллелограмма, построенного на заданных векторах. #. Даны три вектора. Выведите объём параллелепипеда, построенного на заданных векторах. diff --git a/content/lab07.rst b/content/lab07.rst index f281d4a..3dc90fb 100644 --- a/content/lab07.rst +++ b/content/lab07.rst @@ -165,7 +165,7 @@ import для нас отлично подойдет. Это будет выгл .. code:: python - # представим, что эта ячейка - текстовый редактор, который мы сохраним под именем simplemath.py + # представим, что эта ячейка - текстовый редактор, который мы сохраним под именем worker.py #import simplemath #from simplemath inpord add,sub,mul,div @@ -209,7 +209,7 @@ __ ../extra/lab7/screen.py Ваша задача: 1. Изучить документацию к библиотеке pygame и код программы. Понять механизм работы программы (как происходит отрисовка кривой, перерасчет точек сглаживания и другие нюансы реализации программы) -2. Провести рефакторниг кода, переписать программу в ООП стиле с использованием классов и наследования. +2. Провести рефакторинг кода, переписать программу в ООП стиле с использованием классов и наследования. Реализовать класс 2-мерных векторов `Vec2d` . В классе следует определить методы для основных математических операций, необходимых для работы с вектором. Добавить возможность вычислять длину вектора с использованием функции len(a) и метод `int_pair`, который возвращает кортеж из двух целых чисел (текущие координаты вектора). Реализовать класс замкнутых ломаных `Polyline` с методами отвечающими за добавление в ломаную точки (`Vec2d`) c её скоростью, пересчёт координат точек (`set_points`) и отрисовку ломаной (`draw_points`). Арифметические действия с векторами должны быть реализованы с помощью операторов, а не через вызовы соответствующих методов. @@ -222,41 +222,41 @@ __ ../extra/lab7/screen.py Задача 3\* ДНК ~~~~~~~~~~~~~~ -Реализуйте классы для ДНК (двойная цепочк) и РНК (одинарная цепочка). +Реализуйте классы для ДНК (двойная цепочка) и РНК (одинарная цепочка). Данные структуры данных должны поддерживать следующие возможности: 1. Создавать структуру из строк. Обратите внимание, что в ДНК встречаются -только азотистые основания ATGC, а в РНК (AUGC) поэтому если во -входной строке содержались другие символы, необходимо поднимать ошибку -(Exception). + только азотистые основания ATGC, а в РНК (AUGC) поэтому если во + входной строке содержались другие символы, необходимо поднимать ошибку + (Exception). 2. Поддерживают индексацию. РНК по индексу возвращает -i-ое азотистое основание, ДНК - пару азотистых оснований -(соответствующие первой и второй цепочке) + i-ое азотистое основание, ДНК - пару азотистых оснований + (соответствующие первой и второй цепочке) 3. РНК может возвращать -комплиментарную ДНК (каждому азотистому основанию из РНК соответсвует -соответсвующее основание для первой цепочки ДНК: :math:`A \to T`, -:math:`U \to A`, :math:`G \to C`, :math:`C \to G`. Вторая цепочка ДНК -строится комплиментарной первой строчке ДНК: :math:`A \to T`, -:math:`T \to A`, :math:`G \to C`, :math:`C \to G`) + комплиментарную ДНК (каждому азотистому основанию из РНК соответствует + соответствующее основание для первой цепочки ДНК: :math:`A \to T`, + :math:`U \to A`, :math:`G \to C`, :math:`C \to G`. Вторая цепочка ДНК + строится комплиментарной первой строчке ДНК: :math:`A \to T`, + :math:`T \to A`, :math:`G \to C`, :math:`C \to G`) 4. РНК, как и ДНК, -могут складываться путем склеивания ("AUUGAACUA" + "CGGAAA" = -"AUUGAACUACGGAAA"). У ДНК склеиваются соответствующие цепочки (["ACG", -"TGC"] + ["TTTAAT", "AAATTA"] = ["ACGTTTAAT", "TGCAAATTA"]) + могут складываться путем склеивания ("AUUGAACUA" + "CGGAAA" = + "AUUGAACUACGGAAA"). У ДНК склеиваются соответствующие цепочки (["ACG", + "TGC"] + ["TTTAAT", "AAATTA"] = ["ACGTTTAAT", "TGCAAATTA"]) 5. РНК могут перемножаться друг с другом: каждое азотистое основание -результирующей РНК получается случайным выбором одного из двух -соответсвующих родительских азотистых оснований. Если одна из цепочек -длиннее другой, то перемножение происходит с начала, когда одна из -цепочек закончится оставшийся хвост другой переносится без изменений. -|Умножение РНК| -6. ДНК могут перемножаться друг с другом: ПЕРВЫЕ -цепочки каждой из ДНК перемножаются по такому же приницпу, как -перемножаются РНК выше. Вторая цепочка результирующей ДНК строится как -комплиментарная первой + результирующей РНК получается случайным выбором одного из двух + соответсвующих родительских азотистых оснований. Если одна из цепочек + длиннее другой, то перемножение происходит с начала, когда одна из + цепочек закончится оставшийся хвост другой переносится без изменений. +6. |Умножение РНК| ДНК могут перемножаться друг с другом: ПЕРВЫЕ + цепочки каждой из ДНК перемножаются по такому же приницпу, как + перемножаются РНК выше. Вторая цепочка результирующей ДНК строится как + комплиментарная первой 7. Цепочки РНК и первую и вторую у ДНК можно -проверять на равенство + проверять на равенство 8. Оба класса должны давать осмысленный вывод -как при print, так и просто при вызове в ячейке -| **Обдумайте и создайте необходимые и, возможно, вспомогательные + как при print, так и просто при вызове в ячейке + +**Обдумайте и создайте необходимые и, возможно, вспомогательные классы, настройте наследование, если требуется. Полученная структура должна быть адекватной и удобной, готовой к простому расширению функционала, если потребуется** diff --git a/content/lab08.rst b/content/lab08.rst index b8e2e5d..c8e4234 100644 --- a/content/lab08.rst +++ b/content/lab08.rst @@ -511,7 +511,7 @@ k и возвращать все возможные комбинации из с ============= В функцию передается список списков. Нужно вернуть максимум, который -достигает выражение $(a\_1^2 + a\_2^2 + ... + a\_n^2) % m $. Где +достигает выражение :math:`(a\_1^2 + a\_2^2 + ... + a\_n^2) \% m`. Где :math:`a_i` --- максимальный элемент из :math:`i`-ого списка (использовать функцию из itertools) diff --git a/content/lab09.rst b/content/lab09.rst index 381fa32..5a707f1 100644 --- a/content/lab09.rst +++ b/content/lab09.rst @@ -59,7 +59,7 @@ Jupyter-notebook def get_next(self): return self.nxt - class LinkedLiset: + class LinkedList: def __init__(self): self.start = None self.length = 0 @@ -84,7 +84,7 @@ Jupyter-notebook current = self.start for i in range(idx): current = current.get_next() - current.get_value() + return current.get_value() def __iter__(self): self.__curr = self.start @@ -99,7 +99,7 @@ Jupyter-notebook .. code:: python - lst = LinkedLiset() + lst = LinkedList() for i in range(10): lst.add(i*i) @@ -441,7 +441,7 @@ Jupyter-notebook 1) Корутина ``connect_user`` принимает данные авторизации от пользователя, открывает файл с названием .txt и создает на его основе - корутину ``цrite_to_file`` + корутину ``write_to_file`` 2) Корутина ``write_to_file(f_obj)`` записывает переданное планировщиком задач сообщение пользователя, которые записываются в файловый объект, diff --git a/content/lab10.rst b/content/lab10.rst index 75d9708..a45d691 100644 --- a/content/lab10.rst +++ b/content/lab10.rst @@ -352,7 +352,7 @@ http://cs.mipt.ru/advanced_python/lessons/lab2.html multiprocessing =============== Библиотека multiprocessing позволяет организовать параллелизм вычислений за счет создания подпроцессов. Т.к. каждый процесс выполняется независимо от других, этот метод параллелизма позволяет избежать проблем с GIL. -Предоставляемый библиотекой API схож с тем, что есть в threading, хотя есть уникальные вещи. Создание процесса происходит поутем создания объекта класса Process. +Предоставляемый библиотекой API схож с тем, что есть в threading, хотя есть уникальные вещи. Создание процесса происходит путем создания объекта класса Process. Аргументы конструктора аналогичны тем, что есть в конструкторе Thread. В том числе аргумент daemon позволяет создавать служебные процессы. Служебные процессы завершаются вместе с родительским процессом и не могут порождать свои подпроцессы. Простой пример работы с библиотекой: @@ -580,4 +580,4 @@ map\_async, apply\_async - неблокирующие. При их вызове, .. _`Архив с файлом`: https://drive.google.com/file/d/1Jgy1u_meH7zpMWt4dr2j4Xx5VZjzJ6AD/view?usp=sharing -Не забудьте замерить время работы. Примерное время работы на моем компьютере для 10 строк в 1 процесс - 300 сек. \ No newline at end of file +Не забудьте замерить время работы. Примерное время работы на моем компьютере для 10 строк в 1 процесс - 300 сек. diff --git a/content/lab11.rst b/content/lab11.rst index d5c2a0d..aee3651 100644 --- a/content/lab11.rst +++ b/content/lab11.rst @@ -83,7 +83,7 @@ В этом примере: -1. Упарвление будет передано в корутину main; +1. Управление будет передано в корутину main; 2. Напечатается hello; 3. Управление будет передано в корутину sleep; 4. В течении одной секунды программа "спит"; diff --git a/content/lab14.rst b/content/lab14.rst index 4068758..614e0eb 100644 --- a/content/lab14.rst +++ b/content/lab14.rst @@ -42,17 +42,17 @@ Самый низкий уровень взаимодействия — передача информации (битов) между устройствами через сетевые кабеля, радиоканал и пр. -Канальный уровень — подразумевает работу с кадрами (frame) обеспечивая взаимодействие на физическом уровне и контроль ошибок. Именно к этому уровню относяться Ethernet, PPPoE и прочие. К этому уровню также относят драйвер сетевой карты, фактически обеспечивающий взаимодействие канального уровня с сетевым. +Канальный уровень — подразумевает работу с кадрами (frame) обеспечивая взаимодействие на физическом уровне и контроль ошибок. Именно к этому уровню относятся Ethernet, PPPoE и прочие. К этому уровню также относят драйвер сетевой карты, фактически обеспечивающий взаимодействие канального уровня с сетевым. -Сетевой уровень предназначен для определения пути передачи данных. Отвечает за трансляцию логических адресов и имён в физические, определение кратчайших маршрутов, коммутацию и маршрутизацию, отслеживание неполадок и «заторов» в сети. К этому уровню относяться такие протоколы, как IP, RIP и пр. +Сетевой уровень предназначен для определения пути передачи данных. Отвечает за трансляцию логических адресов и имён в физические, определение кратчайших маршрутов, коммутацию и маршрутизацию, отслеживание неполадок и «заторов» в сети. К этому уровню относятся такие протоколы, как IP, RIP и пр. Транспортный уровень модели предназначен для обеспечения надёжной передачи данных от отправителя к получателю. К данному уровню относятся протоколы как TCP, UDP. -Сеансовый уровень модели обеспечивает поддержание сеанса связи, позволяя приложениям взаимодействовать между собой длительное время. Уровень управляет созданием/завершением сеанса, обменом информацией, синхронизацией задач, определением права на передачу данных и поддержанием сеанса в периоды неактивности приложений. Сюда относяться протоколы PPTP, SOCKS и пр. +Сеансовый уровень модели обеспечивает поддержание сеанса связи, позволяя приложениям взаимодействовать между собой длительное время. Уровень управляет созданием/завершением сеанса, обменом информацией, синхронизацией задач, определением права на передачу данных и поддержанием сеанса в периоды неактивности приложений. Сюда относятся протоколы PPTP, SOCKS и пр. Уровень представления обеспечивает преобразование протоколов и кодирование/декодирование данных. Запросы приложений, полученные с прикладного уровня, на уровне представления преобразуются в формат для передачи по сети, а полученные из сети данные преобразуются в формат приложений. На этом уровне может осуществляться сжатие/распаковка или шифрование/дешифрование, а также перенаправление запросов другому сетевому ресурсу, если они не могут быть обработаны локально. -Прикладной уровень — верхний уровень модели, обеспечивающий взаимодействие пользовательских приложений с сетью. К этому уровню относяться такие протоколы, как HTTP, FTP и пр. +Прикладной уровень — верхний уровень модели, обеспечивающий взаимодействие пользовательских приложений с сетью. К этому уровню относятся такие протоколы, как HTTP, FTP и пр. Данная выше модель — эталонная. Реальная же модель, на которой работает современный интернет - `стек протоколов TCP/IP`__ diff --git a/content/lab16.rst b/content/lab16.rst index 3df4159..00d3158 100644 --- a/content/lab16.rst +++ b/content/lab16.rst @@ -279,7 +279,7 @@ __ {filename}/extra/lab14/2Numpy.ipynb a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) # Используя слайсинг, созадим матрицу b из элементов матрицы а - # будем использовать 0 и 1 строку, а так же 1 и 2 столебц + # будем использовать 0 и 1 строку, а так же 1 и 2 столбец # [[2 3] # [6 7]] b = a[:2, 1:3] diff --git a/content/lab18.rst b/content/lab18.rst index 47236db..37f5990 100644 --- a/content/lab18.rst +++ b/content/lab18.rst @@ -521,7 +521,7 @@ DataFrame df Создание анимации ----------------- -Покажемсоздание анимации на примере построения разделябщей прямой между +Покажем создание анимации на примере построения разделяющей прямой между данными: https://hsto.org/webt/h7/vn/dt/h7vndtkzlinfkyoqzpcmjxecubu.gif из статьи про SVM https://habr.com/ru/company/ods/blog/484148/ diff --git a/content/lab19.rst b/content/lab19.rst index 23e75bb..9d4a120 100644 --- a/content/lab19.rst +++ b/content/lab19.rst @@ -160,7 +160,7 @@ BOOLEAN в SQLite представлен типом INTEGER со значени Отдельное внимание стоит уделить хранению даты/времени. В SQLite под это также нет специального типа. Однако TEXT, REAL и INTEGER могут быть использованы для этих целей. -В виде текста вермя хранится в формате `YYYY-MM-DD HH:MM:SS.SSS`, хотя миллисекунды можно опустить. +В виде текста время хранится в формате `YYYY-MM-DD HH:MM:SS.SSS`, хотя миллисекунды можно опустить. Для того, чтобы получить текущее время в этом представлении, можно использовать функцию `DATETIME("now")`. Полученный результат будет отображать текущее время по UTC (Coordinated Universal Time). Московское время – UTC+3. Если необходимо получить локальное текущее время, то `DATETIME("now", "localtime")`. diff --git a/content/lab22.rst b/content/lab22.rst index 4c38c52..fa4e28c 100644 --- a/content/lab22.rst +++ b/content/lab22.rst @@ -137,7 +137,7 @@ Blueprint создаётся по аналогии с простым сайто __ {static}/extras/lab20/flaskr.zip -__ https://flask.palletsprojects.com/en/1.1.x/ +__ https://flask.palletsprojects.com/en/1.1.x/tutorial/ Файл `__init__.py` выглядит следующим образом: @@ -419,5 +419,5 @@ __ https://flask.palletsprojects.com/en/1.1.x/ ====== #. Скачайте себе и запустите сайт из обучения flask. -#. Допишите в таблицу пользователей поля с email-ом пользователя его уровенем доступа (админ или простой пользователь) +#. Допишите в таблицу пользователей поля с email-ом пользователя и его уровенем доступа (админ или простой пользователь) #. Напишите свой модуль, позволяющий администратору изменять информацию обо всех пользователях сайта diff --git a/content/lab23.rst b/content/lab23.rst index 70304f4..0df11cb 100644 --- a/content/lab23.rst +++ b/content/lab23.rst @@ -376,7 +376,7 @@ QFormLayout для добавления элементов использует завершается. Закрытие окна логина вручную приводит к завершению программы. Для создания логин формы успользуйте QDialog, для окон с уведомлениями — QMessageBox. -*Дополнительно: после неверной пары программа не завершается, а дается возможность ввести логин/пароль заного.* +*Дополнительно: после неверной пары программа не завершается, а дается возможность ввести логин/пароль заново.* Базовая 2D графика ------------------