Федеральное государственное бюджетное образовательное
учреждение высшего образования 
Московский государственный университет имени М.В. Ломоносова
Факультет вычислительной математики и кибернетики

УТВЕРЖДАЮ
декан факультета вычислительной математики и кибернетики
______________/И.А. Соколов /
«___» ________________20___г.

РАБОЧАЯ ПРОГРАММА ДИСЦИПЛИНЫ
Наименование дисциплины:
Язык программирования Python
Уровень высшего образования:
бакалавриат
Направление подготовки / специальность:
01.03.02 «Прикладная математика и информатика» (3++)
Направленность (профиль):
Системное программирование и компьютерные науки
Форма обучения:
очная

Москва 2025
Рабочая программа дисциплины разработана в соответствии с самостоятельно установленным МГУ образовательным стандартом (ОС МГУ) для реализуемых основных профессиональных образовательных программ высшего образования по направлению подготовки 01.03.02 "Прикладная математика и информатика" программы бакалавриата.  Утвержден приказом МГУ от 30 августа 2019 года № 1041 (в редакции приказов МГУ от 11 сентября 2019 года № 1109, от 10 июня 2021 года № 609, от 7 октября 2021 года № 1048, от 21 декабря 2021 года № 1404, от 2 ноября 2022 года № 1299).

1. Дисциплина относится к вариативной части ОПОП ВО.

2. Входные требования для освоения дисциплины: учащиеся должны владеть знаниями по дисциплинам «Алгоритмы и алгоритмические языки», «Операционные системы» в объеме, соответствующем программе первого и второго года обучения основных образовательных программ бакалавриата по укрупненной группе направлений и специальностей 02.00.00 «Компьютерные и информационные науки».

3. Результаты обучения по дисциплине, соотнесенные с требуемыми компетенциями выпускников.

Компетенции выпускников, частично формируемые при реализации дисциплины:

•	ОПК-2.2 Способность использовать современное свободное программное обеспечение для решения задач разработки программного обеспечения на языке Python.
•	ОПК-4.1 Знание и понимание принципов работы современных свободных программных средств при решении задач разработки программного обеспечения на языке Python.
•	ОПК-4.2 Умение выбирать современные свободные программные средства при решении задач разработки программного обеспечения на языке Python.
•	ОПК-4.3 Наличие практического опыта применения современных свободных программных средств при решении задач разработки программного обеспечения на языке Python.
•	ОПК-6.1 Способность разрабатывать программу для решения задачи с использованием языка высокого уровня Python.
•	ОПК-6.2 Умение создавать, тестировать и отлаживать программы на языке программирования высокого уровня Python на компьютере.
•	ОПК-6.3 Навыки написания качественного и хорошо документированного программного кода на языке Python.
Планируемые результаты обучения по дисциплине:

Знать:
1.	основные конструкции и типы данных языка Python;
2.	организацию объектной модели языка Python и основы объектно-ориентированного программирования на Python;
3.	возможности языка Python по написанию асинхронных (псевдопараллельных) программ;
4.	возможности языка Python по работе с файлами;
5.	свободно доступные программные средства для разработки и отладки программ на языке Python.
Уметь: 
1.	составлять и отлаживать программы на языке Python при помощи свободных программных средств;
2.	применять изучаемые в курсе конструкции и типы данных языка Python при разработке программ;
3.	использовать внешние модули при разработке программ на языке Python.
Владеть:
1.	навыками разработки программ на языке Python с использованием свободно доступных инструментов.
4. Формат обучения: лекции проводятся с использованием видеопроектора и персонального компьютера для демонстрации работы программного обеспечения, для выполнения домашних практических заданий используются персональные компьютеры учащихся. Необходимое программное обеспечение имеет открытый исходный код, загружается из сети Интернет и устанавливается учащимися самостоятельно, с консультациями преподавателя по необходимости.

5. Объем дисциплины составляет 2,5 з.е., в том числе 36 академических часов, отведенных на контактную работу обучающихся с преподавателем, 54 академических часа на самостоятельную работу обучающихся.

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

Форма промежуточной аттестации по дисциплине	Всего
(часы)	В том числе	
		Контактная работа 
(работа во взаимодействии с преподавателем)
Виды контактной работы, часы	Самостоятельная работа обучающегося,
 часы 
	
		Занятия лекционного типа	Занятия семинарского типа	Всего		
•	История Python	4	2	-	2	2	
•	Командная строка и объекты	4	2	-	2	2	
•	Логические выражения, условные операторы и цикл
•	Последовательности и цикл for	12	6	-	6	6	
•	Функции и замыкание	4	2	-	2	2	
•	Числа и строки	4	2	-	2	2	
•	Множества и словари
•	Итераторы	12	6	-	6	6	
•	Объектная модель Python
•	Наследование и исключения	12	6	-	6	6	
•	Слоты, дескрипторы, декораторы	4	2	-	2	2	
•	Кодировки и работа с файлами	4	2	-	2	2	
•	Метаклассы и сопоставление шаблону	4	2	-	2	2	
•	Асинхронные возможности	4	2	-	2	2	
•	Модули и пакеты	4	2	-	2	2	
Промежуточная аттестация: экзамен	18	-	-	-	18	
Итого	90	36	-	36	54	

7. Фонд оценочных средств (ФОС) для оценивания результатов обучения по дисциплине

7.1. Типовые контрольные задания или иные материалы для проведения текущего контроля успеваемости

Задание 1. «Чёт-нечет»
Написать генератор-функцию seesaw(sequence), которой на вход передаётся итерируемая целочисленная последовательность, а конструируемый ею генератор возвращает поочерёдно то чётный, то нечётный элемент последовательности в порядке следования. Если элементы одного типа заканчиваются, возвращаются только элементы другого.
Задание 2. «Смешение языков»
Написать функцию mix(…) от произвольного количества параметров-объектов. Функция воспринимает объекты как инкапсулированные пространства имён и возвращает объект, содержащий объединение полей всех объектов-параметров. Поля, чьи имена начинаются на "_", и все callable-поля (методы и функции) отбрасываются. Если в некоторых объектах поля имеют одинаковые имена, используется значение последнего из параметров. Дополнительно у возвращаемого объекта переопределяется __str__(): она возвращает строку вида "поле=значение, поле=значение, …", в которой имена полей отсортированы в алфавитном порядке.
Задание 3. «Единый размер»
Написать декоратор класса под названием sizer, который будет добавлять в класс поле size. При обращении к этому полю возвращается len() объекта, если объект имеет длину, иначе же abs() объекта, если от него вычисляется модуль, и 0 в противном случае. Если в объекте присвоить этому полю некоторое значение, будет возвращаться это значение до тех пор, пока поле не удалят.

7.2. Типовые контрольные задания или иные материалы для проведения промежуточной аттестации.
Вопросы к экзамену.
1.	Командная строка Python: назначение, диалоговая схема работы. Автоматическое дополнение, история, поиск по истории. 
2.	Связывание объектов. Операция связывания. Сборка мусора.
3.	Логические выражения, сравнения. Условная операция и условный оператор. Цикл с предусловием (while).
4.	Последовательности: константные, модифицируемые. Вычислимые последовательности. Цикл по последовательности (for).
5.	Функции. Виды параметров функции. Лямбда-функции.
6.	Рекурсия и особенности ее реализации в Python. Ограничение на глубину рекурсии. Критерий уместности рекурсии.
7.	Порождение функции внутри функции. Замыкание. Позднее связывание.
8.	Вещественные числа в Python. Работа с рациональными числами (decimal, fractions). Проблема накопления погрешности.
9.	Псевдослучайные числа. Генерация псевдослучайных последовательностей, их воспроизводимость.
10.	Строки, их представление. Обработка строк. Форматные строки.
11.	Множества и словари. Словари глобального и локального пространства имен. Передача параметров в функцию в виде словаря.
12.	Итераторы. Генераторы, генератор-функции, параметрические генераторы. Примеры вычислимых последовательностей из Itertools.
13.	Классы и объекты. Их поля, в т.ч. поля-методы. Инициализация полей, конструкторы. «Перегрузка» операций. 
14.	Наследование классов. Видимость полей при наследовании. Множественное наследование, проблема линеаризации предков. Алгоритм MRO C3.
15.	Полиморфизм и проксирование.
16.	Исключения, их роль в управлении вычислениями. Обработка исключений. Наследование исключений. Групповые исключения.
17.	Декораторы. Параметрические декораторы. Декораторы методов и классов.
18.	Дескрипторы и слоты. Модификаторы методов.
19.	Байтовые структуры. Кодировки: однобайтовые, UTF-8, UTF-16. Перекодирование текста, проблема ошибочного перекодирования («МНБНЯРХ»). Наличие нескольких кодировок в ОС Windows.
20.	Работа с байтовыми файлами. Файлы стандартного ввода-вывода. Файл как контекстный менеджер. Файловые объекты.
21.	Типизированные файлы. Сериализация объектов Python. Работа с файлами, содержащими структуры со структурами типа Си. Словарная база данных (dbm).
22.	Метаклассы. Аннотации, их отличие от строгой типизации.
23.	Сопоставление шаблону. Разновидности шаблонов. Связанные переменные.
24.	Асинхронность в Python. Организация событийного цикла. Сопрограммы.
25.	Управление сопрограммами при помощи Asyncio. События, барьерная синхронизация, очереди.
26.	Модули и пакеты. Сборники. Импорт содержимого пакета.

ШКАЛА И КРИТЕРИИ ОЦЕНИВАНИЯ результатов обучения (РО) по дисциплине	
Оценка
РО и
соответствующие 
виды оценочных средств 	2	3	4	5	
Знания
Экзамен	Отсутствие знаний	Фрагментарные знания	Общие, но не структурированные знания	Сформированные систематические знания	
Умения
Выполнение домашних практических заданий 	Отсутствие умений	В целом успешное, но не систематическое умение	В целом успешное, но содержащее отдельные пробелы умение (допускает неточности непринципиального характера)	Успешное и систематическое умение	
Навыки 
(владения, опыт деятельности)
Выполнение домашних практических заданий	Отсутствие навыков (владений, опыта)	Наличие отдельных навыков (наличие фрагментарного опыта)	В целом, сформированные навыки (владения), но используемые не в активной форме	Сформированные навыки (владения), применяемые при решении задач	

Соответствие результатов обучения и компетенций, в развитии которых участвует дисциплина
	
Результаты обучения	Компетенция, с частичным формированием которой связано достижение результата обучения	
Знать:
1.	основные конструкции и типы данных языка Python;
2.	организацию объектной модели языка Python и основы объектно-ориентированного программирования на Python;
3.	возможности языка Python по написанию асинхронных (псевдопараллельных) программ;
4.	возможности языка Python по работе с файлами;
5.	свободно доступные программные средства для разработки и отладки программ на языке Python.	ОПК-4.1
ОПК-4.2	
Уметь:
1.	составлять и отлаживать программы на языке Python при помощи свободных программных средств;
2.	применять изучаемые в курсе конструкции и типы данных языка Python при разработке программ;
3.	использовать внешние модули при разработке программ на языке Python.	ОПК-2.2
ОПК-6.1
ОПК-6.2
ОПК-6.3	
Владеть:  
1.	навыками разработки программ на языке Python с использованием свободно доступных инструментов.	ОПК-4.3
ОПК-6.1	

8. Ресурсное обеспечение:

Основная литература:
1.	The Python Tutorial [Электронный ресурс]. URL: https://docs.python.org/3/tutorial/ 
2.	B. Miller, D. Ranum. Problem Solving with Algorithms and Data Structures using Python [Электронный ресурс]. URL: https://runestone.academy/ns/books/published/pythonds/; перевод на русский: http://aliev.me/runestone/
3.	Python Asyncio: The Complete Guide [Электронный ресурс]. URL: https://superfastpython.com/python-asyncio/ 
Дополнительная литература:
1.	Pro Git book (перевод на русский) [Электронный ресурс]. URL: https://git-scm.com/book/ru/v2
2.	Установка Linux в Windows с помощью WSL [Электронный ресурс]. URL: https://learn.microsoft.com/ru-ru/windows/wsl/install 

Информационные справочные системы:
1.	https://docs.python.org/
2.	https://peps.python.org/ 
3.	http://pypi.org/ 
4.	https://uneex.ru/   
Материально-техническое обеспечение: аудитория с мультимедиа-проектором и экраном, персональный компьютер или ноутбук для демонстрации работы ПО.
Лицензионное ПО: актуальная версия ОС Linux (рекомендуется ОС семейства «Альт»).

9. Язык преподавания:	русский.

10. Преподаватели:  		программист факультета ВМК МГУ Г.В. Курячий.

11. Авторы программы:  	программист факультета ВМК МГУ Г.В. Курячий, 
к.ф.-м.н., старший научный сотрудник факультета ВМК МГУ В.В. Балашов.

12. Рецензент:  		директор по продукту ООО «Базальт СПО» О.И. Щавелев.