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

Этот курс предназначен для начинающих, желающих освоить один из самых популярных и востребованных языков программирования в мире. Вы изучите базовый синтаксис, работу со структурами данных и принципы написания чистого кода.

1. Введение в Python: установка среды, переменные и простые типы данных

Введение в Python: установка среды, переменные и простые типы данных

Добро пожаловать в курс «Основы программирования на Python»! Это первая статья, с которой начнется ваше путешествие в мир разработки. Python сегодня — это один из самых популярных и востребованных языков программирования в мире. Его используют для создания веб-сайтов, анализа данных, искусственного интеллекта, автоматизации рутинных задач и даже для программирования космических аппаратов.

Почему именно Python? Он славится своим простым и понятным синтаксисом, который напоминает обычный английский язык. Это делает его идеальным выбором для новичков. В этой статье мы разберем, как подготовить компьютер к работе, напишем первую программу и изучим фундамент любого языка — переменные и типы данных.

Что такое Python и как он работает?

Python — это интерпретируемый язык высокого уровня. Давайте разберем эти термины, чтобы не осталось вопросов.

* Высокоуровневый язык: Это значит, что Python берет на себя управление памятью и сложными процессами компьютера. Вы пишете код, понятный человеку, а не машине. Интерпретируемый язык: Программы на Python не нужно предварительно превращать в машинный код (компилировать). Специальная программа — интерпретатор* — читает ваш код строку за строкой и сразу же выполняет его.

!Как интерпретатор превращает код в действия

Установка среды разработки

Прежде чем писать код, нам нужно установить инструменты. Вам понадобятся две вещи:

  • Интерпретатор Python: «Мозг», который будет понимать и выполнять ваши команды.
  • Среда разработки (IDE): Удобный текстовый редактор, где мы будем писать код.
  • Шаг 1: Установка Python

  • Перейдите на официальный сайт Python.org.
  • Скачайте последнюю версию для вашей операционной системы (Windows, macOS или Linux).
  • Важно: При установке на Windows обязательно поставьте галочку напротив пункта Add Python to PATH. Это позволит запускать Python из командной строки.
  • Шаг 2: Выбор редактора кода

    Писать код можно хоть в «Блокноте», но это неудобно. Программисты используют специальные редакторы, которые подсвечивают ошибки и подсказывают команды. Для начала я рекомендую:

    * VS Code (Visual Studio Code) — легкий, бесплатный и очень мощный редактор от Microsoft. * PyCharm Community Edition — профессиональная среда разработки, созданная специально для Python.

    Установите любую из этих программ, и вы готовы к работе.

    Ваша первая программа

    По традиции, изучение любого языка начинается с программы, которая выводит на экран фразу «Hello, World!». Давайте сделаем это.

    Откройте ваш редактор кода, создайте новый файл с названием hello.py (расширение .py обязательно) и напишите туда одну строку:

    Запустите программу. В консоли вы увидите:

    Функция print() — это команда, которая говорит интерпретатору: «Возьми то, что находится внутри скобок, и покажи это пользователю».

    Переменные: коробки для данных

    Представьте, что вы переезжаете и упаковываете вещи в коробки. Чтобы не запутаться, вы подписываете каждую коробку: «Книги», «Посуда», «Одежда». В программировании переменные — это и есть такие подписанные коробки, в которых мы храним данные.

    Чтобы создать переменную, нужно придумать ей имя и присвоить значение с помощью знака равенства =. В математике знак равенства означает, что левая и правая части равны, но в программировании это оператор присваивания.

    Рассмотрим формулу присваивания:

    Где — это имя переменной (название коробки), а — это данные, которые мы в неё кладем.

    Пример:

    Теперь, если мы попросим Python напечатать message, он заглянет в «коробку» и выдаст текст «Привет, студент!».

    Правила именования переменных

    Имя переменной не может быть случайным. В Python есть строгие правила и рекомендации (стиль snake_case):

  • Имя может состоять из букв (латиница), цифр и знака подчеркивания _.
  • Имя не может начинаться с цифры.
  • Нельзя использовать пробелы (используйте подчеркивание: my_variable).
  • Python чувствителен к регистру: Score и score — это две разные переменные.
  • Имя должно быть понятным. Лучше написать user_age, чем просто a.
  • Простые типы данных

    В коробки можно положить разные вещи: книги, бокалы, кирпичи. В переменные тоже можно класть данные разных типов. Python — язык с динамической типизацией. Это значит, что вам не нужно заранее сообщать компьютеру, какой тип данных будет лежать в переменной; Python поймет это сам в момент присваивания.

    Рассмотрим четыре основных простых типа данных.

    1. Целые числа (Integer / int)

    Это числа без дробной части: 1, 10, -5, 0, 1000000. С ними можно производить арифметические операции.

    Если мы хотим записать математическое выражение для суммы, оно будет выглядеть так:

    Где — сумма, — первое слагаемое, а — второе слагаемое.

    2. Числа с плавающей точкой (Float)

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

    Даже если вы напишете 5.0, для Python это будет тип float, хотя математически это целое число.

    3. Строки (String / str)

    Строка — это любой текст, заключенный в кавычки. Можно использовать как одинарные ', так и двойные " кавычки, главное — чтобы они были одинаковыми в начале и в конце.

    > «Строки в Python — это упорядоченные последовательности символов, используемые для хранения и представления текстовой информации» — Документация Python

    4. Логический тип (Boolean / bool)

    Этот тип данных может принимать только два значения: True (Истина) или False (Ложь). Он часто используется для проверки условий.

    Обратите внимание: True и False пишутся с большой буквы и без кавычек.

    !Визуальная метафора типов данных Python

    Функция type()

    Иногда мы не знаем или забыли, какой тип данных хранится в переменной. Для этого существует встроенная функция type().

    Ввод данных от пользователя

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

    Важное правило: Функция input() всегда возвращает строку (str). Даже если пользователь введет число «50», программа воспримет его как текст «50».

    Если вы хотите использовать введенное значение как число (например, чтобы умножить его), вам нужно явно преобразовать тип данных:

    Комментарии в коде

    Вы могли заметить в примерах выше текст после символа #. Это комментарии. Python полностью игнорирует всё, что написано после решетки в той же строке. Комментарии нужны программистам, чтобы пояснять сложные участки кода или оставлять заметки для себя и коллег.

    Заключение

    Сегодня мы заложили фундамент вашего обучения. Вы узнали, как установить Python, что такое переменные и какие бывают типы данных. Это базовые кирпичики, из которых строятся самые сложные системы — от простых калькуляторов до нейросетей.

    В следующей статье мы научимся управлять потоком выполнения программы, используя условные операторы. Практикуйтесь в написании кода, экспериментируйте с переменными и не бойтесь ошибок — это лучшая часть обучения!

    2. Управление потоком выполнения: условные операторы if-else и циклы for/while

    Управление потоком выполнения: условные операторы if-else и циклы for/while

    В предыдущей статье мы научились создавать переменные и работать с простыми типами данных. Мы создали «коробки» для информации, но пока наши программы умеют только последовательно выполнять команды сверху вниз, как поезд, идущий по единственному пути.

    Однако настоящая магия программирования начинается тогда, когда программа может принимать решения и выполнять повторяющиеся действия. Сегодня мы научимся управлять потоком выполнения (Control Flow). Мы превратим наш линейный путь в разветвленную сеть дорог с перекрестками и кольцевыми развязками.

    Условные операторы: искусство принятия решений

    В жизни мы постоянно принимаем решения на основе условий: «Если пойдет дождь, я возьму зонт, иначе я пойду в футболке». В Python для этого используется конструкция if-else.

    Оператор if

    Самый простой способ проверить условие — использовать оператор if (если). Синтаксис Python здесь очень похож на обычный английский язык.

    Обратите внимание на две важнейшие детали:

  • Двоеточие : в конце строки с условием. Оно говорит интерпретатору: «Дальше будет блок кода, который нужно выполнить, если условие истинно».
  • Отступ (Indentation). Строка print(...) смещена вправо (обычно на 4 пробела). В Python отступы — это не просто красота, это часть синтаксиса. Всё, что находится с отступом, относится к блоку if.
  • !Схема работы условного оператора if

    Операторы сравнения

    Чтобы задать условие, нам нужны операторы сравнения. Они возвращают True или False.

    * == — равно (не путайте с = — присваиванием!) * != — не равно * > — больше * < — меньше * >= — больше или равно * <= — меньше или равно

    Конструкция if-else

    Часто нам нужно не просто выполнить действие при успехе, но и предусмотреть альтернативный вариант. Для этого существует else (иначе).

    Конструкция if-elif-else

    А что, если вариантов больше двух? Например, светофор. Для этого используется elif (сокращение от else if — иначе если).

    Python проверяет условия сверху вниз. Как только он находит первое истинное условие (True), он выполняет его блок и пропускает все остальные.

    Логические операторы

    Иногда нужно проверить сразу несколько условий. Для этого используются логические связки:

  • and (И) — истина, только если оба условия верны.
  • or (ИЛИ) — истина, если хотя бы одно условие верно.
  • not (НЕ) — инвертирует значение (превращает ложь в истину и наоборот).
  • Рассмотрим это на примере формулы булевой логики:

    Где — результат (Result), — первое условие, — второе условие, а символ обозначает логическое «И» (AND). Если истинно и истинно, то будет истинным.

    Пример в коде:

    Циклы: автоматизация повторений

    Представьте, что вам нужно вывести на экран фразу «Я люблю Python» 100 раз. Копировать строку print 100 раз — плохая идея. Для повторения действий используются циклы.

    Цикл while (Пока)

    Цикл while выполняет блок кода до тех пор, пока условие остается истинным. Это похоже на повторяющийся if.

    Осторожно: Бесконечный цикл! Если вы забудете изменить переменную внутри цикла (например, уберете count = count + 1), условие count <= 5 всегда будет истинным, и программа зависнет, бесконечно печатая текст. Чтобы прервать такую программу, обычно используют комбинацию клавиш Ctrl+C.

    Цикл for (Для)

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

    В этом примере переменная letter на каждой итерации (витке цикла) будет принимать значение следующей буквы: сначала 'P', потом 'y', и так далее.

    !Визуализация работы цикла for при переборе строки

    Функция range()

    Чаще всего цикл for используют, чтобы выполнить действие определенное количество раз. Для этого нужна функция range() (диапазон).

    Функция range() может принимать три аргумента: start, stop, step.

    Математически количество элементов , которое сгенерирует эта функция, можно выразить приближенной формулой (для целых чисел):

    Где — количество итераций, — конечное значение (не включается), — начальное значение, а — шаг изменения.

    Примеры использования:

    * range(5) — от 0 до 4. * range(2, 6) — от 2 до 5. * range(0, 10, 2) — 0, 2, 4, 6, 8 (шаг 2).

    Управление внутри циклов: break и continue

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

    break (Прервать)

    Команда break немедленно останавливает цикл и выходит из него, даже если условие все еще истинно.

    continue (Продолжить)

    Команда continue прерывает текущую итерацию и сразу переходит к следующей, пропуская весь код, который написан ниже в блоке цикла.

    Вложенные конструкции

    Вы можете вкладывать циклы в условия, условия в циклы и даже циклы в циклы. Главное — следить за отступами.

    > «Простота — залог надежности». Старайтесь не создавать слишком глубокие вложенности (например, 5 уровней отступов). Такой код сложно читать и отлаживать.

    Заключение

    Теперь вы обладаете мощными инструментами. Условные операторы if-else позволяют вашим программам «думать» и реагировать на разные ситуации, а циклы for и while избавляют от рутинной работы, позволяя обрабатывать огромные массивы данных за доли секунды.

    В следующей статье мы перейдем к одной из самых важных тем в программировании — функциям. Мы научимся упаковывать наш код в переиспользуемые блоки, чтобы строить еще более сложные и интересные программы.

    3. Структуры данных: списки, кортежи, словари и множества

    Структуры данных: списки, кортежи, словари и множества

    В предыдущих статьях мы научились сохранять данные в переменные и управлять ходом программы с помощью циклов и условий. Но что, если нам нужно сохранить не одно число или строку, а список покупок, базу данных студентов или результаты научного эксперимента? Создавать переменную для каждого элемента (item1, item2, item3...) — это неудобно и неэффективно.

    Сегодня мы переходим к изучению структур данных. Это контейнеры, которые позволяют организовывать и хранить большие объемы информации. В Python существует четыре основных встроенных типа коллекций: списки, кортежи, словари и множества. Разберемся с каждым из них.

    Списки (Lists)

    Список — это упорядоченная изменяемая коллекция объектов. Представьте себе поезд: вагоны идут друг за другом в строгом порядке, и вы можете отцепить вагон, прицепить новый или заменить груз внутри.

    !Визуализация списка как поезда с нумерацией вагонов (индексов)

    Создание списка

    Списки создаются с помощью квадратных скобок []. Внутри могут храниться данные любых типов: числа, строки и даже другие списки.

    Индексация: доступ к элементам

    Каждый элемент списка имеет свой адрес — индекс. Важно запомнить главное правило программиста: счет начинается с нуля.

    Также Python поддерживает отрицательную индексацию. Индекс -1 означает последний элемент, -2 — предпоследний и так далее.

    Изменение списков

    Списки — это изменяемый (mutable) тип данных. Это значит, что мы можем менять их содержимое после создания.

    Основные методы списков

    У списков есть встроенные функции (методы), которые помогают ими управлять:

    * append(item) — добавляет элемент в конец списка. * insert(index, item) — вставляет элемент на указанную позицию. * remove(item) — удаляет первое вхождение элемента. * pop(index) — удаляет элемент по индексу и возвращает его.

    Кортежи (Tuples)

    Кортеж — это брат-близнец списка, но с одним важным отличием: он неизменяем (immutable). После того как вы создали кортеж, вы не можете добавить, удалить или изменить в нем элементы.

    Кортежи создаются с помощью круглых скобок ().

    Если вы попытаетесь сделать coordinates[0] = 5, Python выдаст ошибку.

    Зачем нужны кортежи, если есть списки?

  • Защита данных: Если вы передаете в программу настройки, которые нельзя менять, используйте кортеж.
  • Скорость: Кортежи занимают меньше памяти и работают быстрее списков.
  • Ключи словарей: Кортежи могут быть ключами в словарях (об этом ниже), а списки — нет.
  • Словари (Dictionaries)

    Если списки — это вагоны с номерами, то словарь — это огромная гардеробная с подписанными ячейками. Чтобы получить пальто, вам не нужно знать его порядковый номер, вам нужен уникальный номерок или имя владельца.

    Словарь хранит данные в формате Ключ: Значение (Key: Value). Ключи должны быть уникальными.

    !Визуализация словаря как хранилища по именованным ключам

    Создание и использование

    Словари создаются с помощью фигурных скобок {}.

    Изменение словаря

    Словари изменяемы. Можно добавлять новые пары или менять существующие.

    Множества (Sets)

    Множество — это коллекция уникальных элементов, которые не имеют строгого порядка. Это реализация математической концепции множеств в программировании.

    Множества полезны, когда вам нужно убрать дубликаты или проверить принадлежность элемента к группе.

    Математика множеств

    Самая мощная сторона множеств — это операции над ними: объединение, пересечение, разность. Давайте рассмотрим это с точки зрения математики.

    Пусть у нас есть два множества: (студенты, изучающие Python) и (студенты, изучающие Java).

    #### 1. Объединение (Union)

    Мы хотим получить список всех студентов, которые изучают хотя бы один из языков.

    Где — результирующее множество, — первое множество, — второе множество, а символ обозначает операцию объединения (все элементы из и все элементы из без повторов).

    В Python:

    #### 2. Пересечение (Intersection)

    Нам нужны студенты, которые изучают и Python, и Java одновременно.

    Где — результат, и — исходные множества, а символ обозначает пересечение (только те элементы, которые есть в обоих множествах).

    В Python:

    #### 3. Разность (Difference)

    Студенты, которые знают Python, но не знают Java.

    Где — результат, — уменьшаемое множество, — вычитаемое множество, а символ (или просто минус) означает исключение элементов из .

    В Python:

    Как выбрать структуру данных?

    Чтобы вы не запутались, я подготовил небольшую таблицу-шпаргалку.

    | Структура | Синтаксис | Упорядоченность | Изменяемость | Уникальность | Для чего использовать | | :--- | :--- | :--- | :--- | :--- | :--- | | Список | [1, 2] | Да | Да | Нет | Коллекции однотипных или разных данных, которые нужно менять. | | Кортеж | (1, 2) | Да | Нет | Нет | Данные, которые нельзя менять (координаты, настройки). | | Словарь | {"k": "v"} | Нет (до 3.7)* | Да | Ключи уникальны | Структурированные данные, поиск по ключу. | | Множество | {1, 2} | Нет | Да | Да | Удаление дубликатов, математические операции. |

    > Примечание: Начиная с версии Python 3.7, словари сохраняют порядок вставки элементов, но полагаться на это как на основное свойство не всегда стоит в старых проектах.

    Заключение

    Сегодня мы разобрали четыре кита, на которых держится работа с данными в Python. Списки позволяют хранить последовательности, кортежи защищают данные от изменений, словари дают быстрый доступ по ключу, а множества помогают работать с уникальными объектами.

    В следующей статье мы научимся упаковывать логику в функции, чтобы наш код стал модульным и профессиональным. Попробуйте создать список своих любимых фильмов или словарь с контактами друзей — практика лучший учитель!

    4. Функции и модули: принципы DRY и организация кода

    Функции и модули: принципы DRY и организация кода

    В предыдущих статьях мы проделали большой путь: научились хранить данные в переменных, списках и словарях, а также управлять логикой программы с помощью условий и циклов. Теперь ваши программы могут выполнять сложные действия. Но по мере того как код растет, возникает новая проблема: он становится громоздким, запутанным и сложным для чтения.

    Представьте, что вы пишете программу для интернет-магазина. Вам нужно рассчитать налог на товар в корзине. Вы пишете формулу. Потом вам нужно рассчитать налог для товара на складе. Вы копируете формулу. Затем — для отчета бухгалтерии. Снова копируете.

    А что, если налоговая ставка изменится? Вам придется искать и исправлять этот код в трех (или тридцати) разных местах. Вероятность ошибки возрастает до 100%.

    Сегодня мы изучим инструменты, которые превращают «спагетти-код» в стройную архитектуру: функции и модули. Мы также познакомимся с главным принципом профессионального программиста — DRY.

    Что такое функция?

    Функция — это именованный блок кода, который выполняет определенную задачу. Вы уже пользовались встроенными функциями Python, такими как print(), len() или input(). Теперь пришло время создавать свои собственные.

    Представьте функцию как кухонный комбайн. Вы загружаете в него продукты (входные данные), нажимаете кнопку, механизм внутри делает работу, и на выходе вы получаете готовое блюдо (результат).

    !Визуальная метафора работы функции: вход, обработка, выход

    Создание простой функции

    В Python функции создаются с помощью ключевого слова def (от английского define — определить).

    Когда вы запускаете этот код, ничего не произойдет. Почему? Потому что мы только научили Python делать это (определили функцию), но не попросили выполнить. Чтобы код сработал, функцию нужно вызвать.

    Аргументы и параметры

    Функция say_hello скучная — она всегда говорит одно и то же. Чтобы сделать функцию гибкой, мы можем передавать в нее данные. Переменные, которые мы указываем в скобках при создании функции, называются параметрами.

    Здесь name — это параметр. А конкретные значения "Анна" и "Борис", которые мы передаем при вызове, называются аргументами.

    Возврат значения: return vs print

    Это один из самых сложных моментов для новичков. В чем разница между тем, чтобы напечатать результат внутри функции, и тем, чтобы вернуть его?

    * print() — это просто вывод текста на экран. Программа «выкрикивает» результат, но не может использовать его дальше. * return — это передача результата обратно в ту часть программы, которая вызвала функцию. Это позволяет сохранить результат в переменную и использовать его в дальнейших вычислениях.

    Рассмотрим пример математической функции для вычисления периметра прямоугольника.

    Формула периметра:

    Где — периметр, — длина первой стороны, — длина второй стороны, а символ обозначает умножение.

    Правильная реализация через return:

    Если бы мы использовали print внутри функции вместо return, переменная my_perimeter была бы пустой (в Python это значение None), и мы не смогли бы посчитать needed_fence.

    > «Функция должна делать что-то одно и делать это хорошо». Старайтесь не смешивать вычисления и вывод на экран в одной функции.

    Область видимости переменных (Scope)

    Переменные, созданные внутри функции, называются локальными. Они существуют только пока функция выполняется, и исчезают после её завершения. Внешний мир о них ничего не знает.

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

    Представьте, что глобальные переменные — это общественная доска объявлений на улице, а локальные переменные — это записки у вас дома на холодильнике. Прохожие видят доску, но не видят ваш холодильник.

    Принцип DRY: Don't Repeat Yourself

    DRY (Не повторяйся) — это фундаментальный принцип разработки программного обеспечения. Он гласит: каждая часть знания должна иметь единственное, непротиворечивое и авторитетное представление в системе.

    Если вы видите, что копируете и вставляете один и тот же кусок кода второй или третий раз — остановитесь. Это сигнал, что этот код нужно вынести в функцию.

    Почему дублирование кода — это плохо?

  • Сложность поддержки: Если нужно исправить ошибку, придется править её во всех копиях.
  • Читаемость: Код становится длинным и засоренным одинаковыми блоками.
  • Размер файла: Программа занимает больше места.
  • Пример нарушения DRY:

    Пример соблюдения DRY:

    Модули: организация файлов

    Когда функций становится слишком много, хранить их в одном файле main.py становится неудобно. Python позволяет разбивать программу на несколько файлов — модулей.

    Модуль — это просто файл с расширением .py, который содержит функции, переменные и классы.

    Импорт модулей

    Представьте, что вы создали файл math_utils.py и написали там функцию calculate_perimeter. Чтобы использовать её в главном файле main.py, нужно «импортировать» этот файл.

    Стандартная библиотека Python

    Python поставляется с огромным набором готовых модулей. Это называется «батарейки в комплекте» (Batteries Included). Вам не нужно писать функции для вычисления синусов, генерации случайных чисел или работы с датой — всё это уже есть.

    Примеры полезных встроенных модулей:

    * math — математические функции. * random — генерация случайных чисел. * time — работа со временем. * os — работа с операционной системой (файлы, папки).

    Пример использования модуля random:

    Также можно импортировать конкретную функцию из модуля, чтобы не писать каждый раз название модуля:

    Математически операция взятия корня записывается так:

    Где — результат (корень), — подкоренное выражение, а символ обозначает операцию извлечения квадратного корня.

    Именованные аргументы и значения по умолчанию

    Python позволяет делать функции еще удобнее, задавая значения по умолчанию для параметров.

    Это делает код очень читаемым. Сравните func(10, 20, True) и func(width=10, height=20, visible=True). Во втором случае сразу понятно, что означают числа.

    Заключение

    Сегодня вы перешли на новый уровень программирования. Вы узнали, что:

  • Функции позволяют упаковывать логику в переиспользуемые блоки.
  • return возвращает данные из функции, а не просто печатает их.
  • DRY — главный принцип борьбы с дублированием кода.
  • Модули помогают разложить код по «полочкам» (файлам) и использовать готовые решения из стандартной библиотеки.
  • В следующей статье мы коснемся темы объектно-ориентированного программирования (ООП) — парадигмы, на которой построен весь современный Python. Но перед этим обязательно закрепите знания, выполнив домашнее задание!

    5. Основы объектно-ориентированного программирования и работа с файловой системой

    Основы объектно-ориентированного программирования и работа с файловой системой

    В предыдущих статьях мы прошли путь от простых переменных до функций и модулей. Вы уже умеете писать программы, которые обрабатывают данные, принимают решения и не дублируют код благодаря принципу DRY. Однако, когда программы становятся по-настоящему большими, одних функций становится недостаточно. Данные и функции, которые их обрабатывают, часто живут «отдельно» друг от друга, что может привести к путанице.

    Сегодня мы познакомимся с Объектно-Ориентированным Программированием (ООП). Это подход, который позволяет объединить данные и поведение в единое целое. А во второй части статьи мы научимся сохранять результаты работы наших программ в файлы, чтобы данные не исчезали после выключения компьютера.

    Что такое ООП?

    Представьте, что вы инженер на заводе по производству автомобилей. У вас есть чертеж новой модели. Чертеж один, но по нему можно собрать тысячи машин. Каждая машина будет иметь общую структуру (колеса, двигатель), но может отличаться цветом, номером кузова или комплектацией.

    В программировании:

    * Класс (Class) — это тот самый чертеж или шаблон. Он описывает, какими свойствами и навыками будет обладать объект. * Объект (Object) или Экземпляр (Instance) — это конкретная машина, созданная по чертежу.

    !Класс — это инструкция по созданию, а объекты — это конкретные воплощения этой инструкции.

    Зачем это нужно?

    ООП позволяет моделировать реальный мир. Если вы пишете игру, у вас может быть класс Character (Персонаж). У каждого персонажа есть:

  • Атрибуты (Свойства): имя, здоровье, уровень, сила.
  • Методы (Поведение): бежать, атаковать, лечиться.
  • Создание первого класса в Python

    Для создания класса используется ключевое слово class. По принятому в Python стилю (PEP 8), названия классов пишутся с ЗаглавнойБуквы (CamelCase).

    Мы создали пустой класс Cat. Теперь давайте добавим ему «жизни».

    Метод __init__ и параметр self

    Чтобы при создании объекта сразу задать ему имя и цвет, используется специальный метод __init__. Его часто называют конструктором.

    Давайте разберем этот код, так как здесь много нового:

  • __init__ — это магический метод (начинается и заканчивается двумя подчеркиваниями). Python запускает его автоматически в момент создания нового объекта.
  • self — это ссылка на текущий объект. Когда вы создаете трех разных котов, self позволяет понять, какому именно коту присвоить имя «Барсик», а какому — «Мурзик».
  • Создание объектов

    Теперь у нас есть чертеж. Давайте создадим конкретных котов.

    Обратите внимание: когда мы вызываем my_cat.meow(), нам не нужно передавать аргумент self. Python делает это за нас неявно, подставляя туда объект my_cat.

    Три кита ООП

    Объектно-ориентированное программирование держится на трех основных принципах. Сегодня мы кратко коснемся двух из них, чтобы не перегружать вас теорией.

    1. Инкапсуляция

    Это принцип «скрытия» внутренней работы. Водителю автомобиля не нужно знать, как именно происходит впрыск топлива в двигатель, ему достаточно руля и педалей. В коде мы скрываем сложные детали внутри методов класса, предоставляя наружу простой интерфейс.

    2. Наследование

    Представьте, что вы создаете игру. У вас есть Warrior (Воин) и Mage (Маг). У них много общего: имя, здоровье, координаты. Чтобы не писать один и тот же код дважды, мы можем создать общий класс Character, а затем «наследовать» от него.

    Работа с файловой системой

    Все переменные и объекты, которые мы создаем в программе, живут в оперативной памяти. Как только вы закроете программу или выключите компьютер, они исчезнут. Чтобы сохранить данные (сделать их персистентными), нам нужно записать их в файл.

    Чтение и запись файлов

    В Python для работы с файлами используется встроенная функция open(). У неё есть несколько режимов работы:

    * 'r' (read) — только чтение (по умолчанию). * 'w' (write) — запись. Внимание: если файл существовал, он будет полностью стерт и перезаписан! * 'a' (append) — дозапись. Данные добавятся в конец файла.

    Контекстный менеджер with

    Раньше программисты писали так:

    Если забыть close(), файл может остаться заблокированным или данные не сохранятся. Чтобы избежать ошибок, в современном Python используют конструкцию with. Она автоматически закрывает файл, даже если в процессе записи произошла ошибка.

    > «Явное лучше, чем неявное». Всегда указывайте кодировку encoding="utf-8" при работе с текстом, чтобы избежать проблем с отображением кириллицы на разных операционных системах.

    Сохранение сложных данных (JSON)

    Метод .write() умеет записывать только строки. А что, если мы хотим сохранить список, словарь или настройки нашего объекта? Для этого идеально подходит формат JSON (JavaScript Object Notation), который мы уже упоминали в курсе. Python имеет встроенный модуль json.

    Связываем ООП и файлы

    Теперь мы можем объединить знания. Представьте класс Game, который умеет сохранять прогресс игрока.

    Заключение

    Сегодня вы сделали огромный шаг вперед. Вы перешли от процедурного программирования к объектно-ориентированному — парадигме, на которой построен весь современный Python. Вы узнали, что такое классы и объекты, как использовать __init__ и self, а также научились сохранять результаты своего труда на жесткий диск.

    В следующих статьях мы углубимся в возможности Python и рассмотрим работу с внешними библиотеками, которые позволят создавать веб-сайты и ботов.