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

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

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

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

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

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

Что такое Python и почему он так популярен?

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

!Python используется во многих сферах: от создания сайтов до запуска космических ракет.

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

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

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

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

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

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

    Для начала мы рекомендуем: * IDLE: Устанавливается автоматически вместе с Python. Самый простой вариант для старта. * VS Code: Мощный и популярный редактор от Microsoft (рекомендуется для дальнейшего обучения).

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

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

    Откройте IDLE или другой редактор, создайте новый файл и напишите следующую строку:

    Нажмите кнопку запуска (Run). Если вы увидели в консоли текст Hello, World!, поздравляем! Вы написали свою первую программу.

    Разберем, что здесь произошло: * print — это функция. Команда компьютеру «напечатать» или «вывести» что-то. Скобки () — обязательный элемент вызова функции. Внутри них мы передаем то, что* хотим напечатать. * Кавычки " " — показывают, что внутри находится текст (строка), а не команда.

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

    Программы работают с данными: числами, текстом, списками. Чтобы не потерять эти данные, их нужно где-то хранить. Для этого используются переменные.

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

    !Переменная — это именованная область памяти для хранения данных.

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

    В Python создание переменной происходит с помощью оператора присваивания =.

    Здесь мы создали две «коробки»:

  • Коробку с именем name, в которую положили текст "Alice".
  • Коробку с именем age, в которую положили число 25.
  • Математически операцию присваивания можно записать так:

    Где — это имя переменной (идентификатор), — оператор присваивания (команда «положить значение справа в переменную слева»), а — само значение.

    Важно: Знак = в программировании — это не равенство, как в математике. Это команда «присвоить». Сравнение на равенство записывается как == (два знака равно).

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

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

    * Имя может состоять из букв (a-z, A-Z), цифр (0-9) и знака подчеркивания _. * Имя не может начинаться с цифры (1name — ошибка, name1 — верно). * Нельзя использовать пробелы. Вместо них используют подчеркивание: my_favorite_color. * Python чувствителен к регистру: Age, age и AGE — это три разные переменные.

    > Хорошим тоном считается называть переменные понятно. Вместо x = 3600 лучше написать seconds_in_hour = 3600.

    Типы данных

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

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

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

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

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

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

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

    Это любой текст, заключенный в кавычки (одинарные ' или двойные ").

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

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

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

    В Python есть встроенная функция type(), которая подскажет, что лежит внутри переменной.

    Простые операции с данными

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

    Арифметика

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

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

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

    Строки тоже можно «складывать». Это называется конкатенация.

    Обратите внимание: мы добавили пробел " " между именем и фамилией, иначе они бы склеились в ИванИванов.

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

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

    Важно: Функция input() всегда возвращает строку (str). Даже если пользователь введет число 50, для программы это будет текст "50". Если вы хотите использовать введенное значение как число (например, для сложения), его нужно превратить в число с помощью функций int() или float().

    Пример калькулятора возраста:

    Заключение

    Сегодня вы сделали огромный шаг — начали изучать Python. Мы разобрали:

  • Как установить Python и настроить окружение.
  • Как выводить текст на экран с помощью print().
  • Что такое переменные и как правильно давать им имена.
  • Какие бывают типы данных (int, float, str, bool).
  • Как получать данные от пользователя через input().
  • В следующей статье мы научим программу «думать» и принимать решения, изучив условные операторы.

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

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

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

    Сегодня мы добавим «стрелки» и «развилки» на этот путь. Мы научим программу принимать решения в зависимости от условий и повторять действия, чтобы не писать один и тот же код сотни раз. Это называется управлением потоком выполнения (Control Flow).

    Условные операторы: учим программу думать

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

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

    Оператор if (Если)

    Самая простая проверка выглядит так:

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

  • Двоеточие : в конце строки с условием. Оно обязательно.
  • Отступ (обычно 4 пробела) перед print. В Python отступы определяют блоки кода. Все, что сдвинуто вправо, относится к условию if.
  • Операторы сравнения

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

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

    В Python используются следующие операторы: * == — равно (не путайте с =, который присваивает значение!) * != — не равно * > — больше * < — меньше * >= — больше или равно * <= — меньше или равно

    Конструкция if-else (Если-Иначе)

    Что делать, если условие не выполнилось? Для этого есть блок else.

    Блок else выполняется только тогда, когда условие в if оказалось ложным (False).

    Конструкция elif (Иначе-Если)

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

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

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

    Часто нужно проверить сразу несколько условий. Например: «Если сегодня суббота И хорошая погода, я пойду в парк».

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

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

    Формально это можно записать так:

    Где — результат проверки (True/False), — первое условие (возраст 18), — второе условие (наличие билета), а — логическое «И» (конъюнкция).

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

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

    Цикл while (Пока)

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

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

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

    Цикл for (Для)

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

    !Визуализация итерации цикла for по элементам последовательности.

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

    Этот код напечатает каждую букву слова «Python» с новой строки. Переменная letter на каждом шаге цикла автоматически принимает значение следующего символа.

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

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

    Результат:

    Важно: range(3) создает последовательность чисел от 0 до 2. Верхняя граница (3) не включается.

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

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

    Математически множество значений, генерируемых range(a, b), можно описать так:

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

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

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

    break (Прервать)

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

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

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

    Результат: 0, 1, 3, 4 (число 2 не напечаталось).

    Заключение

    Теперь ваши программы стали намного умнее. Они умеют:

  • Проверять условия с помощью if, elif, else.
  • Комбинировать условия через and, or, not.
  • Повторять действия с помощью циклов while и for.
  • Управлять ходом цикла через break и continue.
  • В следующей статье мы разберем структуры данных: списки и словари, чтобы хранить большие объемы информации удобно и эффективно.

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

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

    Приветствуем вас в третьей части курса «Основы программирования на языке Python»! В предыдущих статьях мы научились хранить одиночные данные в переменных (числа, строки) и управлять потоком выполнения программы с помощью циклов и условий.

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

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

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

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

    !Список в Python похож на поезд с пронумерованными вагонами, где хранятся разные данные.

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

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

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

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

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

    Изменение списка

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

    Срезы (Slicing)

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

    Кортежи (Tuples): Неизменяемые списки

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

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

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

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

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

    Если списки используют числовые индексы (0, 1, 2...), то словари используют ключи. Это похоже на реальный бумажный словарь: чтобы найти перевод слова (значение), вы ищете само слово (ключ).

    !Словарь хранит данные в парах Ключ-Значение, как картотека с подписанными ящиками.

    Создание словаря

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

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

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

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

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

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

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

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

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

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

    Кто придет на вечеринку, если мы позовем всех из обоих списков?

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

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

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

    Кто знаком и с Васей, и с Петей (общие друзья)?

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

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

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

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

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

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

    Итерация по структурам

    Все эти структуры отлично работают с циклом for, который мы изучили в прошлой статье.

    Заключение

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

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

    4. Функциональное программирование: создание функций, аргументы и работа с модулями

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

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

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

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

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

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

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

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

    Мы уже пользовались встроенными функциями Python: * print() — выводит текст на экран. * len() — считает длину списка или строки. * input() — считывает данные с клавиатуры.

    Теперь пришло время создавать свои собственные.

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

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

    Синтаксис

    Разберем анатомию этого кода:

  • def — команда интерпретатору: «Я создаю функцию».
  • say_hello — имя функции. Правила именования такие же, как у переменных: используйте маленькие буквы и подчеркивания (snake_case). Имя должно быть глаголом или действием.
  • () — скобки. В них указываются параметры (об этом ниже), но даже если их нет, скобки обязательны.
  • : — двоеточие означает начало тела функции.
  • Отступ — весь код, который сдвинут вправо (обычно на 4 пробела), находится внутри функции.
  • Вызов функции

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

    Аргументы функции: передача данных

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

    Взглянем на математическую запись функции:

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

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

    Здесь number — это переменная-параметр. Когда мы вызываем print_square(5), число 5 попадает в переменную number внутри функции.

    Несколько аргументов

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

    Именованные аргументы

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

    Значения по умолчанию

    Иногда мы хотим, чтобы аргумент был необязательным. Для этого ему можно задать значение по умолчанию.

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

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

    Для этого используется ключевое слово return.

    В чем разница между print и return? * print — это как крикнуть ответ в толпу. Все услышали, но записать и использовать это число в формуле программа не может. * return — это как передать записку с ответом лично в руки. Программа получает значение и может сохранить его в переменную.

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

    Где — площадь, — длина, — ширина, а — операция умножения.

    Важно: Как только выполняется команда return, функция немедленно завершает работу. Любой код, написанный после return внутри функции, никогда не выполнится.

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

    Это одна из самых частых ошибок новичков. Переменные, созданные внутри функции, являются локальными. Они существуют только пока функция работает, и исчезают после её завершения. Снаружи функции их «не видно».

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

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

    Модули: не изобретайте велосипед

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

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

    Модуль math

    Содержит математические функции.

    Формула вычисления корня:

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

    Модуль random

    Позволяет генерировать случайные числа. Очень полезен для игр и симуляций.

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

    Очень просто. Любой файл с расширением .py — это модуль.

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

    Заключение

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

  • Избегать повторения кода.
  • Делать код читаемым и понятным.
  • Разбивать сложные задачи на простые подзадачи.
  • Сегодня мы разобрали: * Как создавать функции с помощью def. * Как передавать данные через аргументы. * Как возвращать результат через return. * Что такое локальные переменные. * Как использовать готовые модули math и random.

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

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

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

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

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

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

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

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

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

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

    У функции open() есть два главных аргумента:

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

    Правильный способ: менеджер контекста with

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

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

    #### Запись в файл

    Обратите внимание на encoding='utf-8'. Это стандарт кодировки, который позволяет корректно отображать кириллицу и эмодзи.

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

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

    Введение в ООП: Классы и Объекты

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

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

    Аналогия с чертежом

    Представьте, что вы инженер на заводе роботов.

  • Класс — это чертеж или инструкция. В нем написано: «Робот должен иметь имя, цвет и уметь ходить». Сам чертеж ходить не умеет, это просто бумага.
  • Объект (или экземпляр) — это конкретный робот, собранный по этому чертежу. У него есть конкретное имя (R2-D2), конкретный цвет (синий), и он физически может ходить.
  • !Класс — это схема, а объекты — это реальные экземпляры, созданные по этой схеме.

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

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

    Разберем этот код детально:

  • __init__ — это конструктор. Эта функция запускается автоматически, когда мы создаем нового робота. Она «настраивает» объект.
  • self — это ссылка на самого себя. Когда мы создаем трех роботов, у каждого свое имя. self.name означает «имя именно этого конкретного робота», а не какого-то другого.
  • Создание объектов

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

    Обратите внимание: мы написали код для поведения робота один раз (в классе), а работают два независимых объекта. У каждого свой заряд батареи и свое имя.

    Математика внутри объектов

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

    Пусть расход энергии зависит от пройденного расстояния и коэффициента трения .

    Где: * — потраченная энергия (единицы заряда), * — пройденное расстояние (метры), * — коэффициент сложности ландшафта (константа).

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

    Три кита ООП

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

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

    Это объединение данных и методов в одну капсулу (класс) и защита их от внешнего вмешательства. В примере выше переменная energy находится внутри робота. Мы меняем её не напрямую, а через метод drive(). Это защищает робота от ситуации, когда кто-то случайно присвоит energy = -1000.

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

    Представьте, что нам нужен новый робот — летающий. Он умеет все то же, что и обычный, но еще и летать. Зачем переписывать код заново? Мы можем унаследовать свойства обычного робота.

    Теперь FlyingRobot имеет и метод say_hello() (от родителя), и новый метод fly().

    3. Полиморфизм

    Это способность разных объектов обрабатывать одни и те же команды по-разному. Например, команда move() для колесного робота означает «ехать», а для летающего — «лететь». Но программисту не нужно об этом думать, он просто вызывает move().

    Практический пример: База данных студентов

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

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

    Заключение

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

  • Как работать с файлами через конструкцию with open(...).
  • Что такое Классы (чертежи) и Объекты (реализации).
  • Зачем нужен __init__ и загадочный self.
  • Как объединять данные и поведение в единую структуру.
  • ООП — это обширная тема. Не переживайте, если концепция классов кажется сложной с первого раза. Практика поможет расставить все по местам. В следующей статье мы поговорим о том, как обрабатывать ошибки, чтобы ваши программы не «падали» при малейшем сбое.