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

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

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

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

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

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

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

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

Шаг 1: Установка среды разработки

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

Установка Python

  • Перейдите на официальный сайт python.org.
  • Скачайте последнюю версию Python для вашей операционной системы (Windows или macOS).
  • Важный момент для пользователей Windows: При запуске установщика обязательно поставьте галочку напротив пункта Add Python to PATH. Это позволит запускать Python из командной строки.
  • Следуйте инструкциям установщика, нажимая «Next».
  • Выбор редактора кода

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

    * VS Code (Visual Studio Code) — самый популярный бесплатный редактор от Microsoft. Легкий и мощный. * PyCharm Community Edition — профессиональная среда разработки, созданная специально для Python.

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

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

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

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

    Запустите программу (обычно это кнопка треугольника «Play» в редакторе). В нижней части экрана (в консоли) вы увидите:

    Hello, World!

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

    Переменные: хранение данных

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

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

    !Визуализация переменной как коробки с именем, хранящей значение

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

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

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

  • user_name, в которую положили текст "Ivan".
  • age, в которую положили число 25.
  • Знак = в программировании называется оператором присваивания. Это не то же самое, что равенство в математике. Запись x = 5 читается как «присвоить переменной x значение 5», а не «x равно 5».

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

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

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

    Типы данных

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

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

    Это обычные числа без дробной части: 1, 10, -5, 1000.

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

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

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

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

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

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

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

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

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

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

    Этот тип данных может принимать только два значения: * True (Истина) * False (Ложь)

    Они часто используются для проверки условий (например, «пользователь авторизован?» или «игра закончена?»).

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

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

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

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

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

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

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

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

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

    Заключение

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

  • Устанавливать Python и настраивать среду.
  • Выводить информацию на экран с помощью print().
  • Использовать переменные как коробки для хранения данных.
  • Различать основные типы данных: числа (int, float), строки (str) и логические значения (bool).
  • В следующей статье мы углубимся в арифметические операции и научимся заставлять компьютер считать за нас сложные выражения.

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

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

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

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

    Условные операторы: принятие решений

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

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

    Оператор if

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

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

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

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

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

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

    Основные операторы в Python:

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

    Блок else

    Что делать, если условие ложно? Для этого существует else:

    Если temperature больше 20, программа выполнит первый блок. Во всех остальных случаях (если 20 или меньше) — второй блок.

    Блок elif

    Иногда вариантов больше, чем два. Например, светофор. Для этого мы используем elif:

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

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

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

    В Python для этого есть слова and, or и not.

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

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

    Циклы позволяют выполнять один и тот же блок кода многократно. Это основа автоматизации. Представьте, что вам нужно вывести на экран числа от 1 до 1000. Писать 1000 строк print() было бы безумием. Циклы решают эту задачу в пару строк.

    Цикл while (Пока)

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

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

  • Переменная count равна 1.
  • Проверяется условие: . Это истина (True).
  • Выполняется тело цикла: выводится текст и count увеличивается на 1.
  • Программа возвращается к проверке условия. Теперь count равен 2.
  • Это продолжается, пока count не станет равен 6. Условие ложно (False), и цикл завершается.
  • Осторожно: Бесконечный цикл! Если вы забудете строку count = count + 1, переменная count всегда будет равна 1, условие всегда будет истинным, и программа зависнет, бесконечно печатая текст. Чтобы прервать выполнение такой программы, обычно используют сочетание клавиш Ctrl+C в консоли.

    Цикл for (Для)

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

    !Визуализация итерации цикла for по элементам

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

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

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

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

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

    Где: * — полученная последовательность чисел. * — начало отсчета (включительно, по умолчанию 0). * — конец отсчета (не включительно). * — шаг (по умолчанию 1).

    Примеры:

  • range(5) — создаст числа 0, 1, 2, 3, 4.
  • range(2, 6) — создаст числа 2, 3, 4, 5.
  • range(0, 10, 2) — создаст числа 0, 2, 4, 6, 8.
  • Пример кода:

    Вывод:

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

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

    break

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

    continue

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

    Здесь используется оператор % (остаток от деления). Если остаток от деления на 2 равен 0, значит число четное, и мы пропускаем print с помощью continue.

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

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

    Заключение

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

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

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

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

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

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

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

    1. Списки (Lists)

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

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

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

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

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

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

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

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

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

    Срезы (Slicing)

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

    2. Кортежи (Tuples)

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

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

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

  • Защита данных: Если вы передаете в программу настройки, которые нельзя менять (например, координаты GPS или дни недели), используйте кортеж. Это гарантия того, что никто случайно не сломает данные.
  • Скорость: Кортежи занимают меньше памяти и работают немного быстрее списков.
  • Если вы попробуете написать coordinates[0] = 50, Python выдаст ошибку TypeError.

    3. Словари (Dictionaries)

    Если списки используют для доступа числовые индексы (0, 1, 2...), то словари используют ключи. Это структура данных типа «Ключ — Значение».

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

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

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

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

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

    Изменение словаря

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

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

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

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

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

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

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

    !B (объединение). | Визуализация операций над множествами с помощью кругов Эйлера-Венна

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

    Где — первое множество чисел.

    Где — второе множество чисел.

    Рассмотрим основные операции:

    1. Пересечение (Intersection): Элементы, которые есть И там, И там. В Python используется оператор &.

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

    2. Объединение (Union): Все элементы из обоих множеств (без дублей). В Python используется оператор |.

    Где — результат объединения, — знак объединения.

    3. Разность (Difference): Элементы, которые есть в A, но нет в B. В Python используется оператор -.

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

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

    Как выбрать правильную структуру?

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

    | Вопрос | Ответ | Какую структуру выбрать? | | :--- | :--- | :--- | | Нужен порядок и возможность менять данные? | Да | Список (List) [] | | Нужен порядок, но данные менять нельзя? | Да | Кортеж (Tuple) () | | Нужно находить данные по имени (ключу)? | Да | Словарь (Dict) {key: val} | | Важна уникальность и не важен порядок? | Да | Множество (Set) {} |

    Итерация по структурам данных

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

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

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

    Заключение

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

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

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

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

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

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

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

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

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

    !Визуализация функции как механизма преобразования входных данных в результат

    Принцип DRY

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

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

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

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

  • def — команда, сообщающая Python, что мы создаем функцию.
  • say_hello — имя функции. Правила именования такие же, как у переменных: используем маленькие буквы и подчеркивания (snake_case).
  • () — скобки, в которых могут быть аргументы (пока их нет).
  • : — двоеточие, открывающее блок кода.
  • Отступы — все строки с отступом относятся к телу функции.
  • Если вы просто запустите этот код, на экране ничего не появится. Мы только научили программу этому действию, но не попросили его выполнить. Чтобы код сработал, функцию нужно вызвать:

    Теперь программа найдет блок def say_hello, выполнит команды внутри него и вернется обратно.

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

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

    Давайте научим функцию здороваться с конкретным человеком:

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

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

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

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

    В примере выше важен порядок: сначала тип животного, потом имя. Если перепутать (describe_pet("Гарри", "хомяк")), получится ерунда: «У меня есть Гарри. Его зовут хомяк».

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

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

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

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

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

    Для этого служит команда return.

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

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

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

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

    Разница между print и return

    Это самая частая ошибка новичков. * print — это как показать картинку человеку. Компьютер показал и забыл. * return — это как передать данные в руки другой части программы.

    Если функция только печатает (print), но не возвращает (return), то результат её работы равен специальному пустому значению None.

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

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

    Переменная secret_code существует только в момент выполнения функции my_secret. Как только функция завершилась, переменная уничтожается.

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

    Модули: использование чужого кода

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

    Эти функции упакованы в модули. Модуль — это просто файл с расширением .py, содержащий код.

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

    Модуль math

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

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

    Нам не нужно вручную задавать число Пи. Оно есть в модуле math.

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

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

    Модуль random

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

    Импорт конкретных функций

    Если вам не нужен весь модуль, а только одна функция, можно использовать конструкцию from ... import ....

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

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

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

    Заключение

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

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

    5. Основы ООП, работа с файлами и обработка исключений

    Основы ООП, работа с файлами и обработка исключений

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

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

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

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

    Классы и Объекты

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

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

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

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

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

    Давайте разберем этот код, так как здесь много нового:

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

    Теперь, когда у нас есть чертеж, давайте создадим пару машин:

    Обратите внимание: мы передали model и color, но не передавали self. Python делает это за нас автоматически.

    Методы и вычисления

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

    Где — расстояние (путь), — скорость движения, а — время в пути.

    Добавим метод в наш класс:

    Теперь мы можем использовать это:

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

    Одна из самых мощных фишек ООП — наследование. Если мы хотим создать класс ElectricCar (Электромобиль), нам не нужно переписывать весь код класса Car. Мы можем просто сказать: «Электромобиль — это как обычная машина, но с батареей».

    ElectricCar автоматически получил все методы Car (он умеет ездить), но добавил свой уникальный метод charge.

    Часть 2: Работа с файлами

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

    Чтение и запись

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

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

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

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

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

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

    Аргумент encoding="utf-8" важен для корректного отображения кириллицы (русских букв).

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

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

    Чтобы этого не произошло, мы должны «ловить» ошибки. Для этого используется конструкция try...except.

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

    Логика проста: «Попробуй (try) сделать это. Если возникнет ошибка (except), не падай, а сделай вот это».

    Рассмотрим классический пример деления на ноль.

    Если пользователь введет 0, программа не сломается, а вежливо сообщит об ошибке. Если введет слово «привет», сработает ValueError.

    Блок finally

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

    Заключение

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

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