Эта страничка
Слайды / блокноты / примеры
Список литературы и не литературы
Чатик для ⚛️ физиков и 🧬 биоинформатиков
На основе блокнота «Метод Гаусса решения СЛАУ» реализовать метод Гаусса решения СЛАУ с использованием векторных возможностей numpy или без. Программный код для проверки в блокноте уже есть. Желающим можно проверять с помощью этого теста (он содержательно аналогичен тесту в блокноте).
Попробовать воспроизвести у себя замеры из примера «MyPy, Cython, Numba», описать результаты в текстовом файле.
Сделать модуль или пакет из одной из своих уже решённых задач. И программу, которая этот модуль или пакет импортирует и запускает. Кто забыл, как — см. сюда. В будущем рекомендуется использовать модуль в веб-приложении и в приложении с GUI.
Вычислить какой-либо определённый интеграл (или константу, например, π), пользуясь методом Монте-Карло.
Повысить точность работы своей программы или ускорить её с помощью multiprocessing или mpi4py. Хорошие кандидаты — метод Монте-Карло. Но проверка очень длинного числа на простоту тоже подойдёт.
Гуманитарное задание. Написать от нескольких предложений до нескольких абзацев своих мыслей касательно этого текста (можно по-русски 🙂). Положить в текстовый файл и выставить у себя в репозитории.
Основываясь на примерах, полученных знаниях, технической эрудиции и смекалке, реализовать любую несложную программу с GUI (желательно PyQT6), возможно сделав графический интерфейс для одной из своих предыдущих программ.
Реализовать веб-приложение, отталкиваясь от предоставленного примера. Можно реализовать веб-интерфейс к какому-нибудь своему приложению.
Взять любые свои экспериментальные данные с и проверить при помощи критерия Колмогорова-Смирнова (используя Scipy и Pandas), соответствуют ли они ожидаемому распределению. Данные к решению приложить.
Попробовать при помощи любого фреймворка генетического программирования (примеры см. тут блокноты с примерами) найти субоптимальное решения любой задачи. Можно требующей перебора, можно ещё какой-нибудь. В качестве варианта — можно решить с предыдущим заданием — подобрать значения случайной величины, чтобы критерий Колмогорова-Смирнова классифицировал их, как распределённые нужным вам образом.
Разные задания для физиков и биоинформатиков.
⚛️ Базы данных: написать любую интерактивную (консоль, GUI или Web) программу, которая позволила бы редактировать данные в БД. БД можно взять с данными о студентах из лекции. К примеру, можно при помощи программы ставить студентам оценки.
🧬Нейрокартинка. Взять один из двух блокнотов — локальный или Google Colab, модифицировать условие в верхней части на попадание точки в фигуру и обучить нейронную сеть другой фигуре. Для сложных фигур можно изменить количество нейронов в скрытом слое.
Репозиторий-конфетка. Убрать всякий ненужный мусор типа __pycache__; задания из нескольких файлов переместить в подкаталоги; именование исходников на Питоне сделать, как предписывает PEP 8, в виде snake_case.py и без всяких экзотических символов, если используете какую-то свою систему именования файлов — сделать всё в соответствии с ней.
0. Инсталлировать программное обеспечение из списка ниже
Регистрация, создание репозитория, подключение к Discord
До 13.09 зарегистрировать аккаунт на GitHub (или GitLab, или BitBucket, или ещё что найдёте), создать репозиторий и заполнить форму
До 13.09 зарегистрироваться в Discord, зайти в чатик, поставить себе там ник в виде фамилии, имени [отчества], со всеми радостно поздороваться (именно в эотм чатике).
Первая программка в репозитории.
Снабдить первую программу комментариями и проявить перфекционизм, проверив результат при помощи pylint и flake8 (см. ниже).
Сделать (можно на основе существующего) блокнот с реализацией вычисления любой функции через ряд Тейлора; не забыть про графики, чтобы было видно, как ведут себя «настоящая» функция и многочлен.
Нарисовать, по желанию вдохновляясь примерами с капустой и борщевиком, свой фрактал при помощи черепашьей графики.
⚛️ Пользуясь блокнотом Гаубица Д-30 и «Катюша», допрограммировать физическую модель реактивного снаряда (а можно нафантазировать и ещё что-нибудь похитрее).
🧬 Реализовать алгоритм Рабина-Карпа поиска вхождений образца в строку таким образом, чтобы он проходил тесты: дописать содержательную часть тела функции в этом примере.
Реализовать алгоритм Евклида в виде функции. Ну и добавить какой-то код, который её проверяет.
Реализовать расширенный алгоритм Евклида (линейное разложение). Ну и добавить какой-то код, который её проверяет.
Реализовать функцию проверки данного числа на простоту любым интересным вам способом, также познакомившись с блокнотом. Ну и, опять же, добавить какой-то код, который её проверяет.
На основе блокнота «Задача N тел и второй закон Кеплера» сделать класс Universe2D по аналогии с Universe3D, промоделировать движение небесных тел. Желающие могут сделать вектора и всю динамику действительно трёхмерными, но для этого лучше будет сделать отдельную программу, а не блокнот, чтобы matplotlib позволял «крутить» нарисованные орбиты.
На основе блокнота «Задача N тел и второй закон Кеплера» для случая Universe3D численно проверить приблизительное выполнение второго закона Кеплера.
Помедитировать над блокнотом про свои пространства и реализацией многочлена, придумать своё пространство (можно из тех примеров, которые перечислены), желательно кольцо, поле или алгебру, чтобы операций было побольше, реализовать и продемонстрировать операции над ним.
На основании последнего примера (class Fib6) из блокнота «Срезы, итераторы и генераторы» сделать свой класс, объекты которого могут бесконечно выдавать числа Фибоначчи, значения факториала или элементы другой последовательности, чтобы по нему можно было «бегать» циклом for. Про «бесконечно выдавать» — важно, в этом и была идея! Ограничить-то вывод всегда можно через itertools.islice(my_fibs, 300), например.
Вдохновляясь материалами по аннотации типов, добавить аннотации в какую-нибудь из своих программ, и проверить при помощи MyPy. Попробовать внести в программу ошибку и убедиться в том, что MyPy на это отреагировал.
Вдохновляясь примером «НедоФорт», дописать интерпретатор, добавив в него такие операции, как дублирование вершины стека (dup), удаление вершины стека (drop), перемена мест вершины и следующего за ней элемента (swap), разные арифметические операции. Написать для интерпретатора программу, вычисляющую формулу наподобие формулы Герона (площадь треугольника), корни квадратного уравнения или что-нибудь другое аналогичной сложности. По желанию можно реализовать условные переходы, вызов подпрограмм и т.д. — как позволит фантазия.
В таблице ниже лишь сводка, комментарии открывать по ссылке в таблице.
Перечисленные блокноты также доступны в режиме предпросмотра 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 flake8. Если после установки инструменты не запускаются, пытаемся заменить pylint на python3 -m pylint и т.д.
Запустить (как минимум, в программе нет синтаксических ошибок)
В зависимости от того, программа или блокнот
Программа
Проверить, что программа запускается и работает
Проверить статическими анализаторами:
PyLint
pylint --disable=no-member,c-extension-no-member,missing-docstring,invalid-name my_program.py
ставит балл не менее 5.0
Желательно Flake8 flake8 my_program.py — убедиться, что вывод вас самих удовлетворяет =)
Проверить, что файл .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, он по крайней мере отформатирует ваш код красиво
Программное обеспечение для 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
Например отсюда: https://git-scm.com/download/win
Не очень рекомендуется, но можно воспользоваться GitHub Desktop
Не вредно — IDE. Популярные варианты:
Для маленьких и средних программ (наш случай) или «средни» ПК — Visual Studio Code + плагин для Python
Для маленьких программ (тоже наш случай) — любой текстовый редактор + командная строка или совсем простая среда IDLE (под Windows инсталлируется вместе с 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 (первые две части) и Zsh (но сперва освойте Bash =) )
Для нердов (т.к., считай отдельный учебник) — собственно оригинальный Bash — командный интерпретатор для UNIX-подобных систем, но в Windows тоже может работать
Семён Лукашевский. Краткое руководство по Matplotlib
Грозин Андрей Геннадьевич. Питон в научных вычислениях // Новосибирский государственный университет
https://pep8.ru/blog/ (RSS: http://feeds.feedburner.com/pep8blogs)