Основы программирования на Python для начинающих

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

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

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

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

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

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

Основные преимущества Python:

* Простой синтаксис: Код на Python читается почти как обычный английский текст. * Универсальность: На нем пишут веб-сайты, искусственный интеллект, скрипты для автоматизации, игры и научные вычисления. * Огромное сообщество: Если у вас возникнет вопрос, скорее всего, кто-то уже задал его на форуме и получил ответ.

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

Шаг 1: Подготовка рабочего места

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

Установка интерпретатора Python

  • Перейдите на официальный сайт Python.org.
  • Скачайте последнюю версию для вашей операционной системы (Windows, macOS или Linux).
  • ВАЖНО: При запуске установщика на Windows обязательно поставьте галочку напротив пункта Add Python to PATH (Добавить Python в переменную среды PATH). Если этого не сделать, запускать программы будет сложнее.
  • Нажмите «Install Now» и дождитесь завершения.
  • Выбор среды разработки (IDE)

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

  • Скачайте редактор с сайта Visual Studio Code.
  • Установите его как обычную программу.
  • Откройте VS Code, перейдите в раздел расширений (квадратик слева) и установите расширение «Python» от Microsoft.
  • Шаг 2: Ваша первая программа

    В программировании есть традиция: первая программа на новом языке должна выводить фразу «Hello, World!». Давайте не будем нарушать традиции.

    Создайте файл с названием hello.py. Расширение .py говорит системе, что внутри находится код на Python. Откройте этот файл и напишите следующую строку:

    Запустите программу (в VS Code это можно сделать, нажав кнопку Play в углу). В терминале вы увидите:

    Разбор полетов

    Что здесь произошло? * print — это функция. Команда компьютеру: «Напечатай то, что в скобках». * "Hello, World!" — это строка (текст). Текст в Python всегда заключается в кавычки (одинарные или двойные).

    Переменные: коробки с данными

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

    !Переменная как контейнер для хранения данных с уникальным именем

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

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

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

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

    Нельзя называть переменные как попало. Есть правила:

  • Имя может содержать буквы, цифры и знак подчеркивания _.
  • Имя не может начинаться с цифры.
  • Нельзя использовать пробелы (используйте snake_case: my_variable_name).
  • Python чувствителен к регистру: Age и age — это разные переменные.
  • > «Код читается намного чаще, чем пишется». > — Гвидо ван Россум, создатель Python. The Zen of Python

    Это значит, что имя переменной должно быть понятным. x = 10 — плохо (если это не математика). user_age = 10 — хорошо.

    Типы данных

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

    Рассмотрим основные (примитивные) типы данных:

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

    Это числа без дробной части: 1, 100, -50, 0.

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

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

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

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

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

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

    Как узнать тип переменной?

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

    Базовые операции

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

    Арифметика

    Python отлично справляется с ролью калькулятора.

    | Операция | Символ | Пример | Результат | | :--- | :---: | :--- | :--- | | Сложение | + | 5 + 3 | 8 | | Вычитание | - | 10 - 2 | 8 | | Умножение | | 4 2 | 8 | | Деление | / | 16 / 2 | 8.0 (всегда float) | | Целочисленное деление | // | 17 // 2 | 8 (дробная часть отбрасывается) | | Остаток от деления | % | 17 % 2 | 1 | | Возведение в степень | | 2 3 | 8 |

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

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

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

    Операции со строками

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

    Важно: Нельзя складывать число и строку напрямую. Python выдаст ошибку TypeError. Сначала нужно превратить число в строку.

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

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

    Особенность input(): Эта функция всегда возвращает строку (str). Даже если пользователь введет цифры 100, для программы это будет текст "100".

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

    Или короче:

    Заключение

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

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

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

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

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

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

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

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

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

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

    Python отличается от многих других языков (C++, Java, JavaScript) тем, что отступы в нем — это не просто красота, а часть синтаксиса. Блок кода, который должен выполниться при истинности условия, должен быть сдвинут вправо (обычно на 4 пробела или 1 табуляцию).

    !Блок-схема работы условного оператора if

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

    Обратите внимание на двоеточие : после условия. Оно обязательно. Всё, что написано с отступом после двоеточия, относится к блоку if.

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

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

    | Оператор | Значение | Пример | | :---: | :--- | :--- | | == | Равно (не путать с =) | x == 5 | | != | Не равно | x != 5 | | > | Больше | x > 5 | | < | Меньше | x < 5 | | >= | Больше или равно | x >= 5 | | <= | Меньше или равно | x <= 5 |

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

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

    Множественный выбор: elif

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

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

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

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

    * and — И (оба условия должны быть верны) * or — ИЛИ (хотя бы одно условие должно быть верно) * not — НЕ (инверсия, меняет True на False и наоборот)

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

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

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

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

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

    Цикл while (Пока)

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

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

    Цикл for (Для)

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

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

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

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

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

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

    Пример с шагом:

    !Визуализация работы range(1, 10, 2)

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

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

    break (Прервать)

    Команда break немедленно останавливает цикл полностью.

    Пример: ищем число 7 и останавливаемся, когда нашли.

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

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

    Пример: пропускаем число 3.

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

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

    Здесь внешний цикл отвечает за первое число, а внутренний пробегает от 1 до 5 для каждого значения внешнего цикла.

    > «Простота — залог надежности». > — Эдсгер Дейкстра, ученый в области информатики. E.W. Dijkstra Archive

    Старайтесь не делать вложенность слишком глубокой (более 3 уровней), иначе код станет очень сложно читать.

    Заключение

    Теперь ваша программа — это не просто линейный сценарий, а сложный алгоритм, способный реагировать на данные и выполнять рутинную работу за вас. Мы разобрали:

  • Условные операторы if, elif, else.
  • Циклы while и for.
  • Операторы управления break и continue.
  • В следующей статье мы научимся структурировать код еще лучше и избегать повторений с помощью функций.

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

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

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

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

    Списки (Lists): Универсальные коробки

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

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

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

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

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

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

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

    Срезы (Slicing)

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

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

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

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

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

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

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

    Если вы попытаетесь изменить элемент, Python выдаст ошибку:

    Зачем нужны кортежи?

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

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

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

    !Метафора словаря: доступ к содержимому осуществляется по уникальной метке-ключу.

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

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

    Методы словарей

    Словари имеют полезные методы для перебора данных:

    * .keys() — возвращает список всех ключей. * .values() — возвращает список всех значений. * .items() — возвращает пары (ключ, значение).

    Множества (Sets): Уникальность превыше всего

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

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

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

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

    Допустим, у нас есть два множества чисел и . Операция пересечения множеств записывается формулой:

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

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

    Другая операция — объединение:

    где — множество, содержащее все элементы из и все элементы из (без дубликатов); символ обозначает объединение.

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

    Чтобы не запутаться, задайте себе вопросы:

  • Нужен ли порядок?
  • * Да Список или Кортеж. * Нет Множество или Словарь.

  • Будут ли данные меняться?
  • * Да Список. * Нет Кортеж.

  • Нужны ли уникальные ключи для доступа?
  • * Да Словарь.

  • Нужно ли убрать дубликаты?
  • * Да Множество.

    | Тип | Синтаксис | Упорядоченность | Изменяемость | Дубликаты | | :--- | :---: | :---: | :---: | :---: | | Список | [] | Да | Да | Да | | Кортеж | () | Да | Нет | Да | | Словарь | {k:v} | Нет (формально) | Да | Ключи — нет | | Множество | {} | Нет | Да | Нет |

    Заключение

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

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

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

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

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

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

    Функции: Ваши личные мини-программы

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

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

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

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

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

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

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

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

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

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

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

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

    Рассмотрим математический пример. Допустим, нам нужно вычислить значение линейной функции:

    Где — результат функции, — аргумент (переменная), и — коэффициенты.

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

    Если бы мы использовали print внутри функции вместо return, переменная answer получила бы значение None (пустота), и дальнейшие вычисления были бы невозможны.

    > «Функция должна делать что-то одно и делать это хорошо». > — Роберт Мартин, автор книг по разработке ПО. Clean Code concepts

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

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

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

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

    Это сделано для безопасности: чтобы одна функция случайно не испортила данные другой функции.

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

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

    Представьте, что вы создали файл math_utils.py и написали там функцию:

    Теперь в основном файле main.py вы можете подключить этот модуль:

    Способы импорта

  • Импорт всего модуля: import module_name. Обращение через точку: module_name.function(). Это самый безопасный способ.
  • Импорт конкретной функции: from module_name import function_name. Можно вызывать функцию сразу по имени: function_name(). Удобно, но есть риск конфликта имен.
  • Импорт с псевдонимом: import module_name as mn. Используется, если название модуля слишком длинное.
  • Стандартная библиотека Python

    Python часто называют языком с «батарейками в комплекте» (batteries included). Это значит, что вместе с языком устанавливается огромный набор готовых модулей для решения самых разных задач: от математики до работы с интернетом.

    Рассмотрим три самых популярных модуля.

    1. Модуль math

    Этот модуль содержит расширенные математические функции. Например, если вам нужно вычислить гипотенузу прямоугольного треугольника по теореме Пифагора:

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

    Также в модуле есть константы, например, число Пи:

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

    2. Модуль random

    Программы часто требуют элемента случайности: игры, симуляции, генерация паролей.

    3. Модуль datetime

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

    Заключение

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

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

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

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

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

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

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

    Представьте, что вы собираете робота. У робота есть характеристики (цвет, вес, заряд батареи) и умения (ходить, говорить, заряжаться).

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

    Классы и Объекты: Чертеж и Дом

    Чтобы понять ООП, нужно усвоить разницу между классом и объектом.

    * Класс — это чертеж, шаблон или инструкция. Сам по себе он не является вещью. * Объект (или экземпляр класса) — это конкретная вещь, созданная по этому чертежу.

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

    Например, «Кошка» — это класс (абстрактное понятие). А ваш кот Барсик, спящий на диване, — это объект (конкретный представитель).

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

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

    Давайте разберем этот код по косточкам.

    1. Магический метод __init__

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

    2. Загадочное слово self

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

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

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

    Теперь, когда у нас есть чертеж (class Cat), давайте создадим котов.

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

    Принципы ООП: Наследование

    ООП стоит на трех китах: Инкапсуляция, Наследование и Полиморфизм. Сегодня мы подробно разберем самый понятный и полезный для новичков принцип — Наследование.

    Представьте, что нам нужно создать классы для Car (Машина) и Bicycle (Велосипед). У них много общего: есть колеса, есть скорость, они могут ехать. Чтобы не писать один и тот же код дважды, мы можем создать общий родительский класс Vehicle (Транспорт), а машина и велосипед унаследуют его свойства.

    Наследование позволяет создавать сложные иерархии и повторно использовать код, следуя принципу DRY (Don't Repeat Yourself).

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

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

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

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

    Реализация в коде:

    Работа с файлами: Сохраняем историю

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

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

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

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

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

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

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

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

    Конструкция with автоматически закрывает файл, даже если внутри блока произошла ошибка. Это профессиональный стандарт.

    Запись в файл

    Давайте запишем список покупок в файл.

    После выполнения этого кода рядом с вашей программой появится файл shopping_list.txt. Если вы запустите код снова с другими продуктами, старый список исчезнет (так работает режим 'w'). Если хотите добавить продукты к старым, используйте режим 'a'.

    Объединяем ООП и файлы

    Давайте создадим класс Diary (Дневник), который умеет сохранять записи в файл.

    В этом примере мы создали объект, который управляет файлом. Нам не нужно каждый раз писать open и close в основной программе — вся логика работы с файлом спрятана (инкапсулирована) внутри класса Diary.

    Заключение

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

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