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

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

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

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

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

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

Почему именно Python?

Python (читается как «Пайтон», хотя часто говорят «Питон») был создан Гвидо ван Россумом в начале 90-х годов. Его главная философия — читаемость кода и простота синтаксиса. Программа на Python часто выглядит как обычный текст на английском языке.

!Схема сфер применения языка Python

Сегодня Python используется везде: * Веб-разработка (создание сайтов и серверных приложений). * Data Science (анализ данных и машинное обучение). * Автоматизация (скрипты для рутинных задач). * Разработка игр (прототипирование и логика).

Установка окружения

Прежде чем писать код, нам нужно установить интерпретатор. Компьютер не понимает Python напрямую, он понимает только машинный код (нули и единицы). Интерпретатор — это программа-переводчик, которая читает ваш код на Python и на лету переводит его в команды для процессора.

Шаг 1: Скачивание Python

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

    Шаг 2: Выбор редактора кода (IDE)

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

    * VS Code — легкий, популярный и бесплатный редактор от Microsoft. * PyCharm Community Edition — мощная среда разработки специально для Python. * IDLE — идет в комплекте с Python, подходит для самых первых шагов.

    Первая программа

    Давайте проверим, что все работает. Откройте IDLE или ваш редактор, создайте файл hello.py и напишите следующую строку:

    Запустите программу. Если вы увидели на экране текст Hello, World!, поздравляю — ваше окружение настроено!

    Функция print() — это команда вывода данных на экран (в консоль). Мы будем использовать её постоянно для проверки результатов работы наших программ.

    Переменные: хранение информации

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

    В программировании переменная — это и есть такой стикер, который ссылается на определенное место в памяти компьютера, где лежат данные.

    !Метафора переменной как коробки с данными

    Создание переменной

    В Python создание переменной происходит в момент присваивания ей значения. Для этого используется знак равенства =. В математике этот знак означает равенство, но в программировании это оператор присваивания.

    Рассмотрим пример:

    Где — это имя переменной, а — значение, которое мы в неё сохраняем.

    Теперь, когда мы обратимся к , компьютер выдаст нам число 10.

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

    Чтобы ваш код был понятен и вам, и компьютеру, нужно соблюдать правила:

  • Имя переменной может содержать буквы (a-z, A-Z), цифры (0-9) и знак подчеркивания (_).
  • Имя не может начинаться с цифры.
  • Нельзя использовать пробелы.
  • Python чувствителен к регистру: score, Score и SCORE — это три разные переменные.
  • В Python принято использовать стиль snake_case (змеиный регистр): все буквы строчные, а слова разделяются подчеркиванием.

    Правильно:* my_variable, user_age, total_count Неправильно:* MyVariable, user age, 2nd_player

    Базовые типы данных

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

    Рассмотрим четыре основных типа данных, с которыми вы будете работать 90% времени.

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

    Тип int (от англ. integer) используется для хранения целых чисел: положительных, отрицательных и нуля.

    С целыми числами можно производить арифметические операции. Например, рассчитаем периметр квадрата:

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

    В коде это выглядит так:

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

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

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

    3. Строки (str)

    Тип str (от англ. string) — это текст. Строки всегда должны быть заключены в кавычки. Можно использовать как одинарные ', так и двойные " кавычки, главное — чтобы открывающая и закрывающая кавычки были одинаковыми.

    Если вы попробуете сложить две строки, Python «склеит» их вместе. Это называется конкатенация.

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

    Тип bool (от англ. boolean) самый простой, но очень важный для логики программ. Он имеет всего два возможных значения:

    * True (Истина) * False (Ложь)

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

    Как узнать тип данных?

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

    Преобразование типов

    Часто возникает необходимость превратить один тип данных в другой. Например, пользователь ввел число, но программа считала его как строку текста.

    * int() — преобразует в целое число. * float() — преобразует в дробное число. * str() — преобразует в строку.

    Пример:

    Если бы мы не сделали преобразование int(str_number), Python выдал бы ошибку, так как нельзя складывать текст и число математически.

    Заключение

    Сегодня мы сделали первый и самый важный шаг. Мы установили Python, научились создавать переменные и разобрались, чем число 10 отличается от строки "10".

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

    Попробуйте выполнить задания ниже, чтобы закрепить материал. Удачи в коде!

    2. Управление потоком выполнения: условные операторы и циклы

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

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

    Однако в реальной жизни мы постоянно принимаем решения. «Если пойдет дождь, я возьму зонт, иначе пойду в футболке». «Пока не выучу урок, гулять не пойду».

    Чтобы научить программу такой гибкости, нам нужны инструменты управления потоком выполнения: условные операторы и циклы. Именно они превращают простой калькулятор в настоящий искусственный интеллект.

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

    Главный инструмент принятия решений в Python — это конструкция if (если). Она позволяет выполнить определенный блок кода только тогда, когда выполняется некоторое условие.

    !Схема работы условного оператора: программа выбирает путь в зависимости от истинности условия

    Синтаксис и отступы

    В Python структура кода определяется отступами (обычно это 4 пробела). Это уникальная особенность языка. В других языках (C++, Java) используются фигурные скобки {}, а в Python — пробелы. Это заставляет писать код аккуратно.

    Рассмотрим пример проверки возраста:

    Обратите внимание: строки с print внутри блока if сдвинуты вправо. Они выполнятся только если age >= 18. Последняя строка print("Проверка завершена") не имеет отступа, поэтому она выполнится в любом случае.

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

    Чтобы задать условие, нам нужны операторы сравнения. Результатом их работы всегда является логический тип bool (True или False).

    * > — больше * < — меньше * >= — больше или равно * <= — меньше или равно * == — равно (обратите внимание: два знака равенства!) * != — не равно

    > Важно: Один знак = — это присваивание значения переменной. Два знака == — это проверка на равенство.

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

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

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

    Если вариантов больше двух, мы используем elif (сокращение от else if — иначе если).

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

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

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

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

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

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

    В Python есть два основных типа циклов: while и for.

    Цикл while (Пока)

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

    Этот код выведет надпись 5 раз. Очень важно внутри цикла изменять переменную, которая участвует в условии (в данном случае count). Если этого не сделать, условие всегда будет истинным, и программа зависнет в бесконечном цикле.

    Цикл for (Для)

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

    !Иллюстрация итерации: последовательная обработка элементов набора данных

    #### Функция range()

    Для повторения действия определенное количество раз часто используют функцию range().

    Результат:

    Обратите внимание: счет начинается с 0, а последнее число (5) не включается.

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

    * start — начало (по умолчанию 0) * stop — конец (не включается) * step — шаг (по умолчанию 1)

    Пример вывода нечетных чисел от 1 до 10:

    Математический пример: Сумма чисел

    Давайте решим задачу: найти сумму всех чисел от 1 до .

    С точки зрения математики, это сумма арифметической прогрессии, которую можно вычислить по формуле Гаусса:

    Где — искомая сумма, а — последнее число последовательности.

    Однако в программировании мы можем решить эту задачу простым перебором с помощью цикла, что наглядно демонстрирует логику накопления:

    Здесь переменная total_sum играет роль копилки, в которую мы на каждом шаге добавляем значение счетчика i.

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

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

  • break — досрочно прерывает цикл.
  • continue — пропускает текущую итерацию и переходит к следующей.
  • Пример с break (поиск числа):

    Пример с continue (печать только четных чисел):

    Заключение

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

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

    А пока — выполните задания ниже, чтобы закрепить материал!

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

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

    В предыдущих статьях мы научились сохранять данные в переменные. Мы клали число в одну «коробку», а строку — в другую. Но представьте, что вам нужно сохранить список покупок из 50 пунктов или базу данных всех учеников школы. Создавать 50 или 1000 отдельных переменных (вроде item1, item2, student_54) — это неудобно и неэффективно.

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

    Сегодня мы разберем «большую четверку» контейнеров Python:

  • Списки (List) — упорядоченные коллекции.
  • Кортежи (Tuple) — неизменяемые списки.
  • Словари (Dictionary) — хранилища по ключам.
  • Множества (Set) — коллекции уникальных элементов.
  • 1. Списки (List): Универсальный вагончик

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

    В Python списки создаются с помощью квадратных скобок [].

    Индексация: Как достать элемент?

    Чтобы обратиться к элементу списка, мы используем его индекс (порядковый номер).

    > Важно: Нумерация в программировании почти всегда начинается с нуля.

    !Визуализация принципа индексации списка, где первый элемент имеет индекс 0.

    Если вы попытаетесь обратиться к несуществующему индексу (например, my_list[10]), Python выдаст ошибку IndexError.

    Отрицательная индексация

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

    Изменяемость

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

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

    Списки — это объекты, и у них есть встроенные функции (методы) для управления содержимым:

    * append(x) — добавляет элемент x в конец списка. * remove(x) — удаляет первый найденный элемент со значением x. * pop(i) — удаляет элемент по индексу i и возвращает его (если индекс не указан, удаляет последний). * len(list) — возвращает длину списка (количество элементов).

    2. Кортежи (Tuple): Защищенные списки

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

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

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

    Зачем нужны ограничения?

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

    Списки хороши, когда нам важен порядок. Но что, если мы хотим найти телефон друга по его имени? Искать его в списке по индексу 34 неудобно, ведь мы можем не помнить номер индекса.

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

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

    Доступ к данным

    Вместо числового индекса мы используем ключ:

    !Метафора словаря как камеры хранения с именованными ячейками.

    Изменение и добавление

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

    4. Множества (Set): Только уникальное

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

    Множества также используют фигурные скобки {}, но без двоеточий, как в словарях.

    Обратите внимание: дубликаты исчезли автоматически.

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

    Множества в Python поддерживают классические математические операции, знакомые нам из теории множеств. Это невероятно полезно для фильтрации данных.

    Рассмотрим две группы людей:

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

    Кто работает в компании (все уникальные сотрудники из обеих групп)?

    Формула объединения:

    Где и — множества, — знак объединения, — элемент, который принадлежит хотя бы одному из множеств.

    В Python:

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

    Кто является и разработчиком, и менеджером одновременно?

    Формула пересечения:

    Где — знак пересечения, означающий, что элемент должен присутствовать в обоих множествах одновременно.

    В Python:

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

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

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

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

    Заключение

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

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

    Выполните задания ниже, чтобы закрепить понимание структур данных!

    4. Модульность кода: написание функций, работа с модулями и обработка исключений

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

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

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

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

    Функции: принцип DRY

    В программировании есть золотое правило: DRYDon't Repeat Yourself (Не повторяй себя). Если вы пишете один и тот же код дважды, значит, пора создать функцию.

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

    !Функция принимает данные, обрабатывает их и возвращает результат.

    Создание функции

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

    Рассмотрим простой пример. Допустим, мы хотим приветствовать пользователя:

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

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

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

    Здесь name — это переменная, которая существует только внутри функции. Когда мы вызываем greet_user("Алексей"), строка "Алексей" попадает в переменную name.

    Возврат значения (return)

    Чаще всего функции не просто печатают что-то на экран, а вычисляют результат и возвращают его программе, чтобы мы могли использовать его дальше. Для этого используется ключевое слово return.

    Давайте напишем функцию для вычисления площади круга. Вспомним формулу из геометрии:

    Где — площадь круга, — математическая константа (примерно 3.14), а — радиус круга.

    В коде это будет выглядеть так:

    > Важно: После выполнения команды return функция немедленно прекращает работу и выходит. Любой код, написанный после return внутри функции, никогда не выполнится.

    Локальные и глобальные переменные

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

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

    Модули: разделяй и властвуй

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

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

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

    Чтобы использовать модуль, нужно написать ключевое слово import.

    Например, модуль math содержит сложные математические функции, чтобы нам не приходилось писать их самим.

    Импорт конкретных функций

    Если вам не нужен весь модуль (который может быть тяжелым), можно импортировать только конкретную функцию.

    Создание собственных модулей

    Вы можете создавать свои модули. Это очень просто: любой файл с расширением .py — это модуль.

  • Создайте файл my_utils.py.
  • Напишите в нем функцию def say_hello(): ....
  • В другом файле (в той же папке) напишите import my_utils.
  • Используйте функцию: my_utils.say_hello().
  • Это позволяет разбивать огромные программы на маленькие, понятные файлы.

    Обработка исключений: когда что-то пошло не так

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

    Чтобы этого избежать, мы используем конструкцию try...except.

    Блок try-except

    Логика проста: «Попробуй (try) сделать это. Если возникнет ошибка (except), сделай то».

    Рассмотрим классический пример деления на ноль.

    Математически операция деления на ноль не определена:

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

    В Python попытка выполнить такой код вызовет ошибку ZeroDivisionError.

    Как это работает:

  • Python пытается выполнить код внутри try.
  • Если все хорошо, блок except игнорируется.
  • Если возникает ошибка, Python ищет соответствующий except.
  • Если находит — выполняет код внутри except, и программа не падает, а продолжает работать дальше.
  • Блок finally

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

    Заключение

    Сегодня мы превратили наш код из набора инструкций в структурированную систему.

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

    Теперь вы обладаете полным набором инструментов процедурного программирования. В следующих частях курса мы коснемся еще более мощной парадигмы — Объектно-Ориентированного Программирования (ООП), где функции и данные объединяются в единые сущности.

    А пока — закрепите знания, выполнив задания ниже!

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

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

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

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

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

    Представьте, что вы проектируете игру-стратегию. У вас есть сотни юнитов: лучники, рыцари, крестьяне. Если использовать только словари и функции, вам придется создавать сотни словарей unit_1, unit_2 и писать функции вроде move_unit(unit, x, y). Это неудобно.

    В ООП мы мыслим объектами. Каждый юнит — это объект, у которого есть свои характеристики (здоровье, сила) и умения (атаковать, идти).

    Класс и Объект

    В основе ООП лежат два понятия:

  • Класс (Class) — это чертеж, шаблон или форма. Сам по себе он не содержит данных, он лишь описывает, какими они должны быть.
  • Объект (Object) — это конкретный экземпляр, созданный по этому чертежу.
  • !Класс — это инструкция по сборке, а объекты — конкретные воплощения этой инструкции

    Давайте создадим наш первый класс на Python. Для этого используется ключевое слово class.

    Мы создали класс Cat (Кошка). Пока он пустой (оператор pass ничего не делает), но мы уже можем создавать кошек по этому шаблону.

    Атрибуты и метод __init__

    Кошки не бывают абстрактными. У них есть имя, цвет и возраст. В ООП эти характеристики называются атрибутами.

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

    Загадочный self

    Вы наверняка заметили слово self в коде выше. Это ссылка на текущий объект.

    Когда мы пишем self.name = name, мы говорим компьютеру: «Возьми имя, которое нам передали, и сохрани его внутри именно этого конкретного кота».

    Без self переменная name была бы просто временной переменной внутри функции, которая исчезла бы сразу после завершения работы конструктора.

    Методы: поведение объектов

    Атрибуты — это то, что объект знает (данные). Методы — это то, что объект умеет (функции).

    Методы объявляются так же, как обычные функции, но внутри класса, и первым аргументом всегда принимают self.

    Пример с математикой: Класс Точка

    ООП отлично подходит для математических задач. Давайте создадим класс Point (Точка) на плоскости и научим его вычислять расстояние до другой точки.

    Расстояние между двумя точками и вычисляется по теореме Пифагора:

    Где: * — искомое расстояние (distance). * — координаты первой точки. * — координаты второй точки. * — операция извлечения квадратного корня.

    Реализуем это в коде:

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

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

    Открытие файла

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

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

    Чтение из файла

    Предположим, у нас есть файл notes.txt с текстом.

    Метод read() считывает весь файл целиком. Если файл огромный, лучше читать его построчно циклом for:

    > Примечание: Метод strip() убирает лишние пробелы и символы переноса строки в начале и конце текста.

    Менеджер контекста with

    Забыть закрыть файл (file.close()) — очень частая ошибка. Если файл не закрыть, он может остаться заблокированным для других программ или данные не сохранятся.

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

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

    Объединяем знания: Сохранение объектов

    Давайте объединим ООП и файлы. Создадим класс User, который умеет сохранять информацию о себе в файл.

    После запуска этого кода рядом с вашей программой появится файл admin.txt с данными пользователя.

    Заключение

    Сегодня мы совершили качественный скачок в понимании программирования.

  • Мы узнали, что Класс — это чертеж, а Объект — это дом, построенный по чертежу.
  • Мы поняли, что self — это способ объекта обращаться к самому себе.
  • Мы научились сохранять результаты работы программы в файлы, используя безопасный менеджер контекста with.
  • В следующей статье мы углубимся в возможности Python и рассмотрим работу со сторонними библиотеками, которые позволяют делать всё: от создания веб-сайтов до анализа данных.

    А пока — закрепите материал, выполнив задания ниже!