Блок 1 — Python Basic (1–6)
- Лекция 1. Введение. Типизации. Переменные. Строки и числа. Булева алгебра. Ветвление
- Лекция 2. Обработка исключений. Списки, строки детальнее, срезы, циклы.
- ▶ Лекция 3: None. Range, list comprehension, sum, max, min, len, sorted, all, any. Работа с файлами
- Лекция 4. Хэш таблицы. Set, frozenset. Dict. Tuple. Немного об импортах. Namedtuple, OrderedDict
- Лекция 5. Функции, типизация, lambda. Map, zip, filter.
- Лекция 6. Алгоритмы и структуры данных
Блок 2 — Git (7–8)
Блок 3 — Python Advanced (9–14)
- Лекция 9. Введение в ООП. Основные парадигмы ООП. Классы и объекты. Множественное наследование.
- Лекция 10. Magic methods. Итераторы и генераторы.
- Лекция 11. Imports. Standard library. PEP8
- Лекция 12. Декораторы. Декораторы с параметрами. Декораторы классов (staticmethod, classmethod, property)
- Лекция 13. Тестирование
- Лекция 14. Проектирование. Паттерны. SOLID.
Блок 4 — SQL (15–17)
Блок 5 — Django (19–26)
- Лекция 19. Знакомство с Django
- Лекция 20. Templates. Static
- Лекция 21. Модели. Связи. Meta. Abstract, proxy.
- Лекция 22. Django ORM.
- Лекция 23. Forms, ModelForms. User, Authentication.
- Лекция 24. ClassBaseView
- Лекция 25. NoSQL. Куки, сессии, кеш
- Лекция 26. Логирование. Middleware. Signals. Messages. Manage commands
Блок 6 — Django Rest Framework (27–30)
Блок 7 — Python async (31–33)
Блок 8 — Deployment (34–35)
Сегодня познакомимся с некоторыми новыми концепциями, но в основном погрузимся в практику.
В языке Python существует специальное значение, обозначающее отсутствие какого-либо значения — None. Это объект
встроенного типа NoneType, который используется для представления «ничего» или «неизвестного» значения.
Уникальность: В Python существует только один экземпляр None. Это означает, что все переменные, которым присвоено
значение None, указывают на один и тот же объект.
Булевое значение: None интерпретируется как False в логических операциях.
Не является пустой строкой, нулём или списком: None — это не 0, не '' (пустая строка) и не пустой список []. Это отдельный объект.
some_var = NoneСравнение с None принято выполнять с помощью операторов is / is not, а не через ==:
x = None
if x is None:
print("Переменная x содержит None")range() — функция, создающая последовательность чисел, чаще всего применяется в циклах for и его производных.
Принимает до 3 параметров. Один обязательный, и два вспомогательных.
Если введён только один параметр, то генерирует последовательность чисел от 0 до указанного числа, не включительно. Например:
for i in range(5):
print(i)
# Вывод:
# 0
# 1
# 2
# 3
# 4Если введены два параметра, то range воспринимает их как начало и конец (конец не включительно).
for i in range(2, 6):
print(i)
# Вывод:
# 2
# 3
# 4
# 5Если введены три параметра, то третий воспринимается как шаг между элементами. В качестве шага можно передавать отрицательные значения!
for i in range(2, 10, 3):
print(i)
# Вывод:
# 2
# 5
# 8На самом деле для цикла for существует интересная особенность: если нам нет необходимости использовать перебираемые элементы, мы можем указать символ _ вместо переменной цикла:
for _ in range(3):
print('It will be printed 3 times')
# Вывод:
# It will be printed 3 times
# It will be printed 3 times
# It will be printed 3 timesPython — это язык программирования, который предоставляет множество встроенных (built-in) функций для работы с
данными и коллекциями. Эти функции упрощают манипуляции с данными и делают код более читаемым и эффективным.
Рассмотрим несколько встроенных функций Python, включая all, any, sorted, len, sum, min и max.
Функция min() находит наименьший элемент в числовой коллекции, а функция max() — наибольший. Рассмотрим пример:
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
min_value = min(numbers) # Минимум: 1
max_value = max(numbers) # Максимум: 9Функция sum() вычисляет сумму всех элементов числовой коллекции, такой как список или кортеж. Рассмотрим пример:
numbers = [1, 2, 3, 4, 5]
total = sum(numbers) # Сумма: 15Функция len() используется для определения длины (количества элементов) коллекции, включая строки, списки, кортежи и
другие. Рассмотрим примеры:
text = "Привет, мир!"
length = len(text) # Длина строки: 12
numbers = [1, 2, 3, 4, 5]
length = len(numbers) # Длина списка: 5Функция sorted() сортирует элементы коллекции в порядке возрастания (по умолчанию) и возвращает новый список. Она также
может принимать дополнительный аргумент reverse=True для сортировки в обратном порядке. Рассмотрим пример:
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers) # [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]- Найти наибольшее и наименьшее значение в списке.
- Найти среднее арифметическое из списка чисел.
- Найти второе по величине значение в списке ([10, 2, 5, 8, 0] → результат 8).
- Проверить, является ли список уже отсортированным.
- Заданы два числа, вывести все нечётные значения между ними.
- Заданы два числа, найти сумму всех значений между ними.
- Заданы два числа, вывести все числа между ними в обратном порядке (10, 6 → [10, 9, 8, 7, 6]).
- Сложная! Используя цикл
for,rangeи свойства списков, найти заданное число Фибоначчи.
Python — это язык программирования, который известен своей читаемостью и эффективностью в написании кода. Одним из мощных инструментов, предоставляемых Python, является List Comprehension, или генераторы списков. Это синтаксическая конструкция, которая позволяет создавать списки более компактно и эффективно.
List Comprehension (генераторы списков) — это способ создания новых списков в Python на основе существующего списка или другой итерируемой последовательности. Этот метод позволяет сократить количество кода и улучшить читаемость, особенно при создании списков на основе условий.
Синтаксис List Comprehension выглядит следующим образом:
new_list = [expression for item in iterable if condition]Где:
new_list— новый список, который будет создан.expression— выражение, которое определяет, какие элементы будут включены в новый список.item— переменная, которая принимает каждый элемент из итерируемой последовательности.iterable— итерируемая последовательность, например, список или кортеж.condition(опционально) — условие, которому должен соответствовать элемент, чтобы быть включенным в новый список.
numbers = [x for x in range(10)]
# Результат: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]squares = [x ** 2 for x in range(10)]
# Результат: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [x for x in numbers if not x % 2]
# Результат: [2, 4, 6, 8, 10]text = "Привет, мир! Давайте изучать Python."
words = [word.lower() for word in text.split()]
# Результат: ['привет,', 'мир!', 'давайте', 'изучать', 'python.']Метод join() позволяет объединить элементы списка (или другой итерируемой последовательности) в одну строку, используя указанный разделитель:
words = ['Привет', 'мир', 'Python']
result = ' '.join(words) # Объединение через пробел
# Результат: 'Привет мир Python'
result = ', '.join(words) # Объединение через запятую с пробелом
# Результат: 'Привет, мир, Python'
result = ''.join(words) # Объединение без разделителя
# Результат: 'ПриветмирPython'List Comprehension также поддерживает вложенные конструкции, позволяя создавать списки более сложной структуры.
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_matrix = [x for row in matrix for x in row]
# Результат: [1, 2, 3, 4, 5, 6, 7, 8, 9]matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
diagonal = [matrix[i][i] for i in range(len(matrix))]
# Результат: [1, 5, 9]Функция all() проверяет, все ли элементы итерируемого объекта истинны (после преобразования к булевому значению). Если все элементы истинны, она возвращает True, иначе — False. Рассмотрим пример:
numbers = [1, 2, 3, 4, 5]
result = all([x > 0 for x in numbers]) # True, так как все числа положительныеПрименение: all работает со списками, кортежами, множествами и любыми итерируемыми объектами. Эквивалент без создания промежуточного списка (предпочтительнее):
numbers = [1, 2, 3, 4, 5]
all(x > 0 for x in numbers) # генераторное выражение, без лишнего спискаФункция any() проверяет, есть ли хотя бы один истинный элемент в итерируемом объекте. Если хотя бы один элемент истинен, она возвращает True, иначе — False. Рассмотрим пример:
numbers = [1, 2, 3, -1, -2]
result = any([x < 0 for x in numbers]) # True, так как есть отрицательные числаАналогично для any — можно передавать список напрямую или использовать генераторное выражение:
numbers = [1, 2, 3, -1, -2]
any(x < 0 for x in numbers)- Создать список чисел от 5 до 100.
- Создать список нечётных чисел от 5 до 100.
- Есть список слов — создать список, который будет содержать первые буквы из каждого слова.
- Не связано с list comprehension. Из прошлого списка сделать строку (используя
join()). - Есть список чисел. Создать список на его основе, но взять только отрицательные значения.
- Создать список квадратов чисел в указанном пользователем диапазоне.
- Используя
any, выяснить, есть ли в списке положительные числа. - Используя
all, выяснить, все ли числа в списке чётные.
Работа с файлами — важная часть программирования в Python.
Прежде чем начать работать с файлом, необходимо его открыть с помощью функции open(). Эта функция принимает два
аргумента: имя файла и режим доступа (чтение, запись и т. д.). Например, чтобы открыть файл для чтения, используйте
следующий код:
file = open("example.txt", "r")После завершения работы с файлом его следует закрыть с помощью метода close():
file.close()Закрытие файла важно, чтобы освободить ресурсы и обеспечить целостность данных. На практике явный вызов close() применяется редко — ниже я опишу, почему.
Для чтения всего содержимого файла можно использовать метод read():
file = open("example.txt", "r")
content = file.read()
file.close()Чтение файла по строкам можно выполнить с помощью итерации:
В Python файл — итерируемый объект!
file = open("example.txt", "r")
for line in file:
print(line)
file.close()Можно прочитать определённое количество символов из файла с помощью метода read() с аргументом:
file = open("example.txt", "r")
partial_content = file.read(50) # Прочитать первые 50 символов файла
file.close()Python предоставляет удобный способ автоматического закрытия файла после завершения работы с ним, используя контекстный
менеджер (with):
Этот способ используется на практике гораздо чаще, чем обычные open и close. Почему эта «магия» так работает, расскажу дальше по курсу.
with open("example.txt", "r", encoding="utf-8") as file:
content = file.read()
# Файл автоматически закроется после завершения блока withПри чтении из файла данные всегда возвращаются как строки. Если в файле хранятся числа, их нужно преобразовать с помощью int() или float():
# Файл numbers.txt содержит числа, каждое на новой строке:
# 10
# 25
# 7
with open("numbers.txt", "r") as file:
numbers = []
for line in file:
number = int(line.strip()) # strip() убирает символы переноса строки
numbers.append(number)
print(max(numbers)) # Найти максимальное числоИли с использованием list comprehension:
with open("numbers.txt", "r") as file:
numbers = [int(line.strip()) for line in file]
print(max(numbers))Метод
strip()удаляет пробельные символы (включая\n) с начала и конца строки.
Для записи текста в файл используйте режим доступа "w" (запись) с функцией write():
file = open("example.txt", "w")
file.write("Привет, мир!")
file.close()Если файл не существует, он будет создан. Если файл существует, его содержимое будет заменено.
Чтобы добавить текст к существующему файлу, используйте режим доступа "a" (добавление):
file = open("example.txt", "a")
file.write("\nДополнительная строка")
file.close()Все вышеупомянутые операции могут быть выполнены как с текстовыми, так и с бинарными файлами. Для работы с бинарными
файлами используются режимы доступа "rb" (чтение бинарного файла) и "wb" (запись бинарного файла).
Бинарные файлы — это все файлы, которые нельзя прочитать как текст (картинки, исполняемые файлы и т. д.).
# Чтение бинарного файла
with open("binary_file.bin", "rb") as file:
binary_data = file.read()
# Запись бинарного файла
with open("binary_file.bin", "wb") as file:
binary_data = b'\x00\x01\x02\x03\x04'
file.write(binary_data)-
Чтение файла и вывод его содержимого: создайте текстовый файл
sample.txtс несколькими строками текста. Напишите программу, которая открывает файл и выводит его содержимое на экран. -
Запись в файл: напишите программу, которая запрашивает у пользователя несколько строк текста и записывает их в файл с именем
output.txt. -
Копирование файла: создайте текстовый файл
source.txt. Напишите программу, которая читает содержимоеsource.txtи записывает его в новый файлdestination.txt. -
Анализ файла: создайте текстовый файл со списком чисел (каждое число на новой строке). Напишите программу, которая читает файл и печатает самое большое число.
-
Конвертация файлов: создайте текстовый файл с температурами в градусах Цельсия (каждая на новой строке). Напишите программу, которая читает файл, конвертирует температуры в градусы Фаренгейта и записывает результаты в новый файл.
-
Подсчёт слов в файле: напишите программу, которая считает количество слов в текстовом файле.
-
FizzBuzz: реализуйте FizzBuzz с прошлого занятия, но записывайте результаты в файл.
← Лекция 2: Обработка исключений. Списки, строки детальнее, срезы, циклы. | Лекция 4: Хэш таблицы. Set, frozenset. Dict. Tuple. Немного об импортах. Namedtuple, OrderedDict →

