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

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

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

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

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

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

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

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

!Схема работы интерпретатора Python: от кода разработчика до результата на экране.

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

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

Шаг 1: Загрузка и установка

  • Перейдите на официальный сайт python.org.
  • Скачайте последнюю версию Python (обычно кнопка загрузки находится на самом видном месте).
  • Важный момент: При запуске установщика обязательно поставьте галочку напротив пункта Add Python to PATH (Добавить Python в PATH). Если этого не сделать, запускать программы будет сложнее.
  • Нажмите Install Now.
  • Шаг 2: Выбор редактора кода

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

    В будущем, когда ваши проекты станут сложнее, мы рекомендуем перейти на Visual Studio Code или PyCharm. Но пока не будем усложнять — найдите в поиске на компьютере IDLE и запустите её.

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

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

    В открывшемся окне IDLE введите следующую команду и нажмите Enter:

    Если вы увидели текст Hello, World! синим цветом на следующей строке — поздравляем! Вы написали свою первую программу.

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

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

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

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

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

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

    Создадим переменную в Python:

    Здесь происходит следующее:

  • Мы создали переменную с именем message.
  • Знак = — это оператор присваивания. Он не означает равенство, как в математике. Он говорит: «Возьми значение справа и положи его в переменную слева».
  • Мы положили строку "Привет, студент!" в переменную message.
  • Функция print(message) заглянула в переменную и напечатала её содержимое.
  • Правила именования переменных

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

    * Имя переменной может содержать буквы, цифры и знак подчеркивания _. * Имя не может начинаться с цифры. * Нельзя использовать пробелы. Вместо них используйте подчеркивание: my_variable (этот стиль называется snake_case). * Избегайте использования ключевых слов Python (например, print, if, for).

    > Хороший код — это код, который легко читать. Называйте переменные так, чтобы было понятно, что в них хранится. Вместо x используйте user_age, вместо atotal_price.

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

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

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

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

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

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

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

    Как мы уже выяснили, это любой текст в кавычках.

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

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

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

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

    Более того, вы можете изменить тип данных в одной и той же переменной:

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

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

    Где: * — результирующее значение (зависимая переменная); * — коэффициент наклона (множитель); * — операция умножения; * — значение аргумента (независимая переменная); * — операция сложения; * — свободный член (смещение).

    В Python это записывается так:

    Основные математические операторы в Python:

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

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

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

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

    Комментарии

    Хороший программист оставляет заметки в коде для себя и коллег. В Python все, что написано после символа решетки #, игнорируется интерпретатором.

    Заключение

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

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

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

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

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

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

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

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

    Условные операторы позволяют программе выбирать, какой код выполнять, в зависимости от ситуации. В Python за это отвечают ключевые слова if (если), elif (иначе если) и else (иначе).

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

    Простой if

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

    Если переменная age больше или равна 18, программа выведет текст. Если меньше — просто промолчит и пойдет дальше.

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

    Часто нам нужно предусмотреть альтернативный вариант. Что делать, если условие не выполнено?

    Здесь сработает только один из блоков print. Если температура больше 20 — первый, во всех остальных случаях — второй.

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

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

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

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

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

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

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

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

    * and — И (оба условия должны быть верны) * or — ИЛИ (хотя бы одно условие должно быть верно) * not — НЕ (инвертирует значение: правда становится ложью, и наоборот)

    Математика в условиях: проверка на четность

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

    Математически это можно записать так:

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

    Если остаток от деления на 2 равен 0, число четное.

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

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

    Цикл while (Пока)

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

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

    Цикл for (Для)

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

    !Метафора цикла for: последовательная обработка каждого элемента в наборе данных.

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

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

    У функции range() есть три варианта использования:

  • range(stop) — от 0 до stop - 1.
  • range(start, stop) — от start до stop - 1.
  • range(start, stop, step) — от start до stop - 1 с шагом step.
  • Пример с шагом:

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

    Так как строка — это последовательность символов, мы можем разобрать её по буквам:

    Этот код напечатает каждую букву слова Python на новой строке.

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

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

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

    Пример с continue (пропуск неприятных значений):

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

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

    Заключение

    Теперь ваши программы обрели логику. Они могут проверять пароли, считать до миллиона, фильтровать данные и принимать решения. Условные операторы if-else и циклы for и while — это скелет любого алгоритма.

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

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

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

    В предыдущих статьях мы научились сохранять данные в переменных. Мы создавали коробки с надписями age или name и клали туда одно значение: число или строку. Но что делать, если нам нужно сохранить список покупок из 20 пунктов? Или оценки всех студентов в группе? Создавать 20 или 100 отдельных переменных (item1, item2, student1...) — это неудобно и неэффективно.

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

    Списки (Lists): универсальный контейнер

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

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

    !Индексация списка похожа на нумерацию вагонов, начиная с нуля.

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

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

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

    * -1 — последний элемент * -2 — предпоследний элемент

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

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

    Математика списков: расчет среднего

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

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

    Где: * — среднее арифметическое (результат); * — количество элементов в списке; * — знак суммы (сигма), означающий сложение всех элементов; * — каждый отдельный элемент списка от первого до последнего.

    В Python это реализуется очень просто благодаря встроенным функциям:

    Кортежи (Tuples): защита от изменений

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

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

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

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

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

    Кортежи идеально подходят для хранения координат точек на плоскости. Допустим, нам нужно найти расстояние между двумя точками. Вспомним теорему Пифагора.

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

    Где: * — искомое расстояние; * — квадратный корень; * — координаты первой точки (храним в первом кортеже); * — координаты второй точки (храним во втором кортеже).

    Словари (Dictionaries): поиск по ключу

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

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

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

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

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

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

    Добавление новых данных или изменение старых происходит так же просто:

    Когда использовать словарь?

    Используйте словарь, когда данные имеют логическую структуру «название — содержимое». Например: * Профиль пользователя (имя, логин, пароль). * Характеристики товара (цена, артикул, цвет). * Перевод слов (слово на английском — слово на русском).

    Вложенность структур

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

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

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

    В прошлой статье мы изучили цикл for. Он идеально работает со структурами данных.

    Перебор списка:

    Перебор словаря (по умолчанию перебираются ключи):

    Заключение

    Сегодня мы вооружились мощными инструментами. Теперь вы знаете:

  • Списки [] — когда данных много и их нужно менять.
  • Кортежи () — когда данные менять нельзя.
  • Словари {} — когда нужен доступ по имени (ключу).
  • Эти структуры — фундамент для работы с базами данных, обработки файлов и создания сложной логики. В следующей статье мы научимся упаковывать наш код в функции, чтобы делать его чистым и переиспользуемым.

    4. Функции и модули: создание переиспользуемого кода и импорт библиотек

    Функции и модули: создание переиспользуемого кода и импорт библиотек

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

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

    Сегодня мы изучим принцип DRY (Don't Repeat Yourself — Не повторяйся). Мы научимся упаковывать код в функции и использовать чужие наработки с помощью модулей.

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

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

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

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

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

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

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

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

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

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

    Теперь мы можем здороваться с разными людьми:

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

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

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

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

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

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

    Рассмотрим пример с математикой. Допустим, нам нужно вычислить площадь треугольника по формуле Герона. Это отличный пример, когда формула сложная, и мы не хотим писать её каждый раз заново.

    Формула Герона выглядит так:

    Где: * — площадь треугольника; * — квадратный корень; * — полупериметр треугольника (половина суммы длин всех сторон); * — длины сторон треугольника.

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

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

    > Запомните правило: если функция должна что-то посчитать для программы — используйте return. Если функция должна просто пообщаться с пользователем — используйте print.

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

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

    Это сделано для безопасности. Вы можете называть переменные внутри функции как угодно (x, y, temp), не боясь, что они случайно перезапишут важные данные в другой части программы.

    !Локальные переменные изолированы внутри функции.

    Модули: стоим на плечах гигантов

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

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

    Модуль math

    В примере с треугольником мы использовали ** 0.5 для извлечения корня. Но профессиональнее использовать модуль math.

    Модуль random

    Нужно сгенерировать случайное число? Для этого есть модуль random.

    Варианты импорта

    Иногда писать название модуля каждый раз (math.sqrt, math.pi) лень. Можно импортировать конкретные функции:

    Или дать модулю короткое имя (псевдоним):

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

    Вы можете создавать свои модули! Это просто файлы с расширением .py.

    Представьте, что вы написали файл my_utils.py с полезными функциями. Если этот файл лежит в той же папке, что и ваша основная программа, вы можете написать import my_utils и пользоваться своими функциями.

    Это позволяет разбивать огромные программы на маленькие, аккуратные файлы, каждый из которых отвечает за свою задачу (например: database.py, interface.py, calculations.py).

    Заключение

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

  • Создавать функции с помощью def, чтобы не повторять код.
  • Передавать данные через аргументы и получать результат через return.
  • Понимать разницу между локальными и глобальными переменными.
  • Использовать мощь стандартной библиотеки Python через import.
  • Теперь ваш код стал модульным, чистым и профессиональным. В следующей статье мы коснемся темы, которая делает программы по-настоящему умными — мы научимся работать с файлами и обрабатывать ошибки, чтобы наши программы не «падали» при малейшем сбое.

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

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

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

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

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

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

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

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

    Создание первого класса

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

    Давайте разберем этот код:

  • __init__ — специальный метод. Он инициализирует (настраивает) объект. Двойные подчеркивания означают, что это служебный инструмент Python.
  • self — это ссылка на сам объект. Когда вы создаете трех разных котов, self позволяет программе понять, у какого именно кота нужно спросить имя.
  • self.name — это переменная, которая принадлежит конкретному объекту.
  • Создание объектов

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

    Инкапсуляция, Наследование, Полиморфизм

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

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

    Представьте, что нам нужно создать класс Dog. Он очень похож на Cat: у него тоже есть имя и возраст, но он лает, а не мяукает. Чтобы не переписывать код заново, мы можем наследовать свойства от общего класса Animal.

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

    Это страшное слово означает простую вещь: разные объекты могут иметь методы с одинаковыми именами, но работать по-разному. В примере выше и Animal, и Dog имеют метод speak(), но результат разный. Программисту не нужно знать, какое именно это животное, чтобы попросить его подать голос.

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

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

    Математика в методах класса

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

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

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

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

    Работа с файлами: сохраняем результаты

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

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

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

    Основные режимы работы:

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

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

    Представьте, что у нас есть файл message.txt с текстом.

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

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

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

    Обработка исключений

    Работа с файлами — это всегда риск. Файла может не быть, у вас может не быть прав на чтение, или диск может быть переполнен. Чтобы программа не «падала» с красным текстом ошибки, используют конструкцию try-except.

    Здесь Python пытается выполнить код в блоке try. Если возникает ошибка FileNotFoundError, он не останавливает программу, а переходит в блок except и выполняет инструкции там.

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

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

    !Взаимодействие объекта программы с файловой системой: запись и чтение данных.

    Заключение

    Сегодня вы перешли черту от написания скриптов к проектированию архитектуры. Вы узнали:

  • Как создавать свои типы данных с помощью классов.
  • Что такое объекты, атрибуты и методы.
  • Как надежно сохранять данные в файлы с помощью with.
  • Как защитить программу от сбоев с помощью try-except.
  • Впереди вас ждет финальный проект курса, где мы объединим все знания: переменные, циклы, функции, классы и файлы в единое целое приложение.