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

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

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

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

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

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

Python (читается как «Пайтон», хотя в рунете часто говорят «Питон») — это высокоуровневый язык программирования общего назначения. Он был создан Гвидо ван Россумом в начале 1990-х годов. Название языка отсылает не к рептилии, а к популярному британскому комедийному шоу «Летающий цирк Монти Пайтона».

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

!Сравнение лаконичности кода Python с другими языками программирования

Python используется повсюду:

* Веб-разработка: создание серверной части сайтов (YouTube, Instagram). * Анализ данных и Искусственный интеллект: обучение нейросетей, обработка больших данных. * Автоматизация: написание скриптов для рутинных задач. * Разработка игр: создание логики игровых миров.

Установка Python и подготовка окружения

Прежде чем писать код, нам нужно установить интерпретатор. Компьютер не понимает Python напрямую, ему нужен «переводчик», который превратит ваши команды в машинный код.

Шаг 1: Загрузка

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

    Запустите скачанный файл. Самый важный момент при установке на Windows — поставить галочку напротив пункта Add Python to PATH (Добавить Python в переменную среды PATH) внизу окна установщика. Если этого не сделать, запускать программы будет сложнее.

    Шаг 3: Проверка

    Откройте командную строку (Terminal на macOS/Linux или cmd/PowerShell на Windows) и введите команду:

    Если вы увидите что-то вроде Python 3.10.x, значит, установка прошла успешно.

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

    Традиционно изучение любого языка начинается с программы «Hello, World!». Мы не будем нарушать традиции.

    В комплекте с Python идет простая среда разработки IDLE. Найдите её в своих программах и запустите. Вы увидите окно с мигающим курсором — это интерактивный режим (REPL). Введите следующую команду и нажмите Enter:

    Вы увидите, как программа ответит вам:

    Функция print() — это команда вывода. Она берет то, что вы написали внутри скобок, и показывает это на экране.

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

    Программы были бы бесполезны, если бы не умели запоминать данные. Для этого существуют переменные.

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

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

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

    Здесь мы создали переменную name и положили в нее строку "Alex", а также переменную age с числом 25.

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

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

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

    * Правильно: my_favorite_color, user_count * Неправильно: myFavoriteColor, UserCount

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

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

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

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

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

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

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

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

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

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

    Обратите внимание на переменную number_as_string. Поскольку 100 взято в кавычки, для компьютера это просто текст. Вы не сможете прибавить к нему число 5 математически, пока не превратите его обратно в число.

    Строки можно «складывать» (это называется конкатенация):

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

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

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

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

    Обычно этот тип данных возникает как результат сравнения. Например, если мы спросим компьютер «5 больше 3?», он ответит True.

    Динамическая типизация

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

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

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

    Ввод данных с клавиатуры

    Мы уже умеем выводить данные с помощью print(). А как получить данные от пользователя? Для этого используется функция input().

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

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

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

    Или короче:

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

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

    В Python комментарии начинаются с символа решетки #. Всё, что написано после этого символа в той же строке, игнорируется компьютером.

    Заключение

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

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

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

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

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

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

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

    Логика и принятие решений

    Прежде чем писать код, давайте представим, как компьютер «думает». В основе любого решения лежит вопрос, на который можно ответить только «Да» (True) или «Нет» (False). В прошлом уроке мы познакомились с типом данных bool. Именно он управляет всем потоком программы.

    !Простая блок-схема, показывающая ветвление алгоритма в зависимости от погодных условий.

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

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

    Рассмотрим математическое выражение:

    Где — первое сравниваемое число, — второе число, а символ означает «больше».

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

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

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

    Условный оператор if

    Самая простая конструкция ветвления — это оператор if (если). Он проверяет условие. Если условие истинно (True), то выполняется блок кода внутри него.

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

    Здесь мы сталкиваемся с главной особенностью Python, которая отличает его от большинства других языков (C++, Java, PHP). В Python отступы (пробелы в начале строки) определяют, какой код относится к блоку if, а какой — нет.

    Обратите внимание на двоеточие : после условия. Оно обязательно. Строки после двоеточия сдвинуты вправо (обычно на 4 пробела). Это тело условия.

    Если age будет равно 15, программа пропустит строки с отступом и сразу напечатает «Проверка завершена».

    else: что делать в противном случае?

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

    Оператор else не требует условия, он перехватывает все остальные случаи. Важно: else должен быть на том же уровне отступа, что и if.

    elif: множество вариантов

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

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

    Логические операторы: and, or, not

    Иногда решение зависит сразу от нескольких факторов. Например: «Я куплю телефон, если он стоит меньше 50000 И у него хорошая камера».

    В Python для этого есть слова-связки:

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

    Циклы: повторение действий

    Представьте, что вам нужно вывести на экран фразу «Я люблю Python» 100 раз. Копировать строчку print 100 раз — плохая идея. Программисты следуют принципу DRY (Don't Repeat Yourself — не повторяйся).

    Для многократного выполнения кода используются циклы.

    !Иллюстрация концепции цикла: действие повторяется, пока выполняется определенное условие.

    Цикл while (пока)

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

    Разберем, что происходит:

  • Проверяется условие: , где — текущее значение счетчика.
  • Если верно, выполняется тело цикла (вывод текста и увеличение count).
  • Программа возвращается к шагу 1.
  • Когда count станет равным 6, условие станет ложным, и цикл завершится.
  • > Осторожно: Бесконечный цикл! > Если вы забудете увеличить счетчик (count = count + 1), условие всегда будет истинным. Программа «зависнет», бесконечно печатая текст. Чтобы прервать такую программу, обычно используют сочетание клавиш Ctrl+C.

    Цикл for (для)

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

    #### Перебор строки

    Переменная letter на каждом шаге цикла будет принимать значение следующей буквы: сначала 'A', потом 'l', потом 'e', потом 'x'.

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

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

    Функция range(start, stop, step) может быть очень гибкой:

    * range(5) — числа от 0 до 4 (5 не включается!). * range(2, 6) — числа от 2 до 5. * range(0, 10, 2) — числа от 0 до 10 с шагом 2 (0, 2, 4, 6, 8).

    Математически диапазон range(a, b) можно записать как интервал:

    Где квадратная скобка означает, что число включено в диапазон, а круглая скобка означает, что число исключено.

    Пример подсчета суммы чисел от 1 до 5:

    Здесь мы реализуем формулу суммы:

    Где — итоговая сумма, — переменная счетчика, которая принимает значения от 1 до 5, а символ (сигма) обозначает суммирование.

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

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

    break (сломать)

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

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

    Команда continue прерывает текущую итерацию (круг) и сразу переходит к следующей, пропуская оставшийся код в теле цикла.

    В этом примере % — это оператор взятия остатка от деления. Если остаток от деления на 2 равен 0, мы пропускаем print и берем следующее число.

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

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

    Заключение

    Поздравляю! Теперь вы владеете инструментами управления потоком. Ваш код может анализировать ситуацию с помощью if и автоматизировать рутину с помощью while и for. Это тот самый момент, когда программирование начинает приносить реальную пользу.

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

    А пока — попробуйте написать программу, которая спрашивает у пользователя число и говорит, четное оно или нет. Удачи в экспериментах!

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

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

    В предыдущих статьях мы научились сохранять данные в переменные. Но что делать, если данных много? Представьте, что вы пишете программу для интернет-магазина. Создавать отдельную переменную для каждого товара (tovar1, tovar2, tovar3...) — это тупиковый путь. Это неудобно, громоздко и делает код нечитаемым.

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

    Списки (Lists)

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

    !Метафора списка как поезда с нумерацией элементов, начинающейся с нуля

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

    Списки создаются с помощью квадратных скобок []. Элементы внутри разделяются запятыми.

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

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

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

    Срезы (Slicing)

    Иногда нам нужен не один элемент, а часть списка. Для этого используются срезы. Формат среза: [start:stop]. Важно помнить, что элемент с индексом stop не включается в результат.

    Рассмотрим математическую запись интервала для среза:

    Где — результирующий интервал индексов, — начальный индекс (включительно), а — конечный индекс (исключительно).

    Изменяемость списков

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

    Кортежи (Tuples)

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

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

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

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

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

    Очень удобная фишка Python — возможность присвоить значения из кортежа сразу нескольким переменным.

    Словари (Dictionaries)

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

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

    !Визуализация принципа работы словаря: доступ к данным осуществляется по уникальному ключу

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

    Работа со словарем

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

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

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

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

    Они создаются также с помощью фигурных скобок {}, но без двоеточий, или с помощью функции set().

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

    Математические операции

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

    !Графическое представление операций над множествами

    Пусть у нас есть два множества и .

    1. Объединение (Union): Все элементы, которые есть хотя бы в одном из множеств.

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

    В Python:

    2. Пересечение (Intersection): Только те элементы, которые есть и в , и в .

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

    В Python:

    Итоговая таблица выбора структуры

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

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

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

    Заключение

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

    В сочетании с циклами, которые мы изучили ранее, эти структуры позволяют писать по-настоящему мощные алгоритмы. Например, вы можете пройтись циклом for по списку словарей пользователей и найти всех, кто старше 18 лет.

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

    4. Функции, модули и работа с исключениями

    Функции, модули и работа с исключениями

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

    Вы можете заметить, что копируете одни и те же куски кода из одного места в другое. Это нарушает главный принцип программирования — DRY (Don't Repeat Yourself — Не повторяйся). Если вы найдете ошибку в скопированном куске, вам придется исправлять её во всех местах, где этот код встречается.

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

    Функции: упаковка логики

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

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

    !Метафора функции как механизма переработки данных

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

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

    Этот код только создает функцию, но не выполняет её. Чтобы код сработал, функцию нужно вызвать по имени:

    Аргументы функции

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

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

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

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

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

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

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

    Важно понимать разницу между print и return. print просто показывает картинку на экране, а return передает данные обратно в то место, где была вызвана функция. После срабатывания return выполнение функции немедленно прекращается.

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

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

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

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

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

    Кроме того, Python поставляется с огромным набором готовых модулей. Это называется «Standard Library» (Стандартная библиотека). Философия Python — «Batteries Included» (Батарейки в комплекте).

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

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

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

    Рассмотрим формулу вычисления гипотенузы прямоугольного треугольника (теорема Пифагора), которую мы можем реализовать с помощью модуля math:

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

    Как создать свой модуль?

    Очень просто. Создайте файл my_tools.py и напишите в нем пару функций. Затем создайте рядом файл main.py и напишите import my_tools. Теперь вы можете вызывать функции из первого файла через точку: my_tools.функция().

    !Модули как книги в библиотеке, содержащие готовые решения

    Работа с исключениями: когда что-то пошло не так

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

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

    Конструкция try-except

    Для перехвата ошибок используется блок try (попытаться) и except (исключение).

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

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

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

    Сообщение «Закрываем файл» появится в любом случае.

    Заключение

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

    Ваш код теперь — это не просто набор команд, а структурированная система.

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

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

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

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

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

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

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

    В основе ООП лежат два главных понятия: Класс и Объект.

    Класс — это чертеж

    Представьте, что вы инженер на заводе автомобилей. Прежде чем выпустить машину, вы рисуете чертеж. На чертеже написано: «У машины должно быть 4 колеса, руль, цвет и двигатель». Сам чертеж ездить не может. Это просто инструкция, описание.

    В Python этот чертеж называется Классом.

    Объект — это результат

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

    !Иллюстрация концепции: Класс как чертеж и Объекты как реальные воплощения этого чертежа.

    Создаем свой первый класс

    Давайте создадим класс Cat (Кошка). В Python классы создаются с помощью ключевого слова class. Имена классов принято писать с БольшойБуквы (CamelCase).

    Здесь много нового. Давайте разберем по винтикам.

    1. Метод __init__

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

    2. Загадочный self

    Вы заметили слово self, которое стоит первым аргументом? Это ссылка на самого себя.

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

    Строчка self.name = name переводится как: «Возьми имя, которое передали при создании, и сохрани его внутри этого конкретного объекта».

    Создание объектов

    Теперь «родим» наших котов:

    Наследование: не повторяй себя

    Представьте, что нам нужны еще собаки. Они тоже имеют имя и цвет, но говорят «Гав». Писать новый класс с нуля? Нет. Мы можем использовать наследование.

    Мы создадим общий класс Animal (Животное), а Cat и Dog унаследуют от него общие черты.

    Класс Dog автоматически получил возможность хранить имя, хотя мы не писали в нем __init__. Он взял его у родителя Animal.

    Пример с математикой

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

    Формула площади прямоугольника:

    Где — площадь, — ширина прямоугольника, — высота прямоугольника.

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

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

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

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

    | Режим | Обозначение | Описание | | :--- | :--- | :--- | | Read | 'r' | Только чтение. Ошибка, если файла нет. (По умолчанию) | | Write | 'w' | Запись. Создает новый файл или полностью стирает старый! | | Append | 'a' | Дозапись. Добавляет данные в конец файла, не стирая старые. |

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

    Допустим, у нас есть файл message.txt с текстом.

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

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

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

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

    Символ \n означает перенос строки. Без него весь текст запишется в одну длинную линию.

    Сохранение объектов в файл

    Мы не можем просто взять объект класса Cat и записать его в текстовый файл. Файл понимает только строки. Нам нужно превратить объект в строку (сериализация).

    Самый простой способ — использовать формат JSON, который мы часто видим в веб-разработке. В Python для этого есть модуль json.

    Заключение

    Поздравляю! Вы освоили базу языка Python.

  • Вы знаете синтаксис и типы данных.
  • Вы управляете логикой через циклы и условия.
  • Вы структурируете данные в списки и словари.
  • Вы пишете чистый код с функциями.
  • Теперь вы умеете моделировать реальный мир через ООП и сохранять результаты в файлы.
  • Это фундамент. Дальше вас ждут библиотеки для создания сайтов (Django, Flask), анализа данных (Pandas), игр (Pygame) или телеграм-ботов. Вы уже не просто новичок, вы — программист, готовый решать реальные задачи. Удачи в коде!