Эта страничка
Слайды / блокноты / примеры
Список литературы и не литературы
Запустить (как минимум, в программе нет синтаксических ошибок)
В зависимости от того, программа или блокнот
Программа
PyLint pylint --disable=missing-docstring my_program.py ставит балл не менее 5.0
MyPy mypy my_program.py не выдаёт ошибок
Проверить, что файл .py назван по принципу snake_case.py
Блокнот
Kernel → Restart kernel and run all cells
Проверить, что файл не назван Untitled.ipynb или .... (1).ipynb и т.д.
Перепроверить, что программа делает то, что подразумевалось автором
Перепроверить, что программа делает то, что подразумевалось преподавателем
Распараллелить или распределить любую вычислительную задачу, которая распараллеливается/распределяется. Можно пользоваться numba + prange (+ Google Collab), multiprocessing или MPI. Пояснения в соответсттвующих слайдах. Примеры задач, которые хорошо распределяются (а значит и распараллеливаются), и это позволяет повысить точность:
генерируя координаты псевдослучайных точек в квадрате [0, 1]×[0, 1] проверять, попадают ли они в единичную окружность и вычислить при помощи этого приблизительно число π;
запустить несколько раундов генерации сумм равномерно распределённых псевдослучайных величин, собрать результаты, построить и показать гистограмму при помощи matplotlib;
аналогичная ваша задача.
Основываясь на примерах, полученных знаниях, технической эрудиции и смекалке, реализовать любую несложную программу с GUI (желательно PyQT5), возможно сделав графический интерфейс для одной из своих предыдущих программ.
Сделать модуль или пакет из одной из своих уже решённых задач. В будущем рекомендуется использовать его в веб-приложении и в приложении с GUI.
Реализовать веб-приложение, отталкиваясь от предоставленного примера. Рекомендуется сделать веб-интерфейс к тому же модулю, что и в предыдущем задании.
Взять любые свои экспериментальные данные с и проверить при помощи критерия Колмогорова-Смирнова (используя Scipy и Pandas), соответствуют ли они ожидаемому распределению. Данные к решению приложить.
БД: доработать блокнот и DML-скрипты: дополнить данными о курсах и оценках; попробовать другие запросы на чтение данных.
На основе примеров с нейронными сетями обучить нейронную сеть распознавать попадание точки в какую-нибудь геометрическую фигуру.
0. Инсталлировать программное обеспечение из списка ниже
Регистрация, создание репозитория, подключение к Discord
До 10.09 зарегистрировать аккаунт на GitHub, создать репозиторий и заполнить форму
До 10.09 зарегистрироваться в Discord, зайти в чатик, поставить себе там ник в виде фамилии, имени [отчества], со всеми радостно поздороваться
Первая программа — на основе этой — прокомментировать (комментарий — от # до конца строки) каждую строку, которую можно, рекомендуется модифицировать функцию
Публикация кода на GitHub в своём репозитории
Вычисление функции по ряду Тейлора — следует данный блокнот и переделать под свою функцию. И в Git выложить, конечно же, тоже блокнот. Чтобы сейчас и после было проще, рекомендуется клонировать себе весь репозиторий — git clone https://github.com/dluciv/python-intro-course.git
Алгоритм Рабина-Карпа. Примерное описание приводится на лекциях, отправную точку для задания содержит блокнот Ответы на вводный тест. Наконец, можно даже в Википедии посмотреть, только для простоты никакие мудрёные хэши не брать, а просто сумму ord(symbol)
Пользуясь для вдохновения блокнотом Функции, декораторы, статическая типизация, Lint, сделать, как в нём предлагается, «декоратор с параметром», который из функции делает функцию, применяющуюся заданное количество раз к её же результату
Пользуясь блокнотом Гаубица Д-30 и «Катюша», допрограммировать физическую модель реактивного снаряда (а можно нафантазировать и ещё что-нибудь похитрее)
Улучшить свою реализацию алгоритма Рабина-Карпа: вставить свой код в пример с модульными тестами (именно свой код → в пример, и редактировать пример, где отмечено в файле!), добиться, чтобы тесты успешно проходили (не запрещается и ещё тестов добавить!), добиться, чтобы PyLint выдавал как минимум 9,5 из 10 и MyPy не выдавал ошибок
Вдохновляясь капустой и борщевиком, придумать своё описание фрактала и нарисовать при помощи черепашьей графики
Реализовать алгоритм Евклида, проверку на простоту, а также расширенный алгоритм Евклида (линейное разложение)
С проверкой на простоту просьба вспомнить пункт B вот этого блокнота и реализовать один вариант «в лоб», а другой — любой изощрённый, или их сочетания, и сравнить быстродействия при помощи %timeit
Помедитировать над блокнотом про свои пространства и реализацией многочлена, придумать своё пространство (можно из тех примеров, которые перечислены), желательно кольцо, поле или алгебру, чтобы операций было побольше, реализовать и продемонстрировать операции над ним
На основании последнего примера (class Fib6) из блокнота «Срезы, итераторы и генераторы» сделать свой класс, объекты которого могут бесконечно выдавать числа Фибоначчи, значения факториала или элементы другой последовательности, чтобы по нему можно было «бегать» циклом for. Про «бесконечно выдавать» — важно, в этом и была идея! Ограничить-то вывод всегда можно через itertools.islice(my_fibs, 300), например.
На основе блокнота «Задача N тел и второй закон Кеплера» сделать класс Universe2D по аналогии с Universe3D, промоделировать движение небесных тел
На основе блокнота «Задача N тел и второй закон Кеплера» для случая Universe3D численно проверить приблизительное выполнение второго закона Кеплера
На основе блокнота «Метод Гаусса решения СЛАУ» реализовать метод Гаусса решения СЛАУ с использованием векторных возможностей numpy или без. Программный код для проверки в блокноте уже есть.
Перечисленные блокноты также доступны в режиме предпросмотра GitHub (с некоторыми ошибками, но GiHub умеет их показывать).
Слайды: Python: что это, откуда и зачем
Слайды: Немного практики
Блокнот: Основы
Блокнот: Ответы на вводный тест
Блокнот: Гаубица Д-30 и «Катюша»
Примеры на черепашью графику — капуста, борщевик, а также летящие тела с управлением
Блокнот: Определяем свои пространства
Блокнот: Срезы, итераторы и генераторы
Блокнот: Задача N тел и второй закон Кеплера
Блокнот: Метод Гаусса решения СЛАУ
Блокнот: Just-in-Time компиляция (ничего не заработало? Ладно, можно использовать Google Collab)
Слайды: Параллельное программирование: потоки, процессы, сопрограммы, циклы обработки сообщений и примеры
Примеры: Декларативный GUI; Множественное наследование
Пример: Модуль и пакет
Пример: Простое Web-приложение
Блокнот: Немного данных и статистики
Блокнот: Реляционные БД и ORM
Слайды: Классификаторы — простейший линейный и на базе нейронной сети
Блокноты: Примеры нейронных сетей
Пример (неоконченный): Игра на PyGame
Те, кому не хватает баллов для зачёта в семестре, могут несколько баллов, устно (иногда с демонстрацией) ответив на три (или меньше) случайных вопроса из списка с демонстрацией работы на компьютере. Требуется продемонстрировать работающие программы или блокноты и при демонстрации развёрнуто пояснить их работу.
До 2 баллов. Если попадутся Ваши собственные программы, можете на них, но чтобы с блеском и чтобы от зубов.
Создайте программу, распараллеливающую вычисления любым способом, реально повышающий их производительность. Продемонстрируйте, детально объясните.
Создайте программу, включающую в себя пакет с минимум одним модулем внутри и собственно «главный» файл, который всё это запускает. Продемонстрируйте, детально объясните.
Продемонстрируйте схему БД с минимум 3 таблицами. Создайте программу, работающую с реляционной БД при помощи запросов и курсора.
Продемонстрируйте загрузку данных из CSV или HDF5, продемонстрируйте и детально объясните анализ распределений с помощью Pandas.
Создайте на Ваш Выбор любую небольшую GUI- или web- программу, продемонстрируйте и детально объясните, как она устроена.
До 3 баллов.
Любым способом на своём компьютере создать программу на Python, запустить её при помощи командной оболочки
Клонировать свой репозиторий локально; не пользуясь сайтом GitHub, добавить в него файл, зафиксировать изменения; отправить изменения на GitHub; продемонстрировать полученный файл на сайте
Клонировать свой репозиторий локально; не пользуясь сайтом GitHub, переименовать и удалить файл(ы), зафиксировать изменения; отправить изменения на GitHub; продемонстрировать полученный файл на сайте
В программе на Python или в блокноте на своём компьютере продемонстрировать работу с некоторыми основными типами данных: целыми и вещественными числами, строками, логическими значениями; продемонстрировать ввод и вывод, использование выражений, использование условного оператора
В программе на Python или в блокноте на своём компьютере продемонстрировать циклы for и while; продемонстрировать работу с объектами range
В программе на Python или в блокноте на своём компьютере продемонстрировать написание и вызов функций; в том числе, продемонстрировать рекурсивный вызов функций
В программе на Python или в блокноте на своём компьютере продемонстрировать работу со списками —индексирование, добавление, удаление элемента, вырезку
В программе на Python или в блокноте на своём компьютере продемонстрировать использование матриц и векторов в numpy — сложение, умножение, вырезки (например, получение отдельного столбца или строки матрицы)
В программе на Python или в блокноте на своём компьютере продемонстрировать рисование графиков функций и параметрических графиков при помощи matplotlib
В программе на Python или в блокноте на своём компьютере показать создание и использование классов, наследование и переопределение методов; продемонстрировать вызов различных реализаций метода в пределах одной иерархии наследования
Программное обеспечение для Windows устанавливается с официальных сайтов, для Unix-подобных систем — при помощи системного менеджера пакетов.
Python 3.8+ https://www.python.org/downloads/, очень желательно 64-битный
Для Windows:
говорим, что хотим изменить настройки
ставим галочку на тему того, что надо внести Python в системные пути
каталог для инсталляции выбираем c:\Python38
Пакеты для Python — либо при помощи системного пакетного менеджера, либо (например, для Windows) при помощи менеджера Python:
Обновление пакетного менеджера (необязательно) python -m pip install --upgrade pip
Инсталляция пакетов 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)