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

Python

Ресурсы

  • Эта страничка

    • Слайды / блокноты / примеры

    • Список литературы и не литературы

  • Чатик для ⚛️ физиков и 🧬 биоинформатиков

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

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

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

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

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

  2. Первая программка в репозитории.

  3. Снабдить первую программу комментариями и проявить перфекционизм, проверив результат при помощи pylint и flake8 (см. ниже).

  4. Сделать (можно на основе существующего) блокнот с реализацией вычисления любой функции через ряд Тейлора; не забыть про графики, чтобы было видно, как ведут себя «настоящая» функция и многочлен.

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

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

  7. Реализовать алгоритм Евклида в виде функции. Ну и добавить какой-то код, который её проверяет.

  8. Реализовать расширенный алгоритм Евклида (линейное разложение). Ну и добавить какой-то код, который её проверяет.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Весна 2022

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

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

  3. Создать модуль и пакет на Python, импортировать в свою программу.

  4. При помощи numpy самостоятельно реализовать вычисление определителя любым способом. Можно пользоваться вырезками, оперируя при помощи них подматрицами.

  5. ⚛️Продемонстрировать SQL-инъекцию на простой БД.
    🧬На простом GUI-приложении продемонстрировать "подвисание" GUI во время вычислений.

  6. Пользуясь любыми известными формулами, написать функцию, которая возвращает комплексные корни кубического уравнения по его коэффициентам.

  7. Реализовать, включая нормирование матрицы для обеспечения сходимости, решение СЛАУ методом итерации.

  8. Написать функцию integrate(f, a, b), получающую параметры f - функцию от одной переменой и вещественные числа a и b, и вычисляющую определённый интеграл f на промежутке [a, b] методом прямоугольников, трапеций или любым другим аналогичным.

  9. Написать функцию diff(f), получающую параметры f - функцию от одной переменой, и возвращающую функцию, являющуюся производной (приближённо, методом конечных разностей) от f по её аргументу.

  10. Написать функцию или сопроцедуру (генератор) perms(n), выдающую полный набор кортежей, являющихся перестановками чисел от 1 до n. Например, perms(3) должна выдать [(3, 2, 1), (2, 3, 1), (2, 1, 3), (3, 1, 2), (1, 3, 2), (1, 2, 3)]. Алгоритм и порядок выдачи любые.

Осень 2021

  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 или в блокноте на своём компьютере показать создание и использование классов, наследование и переопределение методов; продемонстрировать вызов различных реализаций метода в пределах одной иерархии наследования.

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

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

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

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

    • Программа

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

      2. Проверить статическими анализаторами:

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

        2. Желательно Flake8 flake8 my_program.py — убедиться, что вывод вас самих удовлетворяет =)

      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, он по крайней мере отформатирует ваш код красиво

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

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

  • Python 3.10+ 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. Популярные варианты:

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

    • Для маленьких программ (тоже наш случай) — любой текстовый редактор + командная строка или совсем простая среда IDLE (под Windows инсталлируется вместе с 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 с.

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

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