Python с нуля: основы программирования и практические навыки

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

1. Введение в Python и настройка окружения

Введение в Python и настройка окружения

Что такое Python и зачем он нужен

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

Python используют, чтобы:

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

    Как устроена работа Python

    Когда вы пишете программу на Python, обычно происходит такой процесс:

  • Вы создаёте файл с кодом (например, main.py).
  • Интерпретатор Python читает этот файл и выполняет команды сверху вниз.
  • Результат появляется в терминале (консоли) или сохраняется в файлы.
  • Интерпретатор — это программа, которая запускает ваш Python-код.

    !Схема: файл с кодом → интерпретатор Python → результат в терминале

    Какую версию Python ставить

    Для обучения и большинства современных задач выбирайте Python 3.

    Рекомендации:

  • ставьте последнюю стабильную версию Python 3 с официального сайта
  • не используйте Python 2 (он устарел и официально не поддерживается)
  • Официальная страница загрузки Python:

  • Python Downloads
  • Установка Python

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

    Windows

  • Скачайте установщик с сайта Python.
  • Запустите установку.
  • Обязательно отметьте галочку Add Python to PATH (это позволит запускать python из терминала).
  • Нажмите Install.
  • Проверка установки:

  • Откройте PowerShell или Командную строку.
  • Выполните команду python --version.
  • Если всё хорошо, вы увидите версию, например Python 3.13.1.

    Если команда python не найдена, чаще всего причина в PATH (см. раздел про типичные проблемы ниже).

    macOS

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

    Рекомендуемый вариант:

  • Скачайте установщик с сайта Python.
  • Установите Python 3.
  • В терминале проверьте командой python3 --version.
  • Linux

    На многих дистрибутивах Python 3 уже есть.

    Проверка:

  • выполните python3 --version
  • Если Python не установлен, устанавливайте через менеджер пакетов вашего дистрибутива (способ зависит от системы).

    Официальная документация по установке:

  • Python Setup and Usage
  • Терминал, команды и проверка окружения

    Терминал (или консоль) — это приложение, где можно вводить команды.

    Минимальный набор команд для проверки:

  • python --version или python3 --version
  • pip --version или pip3 --version
  • pip — это менеджер пакетов Python (через него устанавливают библиотеки).

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

  • Windows: where python
  • macOS/Linux: which python3
  • Выбор редактора кода

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

    Популярные варианты:

  • Visual Studio Code (лёгкий, бесплатный) — Visual Studio Code
  • PyCharm Community (удобно для Python, бесплатная версия) — PyCharm
  • Если выбираете VS Code, установите расширение Python:

  • Python extension for Visual Studio Code
  • Виртуальные окружения: зачем они нужны

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

    Зачем это нужно:

  • разные проекты могут требовать разные версии библиотек
  • можно не "захламлять" системный Python
  • проще воспроизводить проект на другом компьютере
  • Создание виртуального окружения (стандартный модуль venv):

  • Перейдите в папку проекта.
  • Создайте окружение командой python -m venv .venv (на macOS/Linux часто python3 -m venv .venv).
  • Активируйте окружение.
  • Команды активации:

  • Windows (PowerShell): .venv\Scripts\Activate.ps1
  • Windows (cmd): .venv\Scripts\activate.bat
  • macOS/Linux: source .venv/bin/activate
  • Признак, что окружение активно: в начале строки терминала появляется что-то вроде (.venv).

    Выход из окружения:

  • deactivate
  • Документация по venv:

  • venv — Creation of virtual environments
  • Первый запуск Python

    Есть два базовых способа запускать Python.

    Интерактивный режим (REPL)

    REPL удобен, чтобы быстро проверить идею.

  • В терминале выполните python (или python3).
  • Введите выражение 2 + 2 и нажмите Enter.
  • Чтобы выйти, введите exit().
  • Запуск файла со скриптом

    Создайте файл main.py и напишите:

    Запустите:

  • python main.py (или python3 main.py)
  • Если всё настроено правильно, вы увидите строку Привет, Python!.

    Типичные проблемы и решения

    Ниже — самые частые ситуации у начинающих.

    Команда python не распознаётся

    Возможные причины:

  • Python не установлен
  • Python установлен, но не добавлен в PATH
  • в системе несколько Python, и терминал указывает не на тот
  • Что сделать:

  • На Windows переустановите Python и убедитесь, что отмечено Add Python to PATH.
  • Проверьте where python (Windows) или which python3 (macOS/Linux).
  • Попробуйте использовать python3 вместо python.
  • pip не работает

    Частые причины:

  • используется другой интерпретатор Python
  • виртуальное окружение не активировано
  • Практичный вариант запуска pip через Python:

  • python -m pip --version
  • python -m pip install <package>
  • Так вы точно ставите пакеты именно для того Python, который запускаете.

    Ошибки из-за кириллицы в Windows

    Иногда терминал или файл сохранён в неподходящей кодировке.

    Решение для начала:

  • сохраняйте файлы в UTF-8 (по умолчанию это делает большинство редакторов)
  • используйте современный терминал (Windows Terminal или PowerShell)
  • Как организовать папку проекта

    Для учебных проектов удобна простая структура:

  • папка проекта (например, python-course)
  • внутри код (например, main.py)
  • внутри виртуальное окружение .venv (часто его не добавляют в репозиторий)
  • Пример:

    Что дальше по курсу

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

    2. Базовый синтаксис: переменные, типы, ввод и вывод

    Базовый синтаксис: переменные, типы, ввод и вывод

    Как эта тема связана с предыдущей

    В предыдущей статье вы установили Python, научились запускать интерпретатор и скрипты (python main.py), а также узнали, зачем нужно виртуальное окружение. Теперь мы начнём писать осмысленные программы: будем хранить данные в переменных, разбираться в типах данных и взаимодействовать с пользователем через ввод и вывод.

    Как Python читает код

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

  • переменную нужно создать до того, как вы её используете
  • ввод (input) произойдёт в момент выполнения строки, где он написан
  • вывод (print) покажет результат сразу, когда до него дойдёт выполнение
  • !Схема базового цикла работы программы: ввод → обработка → вывод

    Переменные

    Переменная — это имя, которое ссылается на значение в памяти. В Python переменная создаётся в момент присваивания.

    Пример:

    Здесь:

  • name — переменная, значение — строка "Аня"
  • age — переменная, значение — число 20
  • Правила и стиль именования

    В Python есть строгие правила и хорошие практики.

    Правила:

  • имя может состоять из букв, цифр и символа _
  • имя не может начинаться с цифры
  • регистр важен: age и Age — разные переменные
  • Хороший стиль (PEP 8):

  • используйте snake_case: user_name, total_price
  • делайте имена понятными: x допустимо для коротких примеров, но в реальном коде лучше count, sum_prices
  • Официальный стиль кода Python описан в документе PEP 8.

    Типы данных

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

    Основные типы, с которых мы начинаем

  • int — целые числа, например -3, 0, 42
  • float — числа с дробной частью, например 3.14, -0.5
  • str — строки (текст), например "привет"
  • bool — логический тип: True или False
  • NoneType — специальное значение None, означает нет значения / не задано
  • Проверить тип можно встроенной функцией type():

    Справка по встроенным типам есть в документации: Built-in Types.

    Почему типы важны

    Одна и та же операция может вести себя по-разному для разных типов.

    В первом случае складываются числа, во втором — склеиваются строки.

    Преобразование типов

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

  • int()
  • float()
  • str()
  • bool()
  • Примеры:

    Важно: преобразование возможно не всегда.

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

    Ввод данных: input

    Функция input() читает строку из терминала.

    Ключевой момент: input() всегда возвращает строку (str), даже если пользователь ввёл цифры.

    Пример с числом:

    Документация: input.

    Вывод данных: print

    print() выводит данные в терминал.

    Несколько значений в print

    Если передать несколько аргументов, print выведет их через пробел:

    Параметры sep и end

    Иногда удобно управлять разделителем и окончанием строки:

    Документация: print.

    Форматирование строк: f-строки

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

    Преимущества:

  • читаемость
  • меньше ошибок по сравнению со склейкой строк
  • удобно вставлять выражения
  • Пример с выражением:

    Комментарии

    Комментарий — это текст для человека, Python его не выполняет.

    Комментарии помогают:

  • объяснять зачем написан код
  • оставлять заметки себе на будущее
  • Мини-проект: диалог с пользователем

    Соберём всё вместе: переменные, ввод, преобразование типов и вывод.

    Что здесь происходит:

  • Считываем имя (это строка).
  • Считываем год рождения (это тоже строка).
  • Преобразуем год в число с помощью int().
  • Считаем возраст как разницу.
  • Выводим результат через f-строку.
  • > Если пользователь введёт не число, int() вызовет ошибку. На этом этапе это нормально: позже мы изучим, как обрабатывать ошибки и делать программу устойчивой.

    Типичные ошибки новичков

    Использование переменной до присваивания

    Так нельзя: на момент print(x) переменной x ещё не существует.

    Сложение строки и числа

    Ожидание числа от input без преобразования

    Что дальше

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

    3. Управляющие конструкции: условия и циклы

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

    Как эта тема связана с предыдущими

    Раньше вы научились:

  • запускать Python
  • хранить значения в переменных
  • получать данные через input()
  • выводить результаты через print()
  • преобразовывать типы (int(), float(), str())
  • Теперь добавим управляющие конструкции: они позволяют программе принимать решения и повторять действия. Без них программа почти всегда остаётся линейной: выполняет команды строго сверху вниз и заканчивает работу.

    Условия: if, elif, else

    Условие — это проверка, от результата которой зависит, какой блок кода выполнится.

    Логические значения: True и False

    В Python есть тип bool:

  • True — истина
  • False — ложь
  • Условие в if всегда вычисляется в одно из этих двух значений.

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

    Чаще всего условия строят через сравнение.

    | Оператор | Смысл | Пример | |---|---|---| | == | равно | age == 18 | | != | не равно | name != "Аня" | | > | больше | x > 0 | | < | меньше | x < 10 | | >= | больше или равно | score >= 60 | | <= | меньше или равно | temp <= 0 |

    Пример:

    Синтаксис if и важность отступов

    В Python блок кода задаётся отступами. Обычно это 4 пробела.

    Важно:

  • после условия ставится :
  • строки с одинаковым отступом относятся к одному блоку
  • Варианты ветвления: elif и else

    Если нужно проверить несколько вариантов:

    Как читается такой код:

  • Python проверяет условия сверху вниз
  • выполняется первый блок, у которого условие истинно
  • остальные ветки пропускаются
  • !Блок-схема, показывающая, как выбирается ветка в if/elif/else

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

    Их используют, когда одно условие зависит от нескольких проверок.

  • and — истина, если истинны оба условия
  • or — истина, если истинно хотя бы одно условие
  • not — логическое отрицание
  • Пример:

    Пример с or:

    Частая ошибка: сравнение числа со строкой

    input() возвращает строку, поэтому такие сравнения работать корректно не будут.

    Неправильно:

    Правильно:

    Документация по базовым операциям сравнения и логике: Built-in Types.

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

    Цикл — это конструкция, которая повторяет блок кода несколько раз.

    Есть два основных вида:

  • while — повторяем, пока условие истинно
  • for — перебираем элементы последовательности или диапазона
  • Цикл while

    Базовый пример

    Что важно:

  • условие проверяется перед каждой итерацией
  • если забыть изменять переменную count, цикл может стать бесконечным
  • Бесконечный цикл и как его остановить

    Бесконечный цикл возникает, когда условие всегда остаётся истинным.

    Здесь while True запускает цикл намеренно, а выход происходит через break.

    !Блок-схема работы while и выхода через break

    Цикл for и функция range()

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

    Повторить N раз

    range(5) даёт числа 0, 1, 2, 3, 4.

    Диапазон с началом и концом

    Здесь i принимает значения от 1 до 5 включительно, потому что верхняя граница в range не включается.

    Шаг в range

    Получится: 0, 2, 4, 6, 8, 10.

    Документация: range.

    break и continue

    Эти операторы помогают управлять циклом.

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

    Пример с break (остановимся, когда дошли до 5):

    Практический пример: сумма чисел

    Задача: пользователь вводит число n, а программа считает сумму от 1 до n.

    Что здесь происходит:

  • n + 1 нужно потому, что range не включает верхнюю границу.
  • total накапливает результат: на каждой итерации прибавляем i.
  • Практический пример: проверка ввода через while

    На практике ввод часто нужно повторять, пока пользователь не введёт корректное значение.

    Здесь:

  • text.isdigit() возвращает True, если строка состоит только из цифр
  • not делает условие обратным: цикл работает, пока введено не число
  • Документация по методам строк: str.

    Типичные ошибки новичков

  • Пропущено двоеточие : после if или while.
  • Неправильные отступы: блок кода «съезжает», и логика меняется.
  • Сравнение строки с числом из-за input().
  • Бесконечный while, потому что переменная в условии не меняется.
  • Что дальше

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

    Полезный раздел документации по управляющим конструкциям: More Control Flow Tools.

    4. Коллекции данных: списки, кортежи, множества, словари

    Collections: lists, tuples, sets, dictionaries

    How this topic connects to previous lessons

    So far you can write linear programs, read input with input(), print results, convert types, and control logic with if and loops (for, while). Collections let you store many values under one name and then process them with loops and conditions, which is what most real programs do.

    What a collection is

    A collection is a data type that holds multiple items.

    In this lesson you will learn four built-in collection types:

  • list — ordered, changeable sequence
  • tuple — ordered, not changeable sequence
  • set — unordered collection of unique items
  • dict — key → value mapping (like a mini database)
  • !A quick visual comparison of Python collection types

    Quick comparison table

    | Type | Example | Ordered | Changeable | Duplicates allowed | Access pattern | |---|---|---|---|---|---| | list | [10, 20, 20] | yes | yes | yes | by index | | tuple | (10, 20, 20) | yes | no | yes | by index | | set | {10, 20} | no | yes | no | by membership | | dict | {“a”: 1, “b”: 2} | yes (insertion order) | yes | keys: no | by key |

    > Since Python 3.7, dictionaries preserve insertion order as a language guarantee. See Dictionaries (Python documentation).

    Lists

    Creating a list

    Indexing and slicing

    Lists are ordered, so each item has a position (index). Indexing starts at 0.

    Changing a list (mutability)

    Useful list methods

    Important notes:

  • append(x) adds to the end
  • remove(x) removes the first matching value (error if not found)
  • len(list) returns the number of items
  • Reference: Sequence types — list (Python documentation).

    Looping over a list

    Lists from user input

    A common pattern is: read many values, store them, then process.

    Tuples

    What a tuple is

    A tuple is like a list, but immutable (you cannot change items).

    Why tuples are useful

    Tuples are great for data that should not change, like coordinates, fixed settings, or “records”. If you try to modify a tuple, Python will raise an error.

    Tuple unpacking

    You can assign multiple variables at once.

    Reference: Sequence types — tuple (Python documentation).

    Sets

    What a set is

    A set stores unique items and is best for membership checks (“is this item present?”).

    Uniqueness (duplicates are removed)

    Membership checks

    Common set operations

    Reference: Set types — set (Python documentation).

    Dictionaries

    What a dictionary is

    A dictionary (dict) stores pairs: keyvalue. You use the key to quickly find the value.

    Keys are usually strings or numbers (they must be “hashable”), and keys must be unique.

    Adding and updating values

    Safe reading with get

    If a key might be missing, get helps avoid an error.

    Looping over a dictionary

    Reference: Mapping types — dict (Python documentation).

    Choosing the right collection

  • Choose a list when you need an ordered sequence you will change (add, remove, update).
  • Choose a tuple when you need an ordered sequence that must not change.
  • Choose a set when uniqueness and fast membership checks matter.
  • Choose a dict when you need “lookup by key” (names to ages, product to price, word to count).
  • Practical example: counting word frequency

    This example uses input, loops, conditions, and a dictionary.

    Goal: read a line of text and count how many times each word appears.

    What to notice:

  • split() turns one string into a list of strings
  • the dictionary counts stores word → number
  • if w in counts checks whether a key exists
  • Reference: str.split (Python documentation).

    Typical beginner mistakes

  • Using {} expecting an empty set (it is an empty dict). Use set().
  • Forgetting that input() returns a string and then putting numeric strings into collections without converting.
  • Trying to modify a tuple like a list.
  • Assuming sets keep a stable order (they do not).
  • What’s next

    With collections you can store and process real data. The next step is usually learning how to structure bigger programs using functions, and how to combine collections with functions to build reusable logic.

    5. Функции, модули и обработка ошибок

    Функции, модули и обработка ошибок

    Связь с предыдущими темами

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

  • код становится длинным и повторяющимся
  • ошибки (например, неверный ввод) ломают программу
  • В этой статье вы научитесь:

  • выносить повторяющуюся логику в функции
  • организовывать код по файлам с помощью модулей
  • делать программы устойчивыми с помощью обработки исключений
  • !Как функции вызывают друг друга и возвращают значения

    Функции

    Зачем нужны функции

    Функция — это именованный блок кода, который можно вызывать много раз.

    Функции помогают:

  • убрать дублирование кода
  • сделать программу понятнее (каждая часть отвечает за одну задачу)
  • проще тестировать и исправлять ошибки
  • Как объявить и вызвать функцию

    Базовый шаблон:

    Правила:

  • def создаёт функцию
  • имя функции обычно пишут в snake_case
  • код функции находится в блоке с отступом
  • функция не выполняется при объявлении, она выполняется при вызове
  • Справка: Функции (раздел документации Python).

    Параметры и аргументы

    Функция может принимать данные через параметры.

    Термины:

  • параметр — переменная в объявлении функции (name)
  • аргумент — конкретное значение при вызове ("Аня")
  • Возврат результата: return

    Если функция должна вычислить значение, используют return.

    Важно:

  • return завершает выполнение функции
  • если return не указан, функция возвращает None
  • Область видимости: что такое локальные и глобальные переменные

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

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

    Практическое правило для начинающих:

  • передавайте значения в функцию параметрами
  • возвращайте результат через return
  • не пытайтесь «доставать» и менять внешние переменные без необходимости
  • Значения параметров по умолчанию

    Можно задать параметру значение по умолчанию.

    Плюсы:

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

    Докстрока — строка в начале функции, которая объясняет, что она делает.

    Докстроки полезны:

  • вам же через неделю
  • подсказкам в редакторе кода
  • автоматической документации
  • Справка: Строки документации (PEP 257).

    Модули

    Что такое модуль

    Модуль — это Python-файл (.py), который можно импортировать.

    Зачем модули:

  • разделять проект на части по смыслу
  • переиспользовать код в разных файлах
  • держать порядок в больших программах
  • Импорт из стандартной библиотеки

    Python поставляется с большой стандартной библиотекой.

    Пример:

    Другой вариант импорта:

    И импорт с псевдонимом:

    Справка: Модули (документация Python).

    Свой модуль: выносим функции в отдельный файл

    Представим, что у вас есть проект с файлами:

  • main.py
  • utils.py
  • Файл utils.py:

    Файл main.py:

    Ключевые идеи:

  • импорт работает, если файлы находятся в одной папке
  • код становится короче и понятнее: ввод и логика разделены
  • __name__ == "__main__": как писать модуль и как программу

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

    Пример utils.py:

    Смысл:

  • если файл запущен напрямую, выполняется блок под if __name__ == "__main__":
  • если файл импортирован, этот блок не выполняется
  • Справка: Встроенная переменная __name__.

    Обработка ошибок (исключения)

    Что такое исключение

    Исключение — это сигнал об ошибке во время выполнения программы. Когда исключение возникает и не обрабатывается, программа обычно завершается и показывает трассировку (traceback).

    Пример ошибки:

    Полезный навык: читать ошибку снизу вверх.

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

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

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

    Что здесь происходит:

  • в блоке try находится код, который может упасть
  • в except ValueError описано, что делать при конкретной ошибке
  • !Как работает try/except

    else и finally

    Иногда полезно разделить «успешный сценарий» и «действия в любом случае».

    Смысл:

  • else выполняется только если в try не было исключения
  • finally выполняется всегда (успех или ошибка)
  • Когда стоит использовать try/except, а когда нет

    Хорошая практика:

  • использовать try/except, когда ошибка ожидаема (например, пользовательский ввод)
  • не «прятать» все ошибки подряд, иначе трудно отлаживать программу
  • Плохой пример для новичка:

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

    Частые исключения в задачах новичка

    | Исключение | Когда возникает | Пример | |---|---|---| | ValueError | неверное преобразование типа | int("abc") | | TypeError | операция над несовместимыми типами | "a" + 1 | | NameError | переменной не существует | print(x) до x = ... | | IndexError | неверный индекс списка | items[10] при длине 3 | | KeyError | нет ключа в словаре при доступе [] | d["missing"] |

    Практический совет:

  • если ключ в словаре может отсутствовать, используйте dict.get()
  • Связка: функции + исключения для «чистого» кода

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

    Почему это хороший стиль:

  • while отвечает за повтор
  • try/except отвечает за «опасную» операцию int(text)
  • основная программа (age = read_int(...)) выглядит просто
  • Итоги

    Теперь вы умеете:

  • писать функции с параметрами и return
  • понимать локальные переменные и аккуратно передавать данные
  • разбивать проект на модули и импортировать код
  • обрабатывать ожидаемые ошибки через try/except
  • В следующих темах эти навыки особенно важны: функции и модули помогают строить программы «как конструктор», а обработка ошибок делает их надёжными при реальном вводе данных.

    6. Работа со строками, файлами и простыми форматами данных

    Работа со строками, файлами и простыми форматами данных

    Связь с предыдущими темами

    Раньше вы научились работать с переменными, условиями, циклами, коллекциями (списки, словари) и писать функции с обработкой ошибок. Теперь соберём это в практический навык:

  • обрабатывать текст (строки) с помощью методов строк
  • читать и записывать файлы безопасно (через with)
  • хранить данные в простых форматах: JSON и CSV
  • Это типичный путь реальных программ: прочитать данныеобработатьсохранить результат.

    !Типичный процесс работы с текстом и файлами

    Строки в Python

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

    Индексация и срезы

    Строка, как и список, является последовательностью.

    Полезно помнить:

  • индексация начинается с 0
  • отрицательные индексы считают с конца
  • срез a:b берёт символы с позиции a до b, не включая b
  • Строки неизменяемы

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

    Практический вывод: почти все методы строк не изменяют строку на месте, а возвращают новую строку.

    Справка: Тип str (документация Python)

    Частые операции со строками

    strip, lstrip, rstrip

    Убирают пробелы (и другие пробельные символы) по краям строки.

    Это особенно важно при чтении строк из файла, потому что строки часто заканчиваются на \n.

    lower и upper

    Нормализация регистра помогает сравнивать текст без ошибок.

    replace

    Замена подстроки.

    Поиск: in, find, count

    Проверка наличия:

    Поиск позиции:

    Подсчёт вхождений:

    split и join

    split() превращает строку в список строк.

    join() склеивает список строк в одну строку.

    Практическое правило:

  • разбираем текст на части через split
  • собираем текст обратно через join
  • Файлы: чтение и запись

    Файл обычно используют, когда данные нужно:

  • сохранить между запусками программы
  • обработать большой объём текста
  • обменяться данными между программами
  • Открытие файла через with

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

    Справка: Функция open (документация Python)

    Режимы открытия

    | Режим | Смысл | Что будет, если файла нет | |---|---|---| | "r" | чтение | ошибка | | "w" | запись (перезаписать) | файл будет создан | | "a" | дозапись в конец | файл будет создан |

    Пример дозаписи:

    Чтение построчно

    Это удобно для больших файлов.

    Здесь:

  • for line in f читает файл по строкам
  • strip() убирает пробелы и \n
  • if line: пропускает пустые строки
  • Запись нескольких строк

    Обработка типичных ошибок

    При работе с файлами часто встречаются исключения:

  • FileNotFoundError если файла нет
  • PermissionError если нет прав
  • Пример безопасного чтения:

    Пути к файлам через pathlib

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

    Плюсы:

  • удобное соединение путей через /
  • простые методы exists(), read_text(), write_text()
  • Справка: pathlib (документация Python)

    Простые форматы данных

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

    В базовых проектах чаще всего встречаются:

  • JSON для структурированных данных (списки, словари)
  • CSV для таблиц (строки и столбцы)
  • JSON

    JSON похож на словари и списки Python.

  • JSON-объект похож на dict
  • JSON-массив похож на list
  • Справка: Модуль json (документация Python)

    #### Запись в JSON

    Параметры:

  • ensure_ascii=False чтобы кириллица записывалась читаемо
  • indent=2 чтобы файл был красиво отформатирован
  • #### Чтение JSON

    CSV

    CSV удобен для таблиц. Обычно каждая строка файла это строка таблицы, а значения разделены запятыми или другим разделителем.

    Справка: Модуль csv (документация Python)

    #### Запись CSV

    Параметр newline="" рекомендован документацией csv, чтобы избежать лишних пустых строк на некоторых системах.

    #### Чтение CSV

    Если первая строка это заголовки, удобно отделить её:

    Мини-проект: подсчёт слов в файле и сохранение результата

    Задача:

  • прочитать текстовый файл
  • посчитать частоту слов
  • сохранить результат в JSON
  • Что здесь связывает курс в одно целое:

  • строки: split(), strip(), lower()
  • коллекции: словарь counts
  • циклы: перебор строк и слов
  • функции: логика разбита на части
  • ошибки: обработка FileNotFoundError
  • форматы: сохранение структуры в JSON
  • Итоги

    Вы научились:

  • использовать методы строк для очистки, поиска и разбиения текста
  • читать и писать файлы через with open(..., encoding="utf-8")
  • безопасно обрабатывать типичные ошибки работы с файлами
  • сохранять и загружать данные через JSON и CSV стандартными модулями
  • Эти навыки дают основу для множества практических задач: обработка логов, отчётов, простые базы данных в JSON, импорт и экспорт таблиц.

    7. Основы ООП и мини‑проект на Python

    Основы ООП и мини‑проект на Python

    Связь с предыдущими темами

    Раньше вы писали программы из переменных, условий, циклов, коллекций, функций и модулей, а также читали и сохраняли данные в файлы (JSON/CSV). Теперь сделаем следующий шаг: научимся упаковывать данные и поведение вместе с помощью объектно‑ориентированного программирования (ООП).

    ООП особенно полезно, когда программа растёт:

  • появляются сущности реального мира (пользователь, задача, товар)
  • нужно хранить состояние и аккуратно его менять
  • хочется меньше зависеть от глобальных переменных и длинных словарей
  • Что такое ООП

    ООП — это подход к программированию, в котором программа строится из объектов.

  • Объект — это экземпляр некоторой сущности. У объекта есть данные (состояние) и действия (поведение).
  • Класс — это описание (шаблон), по которому создаются объекты.
  • Простой пример из жизни:

  • класс: Task (описание задачи)
  • объект: конкретная задача “Купить молоко”
  • !Визуально показывает разницу между классом и объектами

    Официальная документация: Классы (учебник Python)

    Класс и объект: минимальный пример

    Здесь:

  • class User: создаёт класс
  • User() создаёт объект этого класса
  • Пока класс пустой, но уже видно главное: класс описывает, а объект живёт в памяти и используется в программе.

    Атрибуты и методы

    У объекта есть:

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

    Что такое self

    self — это ссылка на текущий объект, для которого вызывается метод.

    Если вызвать u.greet(), то внутри метода greet параметр self будет ссылаться на u.

    Практическое правило:

  • почти у каждого метода первым параметром пишут self
  • к атрибутам текущего объекта обращаются как self.name, self.age и так далее
  • Конструктор __init__

    Часто объект должен быть создан сразу “правильным”: с нужными данными. Для этого используют метод __init__.

    Здесь:

  • User("Боб") создаёт объект
  • Python автоматически вызывает __init__ и передаёт туда "Боб"
  • внутри __init__ мы записываем атрибут self.name
  • Справка: Модель данных Python (специальные методы)

    Атрибуты объекта и атрибуты класса

    Иногда путают два разных понятия.

  • Атрибут объекта принадлежит конкретному объекту: у каждого экземпляра своё значение.
  • Атрибут класса общий для всех объектов этого класса.
  • Пример:

    На практике начинающим чаще всего нужны атрибуты объекта (self.something). Атрибуты класса полезны, но с ними лучше быть аккуратным.

    Инкапсуляция: прячем детали, оставляем понятный интерфейс

    Инкапсуляция — идея “не давать менять важные внутренности как попало”, а вместо этого предоставить понятные методы.

    В Python нет жёсткой приватности, но есть соглашение:

  • атрибут с подчёркиванием в начале имени (например, _balance) считается внутренним и его не трогают напрямую
  • Пример:

    Зачем это нужно:

  • вы контролируете правила изменения данных
  • меньше “случайных” ошибок в коде
  • Композиция и наследование: два способа строить модели

    Композиция

    Композиция — когда объект содержит внутри другие объекты.

    Пример в нашем мини‑проекте: TaskManager будет содержать список задач Task.

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

    Наследование — когда один класс расширяет другой.

    Пример:

    Практический совет для старта:

  • чаще используйте композицию
  • наследование добавляйте, когда действительно есть “является разновидностью” (Dog является Animal)
  • Мини‑проект: менеджер задач с сохранением в JSON

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

  • ООП: классы Task и TaskManager
  • коллекции: список задач
  • условия и циклы: обработка команд
  • функции и модули: структура и переиспользование
  • ошибки: защита от неверного ввода
  • файлы и JSON: сохранение списка задач между запусками
  • !Показывает, где в проекте пользовательский ввод, где логика, где файл

    Требования к программе

    Поддерживаем команды:

  • add <текст> — добавить задачу
  • list — показать задачи
  • done <id> — отметить выполненной
  • remove <id> — удалить
  • save — сохранить в файл
  • exit — выйти (с предложением сохранить)
  • id — это номер задачи в списке, начиная с 1.

    Реализация в одном файле

    Создайте файл task_app.py:

    Что здесь важно с точки зрения ООП

  • Task хранит данные одной задачи (title, done) и знает, как себя менять (mark_done) и как превращаться в словарь (to_dict).
  • TaskManager отвечает за коллекцию задач и операции над ней (add, remove, mark_done).
  • Взаимодействие с пользователем (команды, input, print) живёт в main, а не внутри классов. Это делает код проще и чище.
  • Что здесь важно с точки зрения предыдущих тем

  • JSON: задачи сохраняются как список словарей, потому что JSON не умеет хранить объекты напрямую.
  • Обработка ошибок: неверный id, пустое название, испорченный файл.
  • pathlib: путь к файлу задаётся через Path, а чтение/запись делаются удобными методами.
  • Справка по модулям:

  • Модуль json
  • Модуль pathlib
  • Итоги

    Теперь вы понимаете базовые элементы ООП в Python:

  • что такое класс и объект
  • как работают атрибуты и методы
  • зачем нужен self и что делает __init__
  • как применять инкапсуляцию на практике
  • как строить программу через композицию (менеджер содержит задачи)
  • И главное: вы собрали мини‑проект, который сохраняет данные в JSON и использует почти все ключевые темы курса вместе.