Эта страничка
Слайды / блокноты / примеры
Список литературы и не литературы
Чатики ⚛️для физиков и 🧬для биоинформатиков
На основе блокнота «Метод Гаусса решения СЛАУ» реализовать метод Гаусса решения СЛАУ с использованием векторных возможностей numpy или без. Программный код для проверки в блокноте уже есть.
Сделать модуль или пакет из одной из своих уже решённых задач. В будущем рекомендуется использовать его в веб-приложении и в приложении с GUI.
Вдохновляясь примером «Компиляция Python разными способами», инсталлируйте Cython (требует компилятора C или MyPy (не требует), скомпилируйте свой модуль, и проверьте, что он импортируется. Не забудьте про аннотации типов. Выполняя это задание также выложите бинарник (.pyd под Windows или .so в Unix-подобных системах) в репозиторий (вообще обычно так стараются не делать, но в данном случае можно).
Подумать: а как мы будем считать давление в нашем реальном газе?
⚛️Взять любые свои экспериментальные данные с и проверить при помощи критерия Колмогорова-Смирнова (используя Scipy и Pandas), соответствуют ли они ожидаемому распределению. Данные к решению приложить.
🧬Основываясь на примерах, полученных знаниях, технической эрудиции и смекалке, реализовать любую несложную программу с GUI (желательно PyQT5), возможно сделав графический интерфейс для одной из своих предыдущих программ.
🧬Вычислить какой-либо определённый интеграл, пользуясь методом Монте-Карло. Повысить точность при помощи multiprocessing или аналогичного средства.
🧬Ускорить при помощи компиляции (любым из способов, включая numba) любую свою программу. Метод Монте-Карло — хороший кандидат.
Гуманитарное задание Написать от нескольких предложений до нескольких абзацев своих мыслей касательно этого текста (можно по-русски 🙂). Положить в текстовый файл и выставить у себя в репозитории. [задание для всех, но для биоинформатиков чуть позже].
Реализовать веб-приложение, отталкиваясь от предоставленного примера. Можно реализовать веб-интерфейс к какому-нибудь своему приложению. [задание для всех, но для биоинформатиков чуть позже].
🧬Скачать где угодно или попросить у физиков (=)) любые экспериментальные данные с известным ожидаемым распределением и проверить при помощи критерия Колмогорова-Смирнова (используя Scipy и Pandas), соответствуют ли они ожидаемому распределению. Данные к решению приложить. В качестве варианта — можно решить вместе со следующим заданием, см. курсив ниже.
🧬⚛️Попробовать при помощи любого фреймворка генетического программирования (примеры см. тут блокноты с примерами) найти субоптимальное решения любой задачи. Можно требующей перебора, можно ещё какой-нибудь. В качестве варианта — можно решить с предыдущим заданием — подобрать значения случайной величины, чтобы критерий Колмогорова-Смирнова классифицировал их, как распределённые нужным вам образом.
⚛️Базы данных: написать любую интерактивную (консоль, GUI или Web) программу, которая позволила бы редактировать данные в БД. БД можно взять с данными о студентах из лекции. К примеру, можно при помощи программы ставить студентам оценки.
Репозиторий-конфетка. Убрать всякий ненужный мусор типа __pycache__, именование исходников на Питоне сделать, как предписывает PEP 8, в виде snake_case.py и без всяких экзотических символов, если используете какую-то свою систему именования файлов — сделать всё в соответствии с ней.
🧬Нейрокартинка. Взять один из двух блокнотов — локальный или Google Colab, модифицировать условие в верхней части на попадание точки в фигуру и обучить нейронную сеть другой фигуре. Для сложных фигур можно изменить количество нейронов в скрытом слое.
В таблице ниже лишь сводка, комментарии открывать по ссылке в таблице.
Перечисленные блокноты также доступны в режиме предпросмотра GitHub (с некоторыми ошибками, но GiHub умеет их показывать).
Слайды: Python: что это, откуда и зачем
Слайды: Немного практики
Блокнот: Основы
Блокнот: Ряд Тейлора
Блокнот: Гаубица Д-30 и «Катюша»
Примеры на черепашью графику — капуста, борщевик, а также летящие тела с управлением
Блокнот: Задача N тел и второй закон Кеплера
Блокнот: Определяем свои пространства
Блокнот: Срезы, итераторы и генераторы
Блокнот: Метод Гаусса решения СЛАУ
Блокнот: Just-in-Time компиляция (с numba ничего не заработало? Ладно, можно использовать Google Collab)
Пример: Модуль и пакет
🧬Слайды: Параллельное программирование: потоки, процессы, сопрограммы, циклы обработки сообщений и примеры
⚛️Блокнот: Немного данных и статистики
🧬Примеры: Декларативный GUI; Множественное наследование
Пример: Простое Web-приложение
Блокнот: Немного данных и статистики
Блокноты: Реляционные БД и ORM
Слайды: Эволюционные алгоритмы и блокноты с примерами
— Вы находитесь здесь —
Кому не хватило баллов за д.з., до 3 баллов могут заработать, продемонстрировав и объяснив, что происходит по трём или меньше случайным вопросам.
В программе на Python или в блокноте на своём компьютере продемонстрировать определение операций для своего класса при помощи magic-методов.
В программе на Python или в блокноте на своём компьютере показать создание и использование классов, наследование и переопределение методов; продемонстрировать вызов различных реализаций метода в пределах одной иерархии наследования.
Создать модуль и пакет на Python, импортировать в свою программу.
При помощи numpy самостоятельно реализовать вычисление определителя любым способом. Можно пользоваться вырезками, оперируя при помощи них подматрицами.
⚛️Продемонстрировать SQL-инъекцию на простой БД.
🧬На простом GUI-приложении продемонстрировать "подвисание" GUI во время вычислений.
Пользуясь любыми известными формулами, написать функцию, которая возвращает комплексные корни кубического уравнения по его коэффициентам.
Реализовать, включая нормирование матрицы для обеспечения сходимости, решение СЛАУ методом итерации.
Написать функцию integrate(f, a, b), получающую параметры f - функцию от одной переменой и вещественные числа a и b, и вычисляющую определённый интеграл f на промежутке [a, b] методом прямоугольников, трапеций или любым другим аналогичным.
Написать функцию diff(f), получающую параметры f - функцию от одной переменой, и возвращающую функцию, являющуюся производной (приближённо, методом конечных разностей) от f по её аргументу.
Написать функцию или сопроцедуру (генератор) perms(n), выдающую полный набор кортежей, являющихся перестановками чисел от 1 до n. Например, perms(3) должна выдать [(3, 2, 1), (2, 3, 1), (2, 1, 3), (3, 1, 2), (1, 3, 2), (1, 2, 3)]. Алгоритм и порядок выдачи любые.
Любым способом на своём компьютере создать программу на Python, запустить её при помощи командной оболочки.
Клонировать свой репозиторий локально; не пользуясь сайтом GitHub, добавить в него файл, зафиксировать изменения; отправить изменения на GitHub; продемонстрировать полученный файл на сайте.
Клонировать свой репозиторий локально; не пользуясь сайтом GitHub, переименовать и удалить файл(ы), зафиксировать изменения; отправить изменения на GitHub; продемонстрировать полученный файл на сайте.
В программе на Python или в блокноте на своём компьютере продемонстрировать работу с некоторыми основными типами данных: целыми и вещественными числами, строками, логическими значениями; продемонстрировать ввод и вывод, использование выражений, использование условного оператора.
В программе на Python или в блокноте на своём компьютере продемонстрировать циклы for и while; продемонстрировать работу с объектами range.
В программе на Python или в блокноте на своём компьютере продемонстрировать написание и вызов функций; в том числе, продемонстрировать рекурсивный вызов функций.
В программе на Python или в блокноте на своём компьютере продемонстрировать работу со списками —индексирование, добавление, удаление элемента, вырезку.
В программе на Python или в блокноте на своём компьютере продемонстрировать рисование графиков функций и параметрических графиков при помощи matplotlib.
В программе на Python или в блокноте на своём компьютере продемонстрировать определение операций для своего класса при помощи magic-методов.
В программе на Python или в блокноте на своём компьютере показать создание и использование классов, наследование и переопределение методов; продемонстрировать вызов различных реализаций метода в пределах одной иерархии наследования.
Для автоматической проверки потребуется python -m pip install pylint nbqa. Если после установки инструменты не запускаются, пытаемся заменить pylint на python3 -m pylint и т.д.
Запустить (как минимум, в программе нет синтаксических ошибок)
В зависимости от того, программа или блокнот
Программа
Проверить, что программа запускается и работает
Проверить, что PyLint
pylint --disable=no-member,c-extension-no-member,missing-docstring,invalid-name my_program.py
ставит балл не менее 5.0
Проверить, что файл .py назван по принципу snake_case.py
Блокнот
Kernel → Restart kernel and run all cells, и затем проверить, что весь блокнот запускается и работает
Проверить, что 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, поскольку для блокнотов требовать все импорты в начале выглядят не очень адекватно.
Проверить, что файл не назван Untitled.ipynb или .... (1).ipynb и т.д.
Перепроверить, что программа делает то, что подразумевалось автором
Перепроверить, что программа делает то, что подразумевалось преподавателем
Общие для всех ситуаций опции PyLint удобно не указывать каждый раз, а запомнить их в настройках, как написано здесь. Для Windows: pylint --disable=no-member,c-extension-no-member,missing-docstring,invalid-name --generate-rcfile >%HOMEPATH%\.pylintrc
Если не уверены в своём вкусе, можно воспользоваться инструментом autopep8, он по крайней мере отформатирует ваш код красиво
0. Инсталлировать программное обеспечение из списка ниже
Регистрация, создание репозитория, подключение к Discord
До 13.09 зарегистрировать аккаунт на GitHub (или GitLab, или BitBucket, или ещё что найдёте), создать репозиторий и заполнить форму
До 13.09 зарегистрироваться в Discord, зайти в чатик, поставить себе там ник в виде фамилии, имени [отчества], со всеми радостно поздороваться
Первая программа — на основе этой — прокомментировать (комментарий — от # до конца строки) каждую строку, которую можно, рекомендуется модифицировать функцию
Публикация кода на GitHub в своём репозитории
29.09.2021 мы не успели посмотреть, как пользоваться Git и GitHub. Минимум есть на слайде, но его явно маловато. Поэтому дедлайн такой далёкий. Но кто чувствует в себе силы — можно сделать самостоятельно.
Сделать блокнот, в котором будет выполняться вычисление функции при помощи частичной суммы ряда Тейлора и проверку того, как ведёт себя график получившейся функции. За основу можно взять этот блокнот
Пользуясь блокнотом Гаубица Д-30 и «Катюша», допрограммировать физическую модель реактивного снаряда (а можно нафантазировать и ещё что-нибудь похитрее).
По жалению вдохновляясь примерами с капустой и борщевиком, нарисовать свой фрактал при помощи черепашьей графики.
Реализовать алгоритм Рабина-Карпа поиска вхождений образца в строку таким образом, чтобы он проходил тесты: дописать содержательную часть тела функции в этом примере.
Пользуясь для вдохновения блокнотом Функции, декораторы, статическая типизация, Lint, сделать, как в нём предлагается, «декоратор с параметром», который из функции делает функцию, применяющуюся заданное количество раз к её же результату.
На основе блокнота «Задача N тел и второй закон Кеплера» сделать класс Universe2D по аналогии с Universe3D, промоделировать движение небесных тел. Желающие могут сделать вектора и всю динамику действительно трёхмерными, но для этого лучше будет сделать отдельную программу, а не блокнот, чтобы matplotlib позволял «крутить» нарисованные орбиты.
На основе блокнота «Задача N тел и второй закон Кеплера» для случая Universe3D численно проверить приблизительное выполнение второго закона Кеплера.
Помедитировать над блокнотом про свои пространства и реализацией многочлена, придумать своё пространство (можно из тех примеров, которые перечислены), желательно кольцо, поле или алгебру, чтобы операций было побольше, реализовать и продемонстрировать операции над ним
Реализовать алгоритм Евклида.
Реализовать расширенный алгоритм Евклида (линейное разложение).
Реализовать функцию проверки данного числа на простоту любым интересным вам способом, также познакомившись с блокнотом.
На основании последнего примера (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
Например отсюда: https://git-scm.com/download/win
Не очень рекомендуется, но можно воспользоваться GitHub Desktop
Не вредно — IDE. Популярные варианты:
Для маленьких программ (наш случай) — любой текстовый редактор + командная строка или совсем простая среда IDLE (под Windows инсталлируется вместе с Python)
Для средних программ (тоже наш случай) или «средни» ПК — Visual Studio Code + плагин для Python
Для крупных проектов и мощных ПК — JetBrains PyCharm, при наличии Email в домене университета — Professional Edition
Удобный файловый менеджер, позволяющий быстро бегать по файловой системе и редактировать текстовые файлы, например (но не обязательно) двухпанельные Far Manager или Midnight Commander — научиться пользоваться без мышки
Любой современный веб-браузер
История и предназанчение языка, основные свойстваю.
Оболочки Python, IPython, Jupyter Notebook, Jupyter Lab. Система контроля версий Git, основные операции.
Встроенные типы данных языка, операции над ними.
Модули стандартной и внешней библиотек.
Функции. Встроенная документация. Передача параметров, рекурсивные функции. Продвинутая тема — декораторы.
Пользовательские типы данных. Описание классов.
Реализация стандартных операций над пользовательскимим типами. Операции, вызываемые встроенными функциями и операторами.
Реализация собственных модулей.
Промежуточная консультация.
Немного ускоримся: Numba, PyPy, Cython
Работа с массивами данных: чтение/запись CSV, HDF5.
Анализ массивов данных: библиотека Pandas.
Сопроцедуры. AsyncIO — пример того, как Python очень не хочет быть функциональным.
Веб-приложения. Фреймворки для веб-приложений.
Параллельное и распределённое программирование.
Mark Lutz. Learning Python, 5th Edition // O'Reilly Media, 2013, 1648 p.
[перевод предыдущей книги] Роберт Седжвик, Кевин Уэйн, Роберт Дондеро. Программирование на языке Python. Учебный курс / пер. с англ. — СПб.: ООО "Альфа-книга" // М.: Диалектика, 2017, 736 с.
Брайсон Пэйн. Python для детей и родителей. Играй и программируй / пер. с англ. М.А. Райтман // М.: Издательство «Э», 2017. — 352 с. [книжку можно почитать с Google Books]
Сегаран. Т. Программируем коллективный разум. / пер. с англ. – СПб: Символ-Плюс, 2008. – 368 с.
Дейт К. Дж. Введение в системы баз данных / пер. с англ. Introduction to Database Systems. — 8-е изд. — М.: Вильямс, 2005. — 1328 с.
Об особенностях работы современных студентов на компьютере (англ)
Командные оболочки
Командная оболочка Windows — первые три лекции этого курса
Для нердов (т.к., считай отдельный учебник) — собственно оригинальный Bash — командный интерпретатор для UNIX-подобных систем, но в Windows тоже может работать
Семён Лукашевский. Краткое руководство по Matplotlib
Грозин Андрей Геннадьевич. Питон в научных вычислениях // Новосибирский государственный университет
https://pep8.ru/blog/ (RSS: http://feeds.feedburner.com/pep8blogs)