Основы программирования

Python

Ресурсы

Задания (весна 2022)

  1. На основе блокнота «Метод Гаусса решения СЛАУ» реализовать метод Гаусса решения СЛАУ с использованием векторных возможностей numpy или без. Программный код для проверки в блокноте уже есть.

  2. Сделать модуль или пакет из одной из своих уже решённых задач. В будущем рекомендуется использовать его в веб-приложении и в приложении с GUI.

  3. Вдохновляясь примером «Компиляция Python разными способами», инсталлируйте Cython (требует компилятора C или MyPy (не требует), скомпилируйте свой модуль, и проверьте, что он импортируется. Не забудьте про аннотации типов. Выполняя это задание также выложите бинарник (.pyd под Windows или .so в Unix-подобных системах) в репозиторий (вообще обычно так стараются не делать, но в данном случае можно).

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

  5. ⚛️Взять любые свои экспериментальные данные с и проверить при помощи критерия Колмогорова-Смирнова (используя Scipy и Pandas), соответствуют ли они ожидаемому распределению. Данные к решению приложить.

  6. 🧬Основываясь на примерах, полученных знаниях, технической эрудиции и смекалке, реализовать любую несложную программу с GUI (желательно PyQT5), возможно сделав графический интерфейс для одной из своих предыдущих программ.

  7. 🧬Вычислить какой-либо определённый интеграл, пользуясь методом Монте-Карло. Повысить точность при помощи multiprocessing или аналогичного средства.

  8. 🧬Ускорить при помощи компиляции (любым из способов, включая numba) любую свою программу. Метод Монте-Карло — хороший кандидат.

  9. Гуманитарное задание Написать от нескольких предложений до нескольких абзацев своих мыслей касательно этого текста (можно по-русски 🙂). Положить в текстовый файл и выставить у себя в репозитории. [задание для всех, но для биоинформатиков чуть позже].

  10. Реализовать веб-приложение, отталкиваясь от предоставленного примера. Можно реализовать веб-интерфейс к какому-нибудь своему приложению. [задание для всех, но для биоинформатиков чуть позже].

  11. 🧬Скачать где угодно или попросить у физиков (=)) любые экспериментальные данные с известным ожидаемым распределением и проверить при помощи критерия Колмогорова-Смирнова (используя Scipy и Pandas), соответствуют ли они ожидаемому распределению. Данные к решению приложить. В качестве варианта — можно решить вместе со следующим заданием, см. курсив ниже.

  12. 🧬Попробовать при помощи любого фреймворка генетического программирования (примеры см. тут блокноты с примерами) найти субоптимальное решения любой задачи. Можно требующей перебора, можно ещё какой-нибудь. В качестве варианта — можно решить с предыдущим заданием — подобрать значения случайной величины, чтобы критерий Колмогорова-Смирнова классифицировал их, как распределённые нужным вам образом.

  13. ⚛️Базы данных: написать любую интерактивную (консоль, GUI или Web) программу, которая позволила бы редактировать данные в БД. БД можно взять с данными о студентах из лекции. К примеру, можно при помощи программы ставить студентам оценки.

Выполненные задания

В таблице ниже лишь сводка, комментарии открывать по ссылке в таблице.

Основы программирования (Python), осень 2018
АУ: Python биоинформатики, 2021-2022

Ресурсы — слайды, листинги, блокноты

Перечисленные блокноты также доступны в режиме предпросмотра GitHub (с некоторыми ошибками, но GiHub умеет их показывать).

  1. Слайды: Python: что это, откуда и зачем

  2. Блокнот: Ответы на вопросы ознакомительного теста

  3. Слайды: Немного практики

  4. Блокнот: Основы

  5. Блокнот: Ряд Тейлора

  6. Блокнот: Кунг фу графиков, поверхностей и гистограмм

  7. Блокнот: Гаубица Д-30 и «Катюша»

  8. Примеры на черепашью графику — капуста, борщевик, а также летящие тела с управлением

  9. Слайды: Статический анализ, анализ типов, модульные тесты

  10. Блокнот: Задача N тел и второй закон Кеплера

  11. Блокнот: Определяем свои пространства

  12. Блокнот: Простые задачки для хорошего настроения

  13. Блокнот: Срезы, итераторы и генераторы

  14. Блокнот: Метод Гаусса решения СЛАУ

  15. Блокнот: Just-in-Time компиляция (с numba ничего не заработало? Ладно, можно использовать Google Collab)

  16. Пример: Модуль и пакет

  17. Пример: Компиляция Python разными способами

  18. 🧬Слайды: Параллельное программирование: потоки, процессы, сопрограммы, циклы обработки сообщений и примеры

  19. ⚛️Блокнот: Немного данных и статистики

  20. 🧬Примеры: Декларативный GUI; Множественное наследование

  21. Пример: Простое Web-приложение

  22. Блокнот: Немного данных и статистики

  23. Блокноты: Реляционные БД и ORM

  24. Слайды: Эволюционные алгоритмы и блокноты с примерами

— Вы находитесь здесь —

  1. Слайды: Классификаторы — простейший линейный и на базе нейронной сети

  2. Блокноты: Примеры нейронных сетей

Чеклист перед сдачей заданий

Для автоматической проверки потребуется python -m pip install pylint nbqa. Если после установки инструменты не запускаются, пытаемся заменить pylint на python3 -m pylint и т.д.

  1. Запустить (как минимум, в программе нет синтаксических ошибок)

  2. В зависимости от того, программа или блокнот

    • Программа

      1. Проверить, что программа запускается и работает

      2. Проверить, что PyLint
        pylint --disable=no-member,c-extension-no-member,missing-docstring,invalid-name my_program.py
        ставит балл не менее 5.0

      3. Проверить, что файл .py назван по принципу snake_case.py

    • Блокнот

      1. Kernel → Restart kernel and run all cells, и затем проверить, что весь блокнот запускается и работает

      2. Проверить, что NBQA + PyLint
        nbqa pylint --disable=no-member,c-extension-no-member,missing-docstring,invalid-name,wrong-import-position my_notebook.ipynb
        ставит балл не менее 5.0. Тут добавляется послабление wrong-import-position, поскольку для блокнотов требовать все импорты в начале выглядят не очень адекватно.

      3. Проверить, что файл не назван Untitled.ipynb или .... (1).ipynb и т.д.

  3. Перепроверить, что программа делает то, что подразумевалось автором

  4. Перепроверить, что программа делает то, что подразумевалось преподавателем

Лайфхаки

  • Общие для всех ситуаций опции PyLint удобно не указывать каждый раз, а запомнить их в настройках, как написано здесь. Для Windows: pylint --disable=no-member,c-extension-no-member,missing-docstring,invalid-name --generate-rcfile >%HOMEPATH%\.pylintrc

  • Если не уверены в своём вкусе, можно воспользоваться инструментом autopep8, он по крайней мере отформатирует ваш код красиво

Задания для зачёта

Осень 2021

Кому не хватило баллов за д.з., до 3 баллов могут заработать, продемонстрировав и объяснив, что происходит по трём или меньше случайным вопросам:

  1. Любым способом на своём компьютере создать программу на Python, запустить её при помощи командной оболочки

  2. Клонировать свой репозиторий локально; не пользуясь сайтом GitHub, добавить в него файл, зафиксировать изменения; отправить изменения на GitHub; продемонстрировать полученный файл на сайте

  3. Клонировать свой репозиторий локально; не пользуясь сайтом GitHub, переименовать и удалить файл(ы), зафиксировать изменения; отправить изменения на GitHub; продемонстрировать полученный файл на сайте

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

  5. В программе на Python или в блокноте на своём компьютере продемонстрировать циклы for и while; продемонстрировать работу с объектами range

  6. В программе на Python или в блокноте на своём компьютере продемонстрировать написание и вызов функций; в том числе, продемонстрировать рекурсивный вызов функций

  7. В программе на Python или в блокноте на своём компьютере продемонстрировать работу со списками —индексирование, добавление, удаление элемента, вырезку

  8. В программе на Python или в блокноте на своём компьютере продемонстрировать рисование графиков функций и параметрических графиков при помощи matplotlib

  9. В программе на Python или в блокноте на своём компьютере продемонстрировать определение операций для своего класса при помощи magic-методов

  10. В программе на Python или в блокноте на своём компьютере показать создание и использование классов, наследование и переопределение методов; продемонстрировать вызов различных реализаций метода в пределах одной иерархии наследования

Задания (осень 2021)

0. Инсталлировать программное обеспечение из списка ниже

  1. Регистрация, создание репозитория, подключение к Discord

    • До 13.09 зарегистрировать аккаунт на GitHub (или GitLab, или BitBucket, или ещё что найдёте), создать репозиторий и заполнить форму

    • До 13.09 зарегистрироваться в Discord, зайти в чатик, поставить себе там ник в виде фамилии, имени [отчества], со всеми радостно поздороваться

  2. Первая программа — на основе этой — прокомментировать (комментарий — от # до конца строки) каждую строку, которую можно, рекомендуется модифицировать функцию

  3. Публикация кода на GitHub в своём репозитории

    • 29.09.2021 мы не успели посмотреть, как пользоваться Git и GitHub. Минимум есть на слайде, но его явно маловато. Поэтому дедлайн такой далёкий. Но кто чувствует в себе силы — можно сделать самостоятельно.

  4. Сделать блокнот, в котором будет выполняться вычисление функции при помощи частичной суммы ряда Тейлора и проверку того, как ведёт себя график получившейся функции. За основу можно взять этот блокнот

  5. Пользуясь блокнотом Гаубица Д-30 и «Катюша», допрограммировать физическую модель реактивного снаряда (а можно нафантазировать и ещё что-нибудь похитрее).

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

  7. Реализовать алгоритм Рабина-Карпа поиска вхождений образца в строку таким образом, чтобы он проходил тесты: дописать содержательную часть тела функции в этом примере.

  8. Пользуясь для вдохновения блокнотом Функции, декораторы, статическая типизация, Lint, сделать, как в нём предлагается, «декоратор с параметром», который из функции делает функцию, применяющуюся заданное количество раз к её же результату.

  9. На основе блокнота «Задача N тел и второй закон Кеплера» сделать класс Universe2D по аналогии с Universe3D, промоделировать движение небесных тел. Желающие могут сделать вектора и всю динамику действительно трёхмерными, но для этого лучше будет сделать отдельную программу, а не блокнот, чтобы matplotlib позволял «крутить» нарисованные орбиты.

  10. На основе блокнота «Задача N тел и второй закон Кеплера» для случая Universe3D численно проверить приблизительное выполнение второго закона Кеплера.

  11. Помедитировать над блокнотом про свои пространства и реализацией многочлена, придумать своё пространство (можно из тех примеров, которые перечислены), желательно кольцо, поле или алгебру, чтобы операций было побольше, реализовать и продемонстрировать операции над ним

  12. Реализовать алгоритм Евклида.

  13. Реализовать расширенный алгоритм Евклида (линейное разложение).

  14. Реализовать функцию проверки данного числа на простоту любым интересным вам способом, также познакомившись с блокнотом.

  15. На основании последнего примера (class Fib6) из блокнота «Срезы, итераторы и генераторы» сделать свой класс, объекты которого могут бесконечно выдавать числа Фибоначчи, значения факториала или элементы другой последовательности, чтобы по нему можно было «бегать» циклом for. Про «бесконечно выдавать» — важно, в этом и была идея! Ограничить-то вывод всегда можно через itertools.islice(my_fibs, 300), например.

Программное обеспечение

Программное обеспечение для Windows устанавливается с официальных сайтов, для Unix-подобных систем — при помощи системного менеджера пакетов.

  • Python 3.10+ (или 3.9+) https://www.python.org/downloads/, очень желательно 64-битный

    • Для Windows:

      • говорим, что хотим изменить настройки

      • ставим галочку на тему того, что надо внести Python в системные пути

      • настройки можно оставить по умолчанию

  • Пакеты для Python — либо при помощи системного пакетного менеджера, либо (например, для Windows) при помощи менеджера Python:

    • Обновление пакетного менеджера (необязательно) python -m pip install --upgrade pip

      • Если не получлось, то попробовать python -m ensurepip и повторить

    • Инсталляция пакетов python -m pip install ipython scipy numpy pandas jupyterlab matplotlib

      • В дальнейшем, если возникнет желание, можно все установленные пакеты обновлять вот таким способом

  • Git

  • Не вредно — IDE. Популярные варианты:

    • Для маленьких программ (наш случай) — любой текстовый редактор + командная строка или совсем простая среда IDLE (под Windows инсталлируется вместе с Python)

    • Для средних программ (тоже наш случай) или «средни» ПК — Visual Studio Code + плагин для Python

    • Для крупных проектов и мощных ПК — JetBrains PyCharm, при наличии Email в домене университета — Professional Edition

Удобный файловый менеджер, позволяющий быстро бегать по файловой системе и редактировать текстовые файлы, например (но не обязательно) двухпанельные Far Manager или Midnight Commander — научиться пользоваться без мышки

  • Любой современный веб-браузер

Содержание курса

Язык программирования Python

  1. История и предназанчение языка, основные свойстваю.

  2. Оболочки Python, IPython, Jupyter Notebook, Jupyter Lab. Система контроля версий Git, основные операции.

  3. Встроенные типы данных языка, операции над ними.

  4. Модули стандартной и внешней библиотек.

  5. Функции. Встроенная документация. Передача параметров, рекурсивные функции. Продвинутая тема — декораторы.

  6. Пользовательские типы данных. Описание классов.

  7. Реализация стандартных операций над пользовательскимим типами. Операции, вызываемые встроенными функциями и операторами.

  8. Реализация собственных модулей.

  9. Промежуточная консультация.

  10. Немного ускоримся: Numba, PyPy, Cython

  11. Работа с массивами данных: чтение/запись CSV, HDF5.

  12. Анализ массивов данных: библиотека Pandas.

  13. Сопроцедуры. AsyncIO — пример того, как Python очень не хочет быть функциональным.

  14. Веб-приложения. Фреймворки для веб-приложений.

  15. Параллельное и распределённое программирование.

Источники

Литература

  1. Mark Lutz. Learning Python, 5th Edition // O'Reilly Media, 2013, 1648 p.

  2. R. Sedgewick, K. Wayne, R. Dondero. Introduction to Programming in Python: An Interdisciplinary Approach // Addison-Wesley Professional, 2015, 792 p.

  3. [перевод предыдущей книги] Роберт Седжвик, Кевин Уэйн, Роберт Дондеро. Программирование на языке Python. Учебный курс / пер. с англ. — СПб.: ООО "Альфа-книга" // М.: Диалектика, 2017, 736 с.

  4. Брайсон Пэйн. Python для детей и родителей. Играй и программируй / пер. с англ. М.А. Райтман // М.: Издательство «Э», 2017. — 352 с. [книжку можно почитать с Google Books]

  5. Сегаран. Т. Программируем коллективный разум. / пер. с англ. – СПб: Символ-Плюс, 2008. – 368 с.

  6. Дейт К. Дж. Введение в системы баз данных / пер. с англ. Introduction to Database Systems. — 8-е изд. — М.: Вильямс, 2005. — 1328 с.

Не литература

Отдельные лекции, комментарии, важные реплики и прочие материалы