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

Python

Ресурсы

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

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

  1. Слайды: Python: что это, откуда и зачем
  2. Слайды: Немного практики
  3. Блокнот: Основы
  4. Блокнот: Ответы на вводный тест
  5. Блокнот: Функции, декораторы, статическая типизация, Lint
  6. Блокнот: Простые задачки, чтобы всё-таки набить руку
  7. Пример: Задача N тел
  8. Блокнот: Определяем свои пространства

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

На случай проблем с проектором, возможна трансляция по ссылке.

Задания

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

    • освоить базовую работу с коммандной оболочкой — уметь настраивать системные пути, запускать программы, перемещаться по каталогам, смотреть и редактировать их содержимое и содержимое текстовых файлов; можно на примере этого или этого (кроме программы на Си) материала;
    • инсталлировать программное обеспечение, указанное на сайте.
  1. Назвать и прокомментировать первую программу (например ту, которая показывает график функции), можно дописать.
  2. Опубликовать её на GitHub.
  3. Измерить скорость работы рекурсивной функции вычисления чисел Фибоначчи с мемоизацией (lru_cache, см. пример) и без. Можно самостоятельно изучить и применить модуль timeit, он для того и сделан.
  4. Посмотреть блокнот и реализовать вычисление любой элементарной функции (кроме sin =) ), выложить блокнот (файл .ipynb) на GitHub.
  5. Реализовать декоратор «с параметром», заданное количество раз применяющий функцию к аргументу.
  6. Написать любую или дополнить существующую программу с использованием аннотаций типов, добиться, чтобы typechecker MyPy не выдавал на ней ошибок и предупреждений.
  7. Улучшить любую свою программу при помощи PyLint, продемонстрировать результат (можно в виде ссылки на коммит в Git).
  8. Изи. Набери до 4 баллов на мелких простых задачках, только программируй аккуратно! Алгоритмы Евклида — обязательно.
  9. «Кеплер 1». Дописать класс UniverseWithBodies и переделать код в конце программы, чтобы пользовался им. Тела должны действовать друг на друга.
  10. «Кеплер 2». Дописать класс UniverseWithDimensionsAndBodies и переделать код в конце программы, чтобы пользовался им Попробовать для двумерного пространства.
  11. Придумать и реализовать какой-нибудь свой тип данных с арифметическими операциями (примеры в соответствующем блокноте). Это может быть поле, кольцо или группа с соответствующим набором операций (для группы — как минимум, умножение, деление, степень).

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

Программное обеспечение для 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 jupyterlab matplotlib
  • Git, например отсюда: https://git-scm.com/download/win
  • Не вредно — JetBrains PyCharm, при наличии Email в домене университета — Professional Edition

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

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

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

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

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

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

Язык программирования 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 с.

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

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