Основы программирования на Python весна 2019 матфак

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

Содержание

О курсе

borderless


Курс читается для студентов факультета математики ВШЭ в 3-4 модулях.

На курсе есть лекции и семинары.


Лектор: Иванникова Вероника

Лекции проходят по понедельникам, 9:00 - 10:20, в аудитории 318.

Пререквизиты курса

От слушателей курса ожидается:

  • базовое знание Python (условия, циклы, функции, классы)
  • готовность работать в терминале и преодолевать трудности
  • знакомство с базовым математическим аппаратом (например, основы статистики, линейная алгебра и проч.)

Необходимые ссылки

Семинары

Группа Преподаватель Учебный ассистент Расписание
1 Андрей Кудинов Мовсес Элбакян вторник, 15:30 - 16:50, ауд. 318
2 Дмитрий Контуров Соня Дымченко понедельник, 10:30 - 11:50, ауд. 318

Формула оценки

Результирующая оценка по дисциплине рассчитывается по формуле:

Oитог = 0.8 * Oнакопл + 0.2 * Oэкз

Накопленная оценка рассчитывается как сумма баллов за все практические задания, переведённая в шкалу от 0 до 10.

Экзамен сдаётся в форме контеста в той же системе, что и обычные задания.

Настройка системы для сдачи практических заданий

Все задания сдаются в специальную систему сдачи заданий Manytask со своего компьютера, можно из дома. Нужно настроить свой компьютер, и для этого придётся использовать терминал.

Операционная система и терминал

Для пользователей MacOs и других Unix/Linux-систем терминал уже предустановлен, для пользователей Windows 10 надо поставить Ubuntu-терминал, для пользователей прочих Windows надо поставить виртуальную машину с Ubuntu.

Инструкция для Windows 10 (сразу с настройкой системы сдачи задач), спасибо Сморчкову Мите

Если стоит Windows другой версии, то есть подготовленная виртуальная машина с Ubuntu с частично преднастроенной системой (там есть git, python, pytest):

Инструкция создания виртуальной машины

Как работать в терминале

Этому была посвящена 2 лекция (см слайды в списке лекций) и первые 2 семинара. Новоприбывшим надо посмотреть слайды и пройти туториал

Python 3.6

Нужен интрепретатор Python 3.6 Рекомендуем дистрибутив Anaconda

Рекомендуем также использовать PyCharm Community Edition (кстати, для студентов можно бесплатно получить и профессиональную версию, но это не требуется)

смотрите материалы к семинарам 1-2, именно там мы учились настраивать и пользоваться инструментами.

На занятия лучше носить ноутбук, но если нет такой возможности, можно использовать https://colab.research.google.com/ который работает с любого утюга.

Настройка Manytask

Инструкция настройки системы сдачи задач

Если возникают вопросы, попробуйте сначала воспользоваться поиском в интернете, потом поиском по чату (возможно ваш вопрос уже задавали), в ином случае задавайте его в чат (или пишите ассистентам). На второй лекции мы разбирали как надо задавать вопросы, просмотрите, пожалуйста, слайды и прочитайте статейки по ссылкам в слайдах;

Интерфейс Manytask

Manytask.png


Лекции

Лекция 1. Введение

14.01 слайды

Обзор возможностей языка. Философия Python, классы решаемых задач. Интерпретация программы на Python. stdin/stdout/stderr. Память, процессор. Использование библиотек.

Лекция 2. Работа в терминале

21.01 слайды

- чтение ошибок, правильные багрепорты, StackOverflow, универсальынй алгоритм решения любых проблем

- чуть истории Linux/Ubuntu/Windows, философия Unix

- как запустить браузер в Ubuntu

- что такое терминал, оболочка, bash, сессия, CLI, скрипты

- как получить помощь по любой команде (man, --help, which)

- как запускаются команды, где они ищутся (which, PATH, PYTHONPATH)

- работа с каталогами (pwd, cd, mkdir, rmdir, ...)

- работа с файлами (touch, cat, rm, nano, vim)

- поиск (find, grep)

- stdout, stdin, stderr, конвееры, /dev/null, xargs

- как устанавливать приложения и библиотеки в ubuntu (apt, sudo), macos (brew)

- как устанавливать приложения в Python (pip, conda, из сорцов)

Лекция 3. Сложность алгоритма. Линейные структуры данных

28.01 слайды

Лекция 4. Словари. Data model

04.02 слайды примеры к лекции

Лекция 5. Представление данных в компьютере.

11.02 слайды

  • text, encoding, unicode
  • str vs bytes
  • file IO

Лекция 6. Функции 1

19.02 слайды

Лекция 7. Функции 2

Элементы функционального стиля в Python 25.02 слайды

Лекция 8. Обработка ошибок

04.03 слайды

Лекция 9. Итераторы и генераторы

11.03 слайды см первые 2 части.

практика https://colab.research.google.com/drive/1ZjaD2LfPksqOYxnqD_60OeFUJ1xQCies

больше про itertools https://compscicenter.ru/courses/python/2018-autumn/classes/4299/

Лекция 10. Проектирование, тестирование, стиль

https://docs.google.com/presentation/d/1FzLRs0jzOOHLTlRbID9hQPOZJT2ZUQb4m3hNdaI4RtE/edit?usp=sharing

Лекция 11. Введение в сетевые технологии

1.04 слайды

Лекция 12. Web

8.04 слайды

Лекция 13. Web API, Facebook Messenger API

15.04 презентация сломана, все примеры на доске рисовались

Лекция 14. Архитектура web-сервиса.

22.04 Архитектура web-сервиса на примере Авито. Как решать 2-ую домашку.

Лекция 15. Concurrency and parallelism

29.04 multiprocessing, threading, asyncio

https://realpython.com/python-concurrency/

https://github.com/yandexdataschool/python_public/blob/master/slides/9s.Asyncrony.ipynb

https://docs.python.org/3/library/concurrent.futures.html#module-concurrent.futures

Лекция 16. Введение в анализ данных.

13.05 numpy, pandas, matplotlib презентации https://drive.google.com/file/d/1bDenUb8aO1wDJp7xDiaWgEhClYNPc9K-/view?usp=sharing

Программа курса - примерное содержание занятий

  • Структуры данных.

Структуры данных и коллекции Python, сложность вычислений по времени и памяти. Сравнение коллекций. Асимптотика. O-символика. Структуры данных numpy, pandas Однопроходный алгоритм. Генератор списка, словаря, множества. Бинарный поиск и его сложность. Сортировки. Оценка сложности. Хеш-таблицы. Стек, очередь, правильная скобочная последовательность. Бинарный поиск.

  • Строки, кодировки, Unicode.

Представление строк. Конкатенация. Быстрый поиск подстрок. Длина строки. Кодировки. Работа с файлами.

  • Функции.

Входные и выходные параметры. Позиционные и именованные аргументы. Лямбда-функции. Декораторы. Модуль functools

  • ООП.

Цели и задачи ООП. Классы, атрибуты, методы. Объектная модель Python. Паттерны проектирования

  • Обработка ошибок.

Исключения. Обработка ошибок. Менеджеры контекста.

  • Дизайн приложений и библиотек. Промышленное программирование.

Распространение кода на Python: wheel, egg. Пакетные менеджеры. Дизайн программы. Стиль кода. Документация и тестирование

  • Регулярные выражения.
  • Стандартная библиотека языка Python.
  • Анализ данных на Python.

Matplotlib, Numpy, Pandas, Scipy. Описательные статистики. Гистограммы. Ящики с усами. Ядерные оценки плотности.

  • Web-технологии.

HTTP, клиент-сервер, REST. requests, telegram-боты

  • Итераторы, последовательности, генераторы.
  • Обзор всего пройденного на курсе.

Семинары

Семинары 1-2. Основные инструменты

Note! Очень желательно принести с собой ноутбук, потому что сдавать в систему задачки с компьютеров из дисплейного класса нельзя.

1. Общие организационные моменты

2. продвинутые python-интерпретаторы jupyter, colab.

Подсказки в продвинутых интерпретаторах.

https://colab.research.google.com/notebooks/welcome.ipynb

3. Как поставить python и настроить окружение.

Научный дистрибутив Anaconda https://www.anaconda.com/download

Как ставить либы через pip https://www.digitalocean.com/community/tutorials/common-python-tools-using-virtualenv-installing-with-pip-and-managing-packages#a-thorough-pip-how-to

4. Базовый рассказ про работу в командной строке, git, ssh (необходимо для сдачи заданий) Навигация по папкам, перемещение и удаление папок/файлов. Note! про stdin, stdout, stderr практических примеров! На лекции не разобрались. Материалы про git https://git-scm.com/book/ru/v2 (достаточно будет разобраться что же такое система контроля версий, коммит, репозиторий, что делают команды git push, git pull)

Материалы про ssh https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process

5. Знакомство с чудо-системой приёма домашек. https://hse-programming-intro.manytask.org/

Инструкция как настроить систему https://gitlab.com/appleveronika/hse-programming-intro/blob/master/README.md

6. Работа в PyCharm Подсказки по питону и либам. Как настроить проект с задачками курса и запускать тесты. Навигация по проекту.

https://www.jetbrains.com/pycharm/download/#section=mac нужна версия Community (PyCharm CE)

7. Для вашего удобства, для тех кто затрудняется настроить систему, мы подготовили виртуальную машину с Ubuntu с преднастроенной системой (там есть git, python, pytest) архив https://yadi.sk/d/cYJx1a1SLpM0yQ пароль от архива спрашивайте у семинаристов и в чате курса

Семинар 3. Простые алгоритмы с анализом сложности

Бинарный поиск, сортировки, использование stack и queue

ноутбук с примерами https://drive.google.com/file/d/1Em4yuD9Om1Fd3ChkewRImdCMZ25s_WnS/view?usp=sharing

Семинар 4. Алгоритмы хеширования

Семинар 5. type hints

Семинар 6. Конечные автоматы

слайды https://colab.research.google.com/drive/1P9mgjZ-Le_-5AhV1Fov8zNskTQX0LCG8

Семинар 7. Регулярные выражения

Семинар 8. Тесты

Семинар 13.

примеры с семинара Димы: https://github.com/miguelgrinberg/flasky/tree/4c https://github.com/miguelgrinberg/flasky/tree/14a

(если вам тяжеловато, то лучше начать с самых простых примеров, например, https://github.com/miguelgrinberg/flasky/blob/2a/hello.py https://github.com/miguelgrinberg/flasky/blob/2b/hello.py

книжка https://flaskbook.com/# — есть ссылки на видосы обучающие, если вы любите такой формат.

Домашние задания

Каждую неделю необходимо сдавать практические задания в Manytask

ДЗ №1

Ссылка на задание Дедлайн: 02.04 23:59

ДЗ №2

https://gitlab.com/appleveronika/hse-programming-intro/tree/master/hw2_bot

Новости курса

27.04 экзамен будет 27 мая, нам согласовали время с 9 до 12. экзамен будет в форме контеста, на пару часов.

22.01 Консультация по настройке окружения и системы состоится 23 января 2 парой (10:30 - 11:50) в аудитории 318.

14.01 Семинар Димы Контурова перенесён на понедельник, после лекции, в аудитории 318. На этой неделе семинар состоится в среду, 16 января, в дисплейном классе 318.

Полезные материалы

Основная литература

  1. Н.А.Ворожцов, А.В.Винокуров, 2008. Практика и теория программирования. Физматкнига
  2. Документация языка Python https://docs.python.org/3/
  3. Б.У. Керниган, Р. Пайк , 2017. Практика программирования. Вильямс
  4. Micha Gorelick, Ian Ozsvald, 2014. High Performance Python
  5. Лучано Рамальо, 2016. Python. К вершинам мастерства