История занятий

Дата

Тема лекции

Материалы практики.

07.09.2026

Установочная встреча.

Создание форка.

11.09.2026

Общая информация о Python. Числа.

Запуск, отладка программ на Python. Листинг. Числа. Листинг.

14.09.2026

Тип bool. Условия.

Условия. Листинг.

18.09.2026

Последовательности. Тип str.

Строки. Листинг.

21.09.2026

Списки.

Списки. Листинг.

25.09.2026

Кортежи.

Кортежи. Листинг.

28.09.2026

Словари.

Словари. Листинг.

02.10.2026

Множества. Функции

Множества. Листинг. Функции. Листинг.

05.10.2026

Функции II. Области видимости.

Области видимости. Листинг.

09.10.2026

Функции III. Декораторы

N/A

12.10.2026

Введение в ООП. Классы I

Классы. Листинг.

16.10.2026

Классы II. Инкапусуляция

Инкапусуляция. Листинг.

19.10.2026

Проектирование игры

Проектирование в ООП на примере игры. Листинг.

Краткий конспект лекций

Лекция 1. Установочная встреча

Знакомство с преподавателем. Общая структура курса. Формирование итоговой оценки. Основные идеи, закладываемые в курс. Место курса в образовательной программе.

Лекция 2. Общая информация о Python. Числа

Историческая справка о языке Python. Семантическое версионирование. Проблемы перехода между мажорными версиями. Преимущества языка. Способы повышения скорости работы программы. Форматы запуска программ: репл, консоль. Объектная модель. Сборщик мусора. Переменная как ссылка. Числовые типы. Особенности создания целых чисел и чисел с плавающей точкой. Точность при работе с числами с плавающей точкой. Арифметические операторы и приоритеты. Неизменяемость.

Лекция 3. Тип bool. Условия

Тип bool. Специальные значения True и False. Истинность контейнеров. Структура if/elif/else. Приведение выражения в условии к типу bool. Объединение нескольких условий. Отложенная оценка. Функции all(), any(). Тип bool как наследник типа int. Сравнение объектов: == и is. Сравнение с True/False и None. Тернарный оператор.

Лекция 4. Последовательности. Тип str

Последовательности в Python: str, list и tuple. Ключевые свойства последовательностей. Индексируемость. Срезы: особенности использования, синтаксиса. Срезы как способ копирования последовательностей. Итерируемость. Варианты обхода последовательности: по элементам, по индексам (range), одновременно по индексам и значениям (enumerate). Взятие длины последовательности. Проверка на вхождение. Получение минимального и максимального элементов. Подсчет количества вхождений элемента. Получение индекса первого вхождения элемента по его значению. Строковые методы. Особенности использования методов split, join. Структура for/else.

Лекция 5. Списки

Способы создания списков. Изменяемость списков: добавление, удаление и изменение существующих элементов. Срезы как способ поверхностного копирования. Ловушка разделяемых ссылок. Глубокое копирование. Преимущества и недостатки различных способов копирования. Списочные выражения. Основные преимущества списочных выражений. Списочное выражение как фильтр данных.

Лекция 6. Кортежи

Способы создания кортежей. Структурная неизменяемость кортежей. Основные сценарии использования кортежей. Распаковка значений кортежа. Сортировка списков и кортежей через функцию sorted. Лямбда-функция для сортировки наборов сложных объектов.

Лекция 7. Словари.

Способы создания словарей. Разница в поведении оператора квадратные скобки при извлечении значений в словаре и списке. Изменяемость словарей. Добавление новых элементов в словарь. Удаление элементов из словаря. Изменение существующих элементов. Уникальность ключей. Требования к ключам словаря. Итерирование по ключам, значениям и парам, хранящимся в словаре. Проверка на вхождение ключа с помощью оператора in. Получение размера словаря с помощью len(). Словарные выражения.

Лекция 8. Множества. Функции.

Способы создания множеств. Включения для множеств. Проверка на вхождение элемента с помощью оператора in. Получение размера множества с помощью len(). Итерирование по множествам. Изменяемость множеств. Операции над множествами как математическими абстракциями. Объявление функции с помощью def. Требования и рекомендации к именованию функций. Аргументы функции: позиционные и именованные. Опциональные подсказки типов в описании аргументов и возвращаемых значений. Вызов функции и её объявление. Возврат результатов функции с помощью return. Возврат и обработка нескольких значений. Сопоставление аргументов при вызове функции: позиционное и по имени.

Лекция 9. Функции II. Области видимости

Произвольное количество аргументов функции при помощи *args и **kwargs. Четыре области видимости в Python. Правило LEGB. Связь локальной области видимости и функций. Необходимые предпосылки для возникновения объемлющей области видимости. Связь глобальной области видимости и модулей. Опасности в переопределении объектов из встроенной области видимости и почему переопределение работает. Изменение глобальных переменных из функций. Изменение объектов из объемлющей области видимости. Опциональные подсказки типов в описании аргументов и возвращаемых значений.

Лекция 9. Функции III. Декораторы

Передача аргументов в функцию по ссылке. Ловушка использования объектов изменяемых типов в качестве значений по умолчанию. Интерфейс функции. Мемоизация как способ кеширования результатов вычислений. Роль объемлющей области видимости в построении мемоизации. Декоратор: интерфейс, типовая структура, особенности использования. Типовые задачи, решаемые с помощью декораторов. Эквивалентная запись без использования символа “@”.

Лекция 10. Введение в ООП. Классы I

Парадигмы программирования как способ борьбы с возрастающей сложностью программного обеспечения. Состояние и поведение как ключевые факторы программ, требующие управления. Императивно-процедурное программирование. Функциональное программирование. Объектно-ориентированное программирование. Класс как совокупность свойств и поведения. Класс как пользовательский тип. Класс как совокупность свойств и поведения. Синтаксис создания классов. Объект self. Создание атрибутов экземпляров. Роль метода __init__. Доступ к атрибутам и методам экземпляра внутри контекста класса и за его пределами.

Лекция 11. Классы II. Инкапусуляция

Создание экземпляров классов: без поведения и без состояния, с поведением и без состояния, с поведением и с состоянием. Изменяемость пользовательского типа. Интуитивное понятие интерфейса в объектах окружающего мира. Интерфейс как способ управления сложностью. Интерфейс функции. Интерфейс класса. Инкапсуляция как принцип объединения методов и свойств во внутреннем состоянии объекта. Сокрытие данных как основное свойство инкапсуляции. Соотношение понятий инкапсуляции и сокрытия данных. Механика реализации сокрытия данных в Python: protected и private поля и методы. Доступ к защищённым и приватным полям за пределами контекста класса. Диаграмма классов UML для формального описания создаваемых абстракций.

Лекция 12. Проектирование игры

Проектирование как элемент ООП. Принципы программирования: DRY, SRP. Понятие n-граммы. Генерация текста с помощью n-грамм. Стратегии генерации текста: жадная, Beam Search, Back-off.