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

Python

Ресурсы

  • Эта страничка
    • Слайды
    • Список литературы и не литературы
  • Чатик =)

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

  1. Слайды: Python: что это, откуда и зачем
  2. Слайды: Немного практики
  3. Блокнот: Основы
  4. Блокнот: Элементарные функции
  5. Блокнот: Кеплер и плоская вселенная
  6. Блокнот: Функции и декораторы
  7. Блокнот: Определяем свои пространства
  8. Блокнот: Мелкие простые задачки на работу с числами
  9. Блокнот: Метод Гаусса решения СЛАУ
  10. Блокнот: Стремительный Python
  11. Слайды: Параллельное программирование: потоки, процессы, сопрограммы, циклы обработки сообщений
  12. Пример: Простое веб-приложение (с описанием)
  13. Блокнот: Немного данных и статистики
  14. Блокноты: Совсем немного нейронных сетей и Чуть больше нейронных сетей. И ещё чуть-чуть.
  15. Блокнот: Простая реляционная база и ORM.

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

Задания

0. Подготовительные мероприятия:

    • освоить базовую работу с коммандной оболочкой — уметь настраивать системные пути, запускать программы, перемещаться по каталогам, смотреть и редактировать их содержимое и содержимое текстовых файлов; можно на примере этого или этого (кроме программы на Си) материала;
    • инсталлировать программное обеспечение, указанное на сайте.
  1. Назвать и прокомментировать первую программу, можно дописать.
  2. Опубликовать её на GitHub.
  3. Реализовать вычисление любой элементарной функции (кроме sin =) ), выложить блокнот на GitHub.
  4. Численно решить задачу N тел для «плоской» вселенной.
  5. Для физиков необязательно. Сделать «декоратор с параметром», применяющий функцию к аргументу заданное количество раз.
  6. Придумать и реализовать какой-нибудь свой тип данных с арифметическими операциями (примеры в соответствующем блокноте).
  7. Пункты A–D. Можно решать по одной. Совсем мелкие и совсем простые задачки для разминки (блокнот 6).
  8. Деление многочленов над полем ℤ/2 для вычисления CRC. Для информатиков на основе типов данных с арифметическими операциями, для физиков — любым способом.
  9. Реализовать метод Гаусса решения СЛАУ.
  10. Реализовать модульный тест (см. ссылку внизу в списке не литературы) для алгоритма Евклида и проверки числа на простоту из задания 7.
  11. Ускорить метод Гаусса при помощи Numba (матрицу можно брать случайную, но с и без JIT — одинаковую).
  12. Написать любое приложение с GUI на ваше усмотрение.
  13. Взять одну из ранее решённых задач и сделать для неё веб-интерфейс. Он должен состоять минимум из одной динамической веб-страницы (HTML, не plain text =)), в нём должна быть минимум одна форма. Предлагается пользоваться Flask, но можно и другим аналогичным фреймворком на ваше усмотрение.
  14. Для физиков необязательно. Pandas позволяет «фильтровать» ряды с использованием синтаксиса: my_series[my_series > 123], что примерно соответствует [e for e in my_list where e > 123] для списков. Пользуясь возможностями Python по определению операторов, реализовать класс, хранящий список значений, из которого можно будет извлекать значения по условию, заданному при помощи синтаксиса Pandas.
  15. Взять любые свои экспериментальные данные с и проверить при помощи критерия Колмогорова-Смирнова (используя Scipy и Pandas), соответствуют ли они ожидаемому распределению. Данные к решению приложить.
  16. Нейронная сеть: обучить пример с Keras на других данных — по-другому проинициализировать генератор случайных чисел, взять неслучайные точки (регулярные, например), посмотреть (и показать =)), как изменится результат.
  17. Нейронная сеть: поэкспериментировать с другими простыми фигурами — эллипсом, квадратом, треугольником — повёрнутыми на разные углы (аналитическая геометрия в помощь).
  18. БД: доработать блокнот и DML-скрипты: дополнить данными о курсах и оценках; попробовать другие запросы на чтение данных.

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

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

  • Python 3.7+ https://www.python.org/downloads/ желательно 64-битный
    • Для Windows:
      • говорим, что хотим изменить настройки
      • ставим галочку на тему того, что надо внести Python в системные пути
      • каталог для инсталляции выбираем c:\Python37
  • Пакеты для Python — либо при помощи системного пакетного менеджера, либо (например, для Windows) при помощи менеджера Python:
    • Обновление пакетного менеджера (необязательно) python -m pip install --upgrade pip
    • Инсталляция пакетов pip install ipython scipy numpy pandas jupyter matplotlib
  • Git, например отсюда: https://git-scm.com/download/win

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

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

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

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

Основы программирования (Python), осень 2018

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

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

  1. История и предназанчение языка, основные свойстваю.
  2. Оболочки Python, IPython, Jupyter. Система контроля версий Git, основные операции.
  3. Встроенные типы данных языка, операции над ними.
  4. Модули стандартной и внешней библиотек.
  5. Функции. Встроенная документация. Передача параметров, рекурсивные функции. Продвинутая тема — декораторы.
  6. Пользовательские типы данных. Описание классов.
  7. Реализация стандартных операций над пользовательскимим типами. Операции, вызываемые встроенными функциями и операторами.
  8. Реализация собственных модулей.
  9. Промежуточная консультация.
  10. Немного ускоримся: Numba, PyPy, Cython
  11. Работа с массивами данных: чтение/запись CSV, HDF5.
  12. Анализ массивов данных: библиотека Pandas.
  13. Сопроцедуры. AsyncIO — пример того, как Python очень не хочет быть функциональным.
  14. Веб-приложения. Фреймворки для веб-приложений.
  15. Параллельное и распределённое программирование.

Практические задачи

  1. Первая программа, отображение графика функции.
  2. Частичная сумма ряда Тейлора.
  3. Задача N тел для гравитационного поля планиверсума.
  4. Для физиков необязательно. Декоратор с параметрами.
  5. Тип данных с арифметикой.
  6. Деление многочленов над полем вычетов по модулю 2 с остатком (подсчёт CRC).
  7. Модули, которые работают с многочленами и полями.
  8. Немного просто программирования: метод Гаусса решения СЛАУ. С Numba и без.
  9. Находим фальсификаторов при помощи критерия Колмогорова-Смирнова.
  10. Для физиков необязательно. Web-приложение Flask, Quart.
  11. Параллельно взламываем простой пароль ZIP-архива.

Источники

Литература

  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 с.

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

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