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

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

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

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

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

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

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

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

Сравните. Вот так может выглядеть код на языке C++:

А вот так то же самое выглядит на Python:

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

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

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

Установка Python

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

    Вместе с Python устанавливается простая среда разработки под названием IDLE. Для первых шагов она подходит идеально. Позже, когда ваши проекты станут сложнее, мы перейдем на профессиональные инструменты, такие как VS Code или PyCharm.

    Запустите IDLE. Вы увидите окно с мигающим курсором. Это — интерактивная оболочка. Здесь можно писать команды и сразу видеть результат.

    Шаг 2. Первая программа и функция print()

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

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

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

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

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

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

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

    !Визуализация концепции переменной как коробки с именем (названием переменной) и содержимым (значением).

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

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

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

  • Коробку с названием name, в которую положили текст "Алекс".
  • Коробку с названием age, в которую положили число 25.
  • Теперь мы можем использовать эти имена в функции print:

    Программа выведет:

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

    Чтобы ваш код был понятен и работал корректно, следуйте этим правилам: * Имя переменной может содержать буквы (латиница), цифры и знак подчеркивания _. * Имя не может начинаться с цифры. * Нельзя использовать пробелы. Вместо них используйте подчеркивание. Этот стиль называется snake_case (змеиный регистр). Плохо:* my variable, Var Хорошо:* my_variable, user_age * Python чувствителен к регистру. Age, age и AGE — это три разные переменные.

    Шаг 4. Базовые типы данных

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

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

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

    int — сокращение от integer. Это любые целые числа: положительные, отрицательные или ноль.

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

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

    float — это дробные числа.

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

    Если вы напишете 3,14, Python подумает, что это два разных числа, перечисленных через запятую.

    3. Строки (str)

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

    Обратите внимание на number_as_string. Хотя внутри написаны цифры, кавычки делают это значение строкой. Вы не сможете математически сложить "100" и 5. Python выдаст ошибку или просто «склеит» их как текст (конкатенация), если оба значения будут строками.

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

    bool — сокращение от boolean. У этого типа всего два возможных значения: * True (Истина) * False (Ложь)

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

    Этот тип данных используется для принятия решений (например, «если пользователь активен, покажи ему контент»).

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

    Если вы сомневаетесь, какой тип данных хранится в переменной, спросите у Python с помощью функции type():

    Результат будет: <class 'int'>.

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

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

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

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

    Заключение

    Сегодня мы заложили фундамент вашего обучения:

  • Установили Python.
  • Научились выводить текст на экран.
  • Узнали, что переменные — это именованные хранилища данных.
  • Познакомились с типами int, float, str и bool.
  • В следующей статье мы научимся выполнять математические операции и заставим компьютер считать за нас.

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

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

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

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

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

    Условные конструкции: if, elif, else

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

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

    Простой if

    Синтаксис очень похож на обычный английский язык:

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

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

    Что делать «иначе»? Оператор else

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

    Здесь программа проверит переменную weather. Если там не «солнце», она автоматически перейдет к блоку else.

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

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

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

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

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

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

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

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

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

    1. and (И)

    Условие истинно, только если оба выражения истинны.

    2. or (ИЛИ)

    Условие истинно, если хотя бы одно из выражений истинно.

    3. not (НЕ)

    Инвертирует значение: True превращает в False, и наоборот.

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

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

    Цикл while (Пока)

    Цикл while выполняет блок кода до тех пор, пока условие остается истинным.

    Результат:

    Осторожно: Если вы забудете строчку count = count + 1, условие count <= 5 всегда будет истинным, и программа уйдет в бесконечный цикл. Если это случилось, нажмите Ctrl+C в консоли, чтобы остановить программу.

    Цикл for (Для)

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

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

    Этот код возьмет каждый символ из строки "Python" по очереди, положит его в переменную letter и выполнит print.

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

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

    Вывод:

    Обратите внимание: range(3) создает последовательность чисел 0, 1, 2. Счет начинается с нуля, а верхняя граница (3) не включается.

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

    Давайте посчитаем сумму чисел от 1 до . В математике это записывается как:

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

    Реализуем это на Python:

    Здесь мы использовали range(1, n + 1), чтобы начать с 1 и закончить числом n (поскольку правая граница range не включается, мы добавляем +1).

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

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

    break (Прервать)

    Команда break немедленно останавливает цикл и выходит из него.

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

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

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

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

    Заключение

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

  • Принимать решения с помощью if, elif, else.
  • Сравнивать значения и использовать логику (and, or).
  • Повторять действия с помощью while и for.
  • В следующей статье мы разберем, как хранить большие объемы данных удобно, изучив списки (Lists) и другие структуры данных.

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

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

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

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

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

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

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

    !Визуализация списка как поезда с пронумерованными вагонами.

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

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

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

    Важнейшее правило программирования: счет начинается с нуля.

    * Первый элемент имеет индекс 0. * Второй элемент — индекс 1.

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

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

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

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

    Методы списков

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

    * append(item): добавляет элемент в конец списка. * insert(index, item): вставляет элемент на указанную позицию. * pop(index): удаляет элемент по индексу и возвращает его (если индекс не указан, удаляет последний). * remove(item): удаляет первое вхождение значения.

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

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

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

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

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

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

    Словарь — это неупорядоченная коллекция пар «ключ-значение».

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

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

    !Визуализация словаря как набора именованных ячеек.

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

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

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

    Если вы обратитесь к несуществующему ключу, программа упадет с ошибкой. Чтобы этого избежать, используют метод .get():

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

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

    Главная фишка множества: в нем не может быть дубликатов. Если вы попытаетесь добавить в множество элемент, который там уже есть, Python просто проигнорирует это действие.

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

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

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

    Рассмотрим формулу объединения двух множеств:

    Где: * и — это два разных множества. * — знак объединения (Union). * — любой элемент. * — знак принадлежности (означает «входит в»). * Формула читается так: «Объединение и состоит из элементов , таких что принадлежит или принадлежит ».

    В Python это делается одной командой:

    Сводная таблица: Что выбрать?

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

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

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

    Заключение

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

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

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

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

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

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

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

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

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

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

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

    !Принцип работы функции: прием данных, обработка и возврат результата.

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

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

    Мы только что научили Python новой команде say_hello. Но если вы запустите этот код, ничего не произойдет. Почему? Потому что мы только определили функцию, но не вызвали её.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Модули: батарейки в комплекте

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

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

    Модуль math

    Этот модуль содержит сложные математические функции.

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

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

    С помощью модуля math это решается в одну строку:

    Модуль random

    Необходим для игр и симуляций, где нужна случайность.

    Модуль time

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

    Как установить сторонние библиотеки?

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

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

    Пример команды для установки библиотеки:

    После установки вы сможете импортировать её в свой код как обычно: import requests.

    Заключение

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

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

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

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

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

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

    Часть 1. Что такое ООП?

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

    Посмотрите вокруг. Мир состоит из объектов: стол, кот, автомобиль, телефон. У каждого объекта есть:

  • Свойства (характеристики): у кота есть цвет, имя, вес.
  • Поведение (действия): кот умеет спать, есть, мурлыкать.
  • В программировании мы пытаемся смоделировать эти реальные объекты.

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

    Два самых важных понятия в ООП — это Класс и Объект (или Экземпляр).

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

    !Визуализация различия между классом (чертежом) и объектами (реальными экземплярами).

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

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

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

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

    #### 1. Метод __init__

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

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

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

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

    self — это ссылка на сам текущий объект.

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

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

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

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

    Часть 2. Наследование: не повторяйся

    Представьте, что нам нужно создать классы для разных животных: Dog, Cat, Bird. У всех них есть имя, возраст, и все они умеют спать. Писать один и тот же код в каждом классе — нарушение принципа DRY (Don't Repeat Yourself).

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

    !Схема наследования: общий класс Animal передает свои свойства дочерним классам.

    Класс Dog получил метод sleep и конструктор __init__ от родителя Animal бесплатно. Нам не пришлось писать их заново.

    Часть 3. Обработка исключений

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

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

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

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

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

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

    Конструкцию можно расширить:

    * else: выполняется, если ошибок не было. * finally: выполняется всегда, была ошибка или нет (полезно для закрытия файлов или соединений с базой данных).

    Зачем нам все это?

    ООП и обработка исключений — это инструменты профессионалов.

    * ООП позволяет строить сложные системы из простых кирпичиков-объектов. Вы не думаете о том, как работает двигатель машины каждый раз, когда садитесь за руль. Вы просто используете объект «Машина» и его метод «Ехать». Так же и в коде. * Обработка исключений делает ваш код устойчивым к хаосу реального мира.

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

    Удачи в программировании!