Python с нуля: понятный старт для новичков

Курс для тех, кто «вообще не понимает», с простыми объяснениями и пошаговой практикой. Разберём основы синтаксиса, работу с данными, условия и циклы, функции, а также базовые навыки работы с файлами и ошибками.

1. Подготовка: установка Python, редактор, запуск программ

Подготовка: установка Python, редактор, запуск программ

Python — это язык программирования, на котором можно писать простые и сложные программы: от маленьких скриптов до веб‑сервисов и анализа данных.

В этой статье ты настроишь рабочее место:

  • установишь Python
  • выберешь редактор кода
  • запустишь первую программу
  • !Короткая схема пути от установки до первого запуска программы

    Что такое Python и как он запускает код

    Python — это программа‑интерпретатор. Это значит:

  • ты пишешь код в файле
  • интерпретатор читает этот файл и выполняет команды по порядку
  • Файлы с кодом Python обычно имеют расширение *.py.

    Что нужно установить

    Тебе понадобятся две вещи:

  • Python (сам язык + интерпретатор)
  • редактор кода (программа, где удобно писать код)
  • Установка Python

    Windows

  • Открой официальный сайт Python: Python Downloads
  • Скачай установщик для Windows (кнопка Download Python ...).
  • Запусти установщик.
  • На первом экране установщика обязательно поставь галочку Add Python to PATH.
  • PATH — это настройка системы, которая позволяет запускать команду python из терминала.
  • Нажми Install Now.
  • macOS

  • Открой: Python Downloads
  • Скачай установщик для macOS.
  • Установи Python, следуя шагам установщика.
  • На macOS часто бывает так, что в терминале нужно использовать команду python3, а не python — это нормально, ниже покажу как проверить.

    Linux (Ubuntu и похожие)

    Во многих дистрибутивах Python уже установлен. Проверим это в разделе ниже.

    Если Python не установлен, обычно помогает установка через менеджер пакетов (пример для Ubuntu):

    Если ты не уверен(а), какой Linux у тебя и как ставить пакеты — пропусти установку и сначала попробуй проверку версии.

    Проверка: Python установился или нет

    Теперь проверим, что система видит Python.

    Как открыть терминал

  • Windows: нажми Win + R, введи cmd, нажми Enter
  • macOS: открой приложение Terminal (через Spotlight)
  • Linux: обычно Ctrl + Alt + T
  • Команды для проверки

    Попробуй по очереди:

    Если не сработало, попробуй:

    В ответ ты увидишь версию, например Python 3.12.1. Это означает, что всё хорошо.

    Частые проблемы

    #### Windows: сообщение python не является внутренней или внешней командой

    Это значит, что Python не добавился в PATH.

    Варианты решения:

  • Переустановить Python и на первом шаге поставить галочку Add Python to PATH.
  • Либо настроить PATH вручную (для новичка обычно проще переустановка).
  • #### macOS/Linux: команда python не работает, но python3 работает

    Это нормально: просто используй python3 для запуска программ.

    Выбор редактора кода

    Редактор кода — это программа, где удобно:

  • писать код (подсказки, подсветка)
  • сохранять файлы
  • запускать программы
  • Рекомендуемый вариант для новичка: Visual Studio Code

    VS Code — бесплатный и удобный редактор.

  • Скачай и установи: Visual Studio Code
  • Открой VS Code
  • Установи расширение для Python:
  • открой вкладку Extensions
  • найди Python (от Microsoft)
  • нажми Install
  • Альтернативы

  • PyCharm Community (тоже бесплатный, более тяжёлый, но мощный): PyCharm Download
  • IDLE (идёт вместе с Python, очень простой, но на старте может быть достаточно)
  • Для этого курса дальше я буду ориентироваться на VS Code и запуск через терминал.

    Пишем первую программу

    Создай папку для учебных проектов, например python_course.

    Шаги

  • Открой VS Code.
  • Открой папку (меню File → Open Folder).
  • Создай файл hello.py.
  • Вставь код:
  • print() — команда, которая выводит текст на экран.

    Запуск программы

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

    Запуск через терминал (самый универсальный способ)

  • Открой терминал.
  • Перейди в папку, где лежит файл hello.py.
  • Если ты не знаешь, как перейти в папку, сделай так:

  • В VS Code нажми правой кнопкой по файлу hello.py.
  • Выбери вариант вроде Copy Path (скопировать путь).
  • В терминале используй команду cd, чтобы перейти в папку.
  • Пример (путь у тебя будет другой):

    Теперь запусти:

    Если у тебя macOS/Linux и работает только python3, запускай так:

    После запуска ты должен(на) увидеть:

    Запуск из VS Code

    Обычно в VS Code можно запустить файл кнопкой Run.

    Если VS Code спрашивает, какой интерпретатор выбрать (Python Interpreter), выбери тот, где написано Python 3....

    Важно про файлы и ошибки

    Сохраняй файл перед запуском

    Если ты изменил(а) код и сразу запускаешь, но ничего не меняется — скорее всего файл не сохранён. Сохраняй Ctrl + S (Windows/Linux) или Cmd + S (macOS).

    Ошибки — это нормально

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

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

    2. Переменные и типы данных: числа, строки, булевы значения

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

    В прошлой статье ты установил(а) Python, выбрал(а) редактор и запустил(а) первую программу с print().

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

    Мы научимся:

  • сохранять значения в переменные
  • отличать числа от строк
  • работать с булевыми значениями True и False
  • понимать, почему одна и та же команда может вести себя по-разному
  • !Схема показывает идею: имя (переменная) хранит значение определённого типа

    Что такое переменная

    Переменная — это имя, которое указывает на некоторое значение в программе.

    Пример:

    Здесь:

  • age — имя переменной
  • = — операция присваивания (положили значение в переменную)
  • 25 — значение
  • Важно: знак = в Python не означает “равно” как в математике. Он означает “записать значение справа в переменную слева”.

    Зачем нужны переменные

    Переменные помогают:

  • хранить данные (например, возраст, цену, имя)
  • переиспользовать значения много раз
  • делать код понятнее
  • Сравни:

    и

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

    Как создавать переменные

    Самый простой способ — присваивание:

    Можно менять значение переменной:

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

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

    Хорошие имена переменных делают код читаемым. В Python есть правила:

  • можно использовать буквы, цифры и _
  • имя не может начинаться с цифры
  • пробелы запрещены
  • регистр важен: name и Name — разные переменные
  • Примеры хороших имён:

  • user_name
  • total_price
  • is_admin
  • Примеры плохих или ошибочных:

  • 2cats (нельзя начинать с цифры)
  • user name (нельзя пробел)
  • a (не ошибка, но часто непонятно, что внутри)
  • Типы данных: зачем они нужны

    Тип данных — это “вид” значения. От типа зависит, что можно делать с этим значением.

    Например:

  • числа можно складывать как числа
  • строки можно “склеивать” как текст
  • Python сам определяет тип, когда ты присваиваешь значение.

    Чтобы посмотреть тип, есть функция type().

    Официальная справка:

  • Функция type
  • Встроенные типы данных
  • Числа: int и float

    В Python самые базовые числовые типы:

  • int — целые числа: -3, 0, 42
  • float — числа с дробной частью: 3.14, 0.5, -2.0
  • Примеры:

    Проверим типы:

    Обычно ты увидишь:

  • <class 'int'>
  • <class 'float'>
  • Деление и результат

    Обрати внимание:

    Результат будет 5.0, то есть float. Обычное деление / в Python возвращает число с дробной частью (тип float), даже если делится “ровно”.

    Если нужно целочисленное деление, есть оператор //:

    Строки: str

    Строка — это текст. В Python тип строк называется str.

    Строки пишутся в кавычках:

    Одинарные и двойные кавычки работают одинаково, главное — начать и закончить одной и той же кавычкой.

    Склеивание строк

    Строки можно складывать (склеивать):

    Почему "2" + "2" не равно 4

    Сравни:

    Во втором случае это строки, поэтому происходит склеивание текста.

    Булевы значения: bool

    bool — тип данных, который имеет всего два значения:

  • True — истина
  • False — ложь
  • Пример:

    Булевы значения часто используются в условиях (мы подробно разберём это позже), например “если пользователь онлайн — показать статус”.

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

    Иногда данные приходят в одном виде, а нужны в другом. Тогда делают преобразование типов.

    Встроенные функции:

  • int() превращает в целое число
  • float() превращает в число с дробной частью
  • str() превращает в строку
  • bool() превращает в True или False
  • Справка:

  • Функция int
  • Функция float
  • Функция str
  • Функция bool
  • Примеры:

    Частая ошибка: нельзя сложить строку и число

    Так нельзя:

    Правильно так:

    или так (мы уже использовали этот способ выше):

    Мини-итог

    Теперь ты знаешь базу:

  • переменная хранит значение: x = 10
  • у значения есть тип: int, float, str, bool
  • тип влияет на поведение операций (например, + для чисел и для строк)
  • тип можно проверить type() и иногда нужно преобразовать int(), str() и так далее
  • В следующей теме мы начнём собирать эти элементы в полезные программы: будем принимать данные, делать вычисления и аккуратно выводить результат.

    3. Ввод-вывод и операции: print, input, арифметика, форматирование

    Ввод-вывод и операции: print, input, арифметика, форматирование

    В прошлых темах ты установил(а) Python, научился(ась) запускать программы и познакомился(ась) с переменными и типами данных (int, float, str, bool).

    Теперь соберём это в настоящие маленькие программы: будем

  • получать данные от пользователя
  • делать вычисления
  • аккуратно показывать результат
  • !Схема показывает типичный путь: ввод → обработка → вывод

    Вывод на экран с print()

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

    Простейший пример:

    Вывод нескольких значений

    print() умеет печатать несколько значений сразу через запятую:

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

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

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

  • sep задаёт разделитель между аргументами
  • end задаёт окончание строки (по умолчанию это перевод строки)
  • Пример с sep:

    Пример с end:

    Справка по print(): Функция print.

    Ввод с клавиатуры с input()

    input() позволяет прочитать текст, который введёт пользователь.

    Пример:

    Очень важное правило

    input() всегда возвращает строку типа str, даже если пользователь ввёл число.

    Пример:

    Ты увидишь <class 'str'>.

    Справка по input(): Функция input.

    Преобразование ввода в числа

    Если ты хочешь считать, введённое нужно превратить в число:

  • int() для целых чисел
  • float() для дробных
  • Пример с int():

    Пример с float():

    Частая ошибка: ValueError

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

    Пока что правило простое: вводи числа там, где программа ожидает числа.

    Арифметика в Python

    Вот самые нужные операторы для чисел:

    | Оператор | Что делает | Пример | |---|---|---| | + | сложение | 2 + 35 | | - | вычитание | 10 - 46 | | | умножение | 3 412 | | / | деление (результат часто float) | 5 / 22.5 | | // | целочисленное деление | 5 // 22 | | % | остаток от деления | 5 % 21 | | | степень | 2 38 |

    Порядок вычислений

    Как и в обычной математике:

  • сначала **
  • потом *, /, //, %
  • потом +, -
  • Если нужно изменить порядок, используй скобки ():

    Собираем мини-программы

    Программа: сумма двух чисел

    Здесь важная логика такая:

  • сначала читаем ввод (input() даёт str)
  • потом превращаем в числа (float())
  • потом складываем
  • потом печатаем
  • Программа: площадь прямоугольника

    Обрати внимание: можно делать float(input(...)) в одну строку.

    Форматирование вывода

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

    Способ с запятыми в print()

    Это простой и безопасный способ для новичка.

    Склеивание строк через +

    Так тоже можно, но нужно, чтобы обе части были строками:

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

    f-строки

    f-строка позволяет удобно вставлять переменные прямо внутрь текста.

    Пример:

    Внутри фигурных скобок {...} можно писать не только переменные, но и выражения:

    Справка по f-строкам: f-строки в документации Python.

    Округление для красивого вывода

    Часто при делении получаются длинные дроби. Можно округлить с помощью round():

    Здесь 2 означает “оставить 2 знака после запятой”.

    Мини-итог

    Теперь у тебя есть базовый набор для почти любой первой программы:

  • input() читает ввод пользователя и возвращает str
  • int() и float() превращают ввод в числа для вычислений
  • арифметические операторы (+, -, , /, //, %, *) делают расчёты
  • print() выводит результат
  • форматировать вывод можно через запятые в print(), через str() и через f-строки
  • 4. Условия и циклы: if/elif/else, for, while, break/continue

    Условия и циклы: if/elif/else, for, while, break/continue

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

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

  • Условия (if/elif/else) позволяют выбрать, какой код выполнить.
  • Циклы (for, while) позволяют повторять код несколько раз.
  • !Схема показывает разницу: условие выбирает ветку, цикл повторяет действия

    Булевы значения и сравнения

    Условия работают на основе булевых значений: True или False. Такие значения получаются из сравнений.

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

    | Оператор | Смысл | Пример | Результат | |---|---|---|---| | == | равно | 5 == 5 | True | | != | не равно | 5 != 3 | True | | > | больше | 7 > 10 | False | | < | меньше | 2 < 4 | True | | >= | больше или равно | 5 >= 5 | True | | <= | меньше или равно | 3 <= 2 | False |

    Важно: = — это присваивание, а для сравнения используется ==.

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

    Иногда нужно проверить несколько условий.

  • andи (оба условия должны быть True)
  • orили (достаточно, чтобы хотя бы одно было True)
  • notне (переворачивает TrueFalse)
  • Примеры:

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

    Условие позволяет выполнить код только если выражение истинно.

    Базовый if

    Здесь важно следующее:

  • после условия ставится двоеточие :
  • строки внутри условия должны быть с отступом (обычно 4 пробела)
  • отступы в Python — это часть синтаксиса
  • Ветка else

    else выполняется, если условие в if оказалось False.

    Несколько вариантов: elif

    Если нужно выбрать один вариант из нескольких, используется elif.

    Python проверяет условия сверху вниз и выполняет первую подходящую ветку.

    Частая ошибка новичка: input() и числа

    input() возвращает строку, поэтому сравнивать её с числом напрямую нельзя.

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

    Правильно:

    Цикл for: повторяем заданное количество раз

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

    range(): самый частый помощник for

    range(n) даёт последовательность чисел от 0 до n - 1.

    Результат будет таким:

    Если хочется начать не с нуля:

    Это выведет числа 1 2 3 4 5.

    Цикл for по строке

    Строка — это последовательность символов, по ней тоже можно пройти циклом.

    Цикл while: повторяем, пока условие истинно

    while удобен, когда заранее неизвестно, сколько повторений будет. Цикл продолжается, пока условие True.

    Пример: считаем от 1 до 5 с помощью счётчика.

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

    while и ввод: просим повторять, пока не введут правильно

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

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

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

    Пример: ищем число, которое делится на 7.

    Как только условие выполнится, break остановит цикл.

    continue: пропускаем шаг

    Пример: выводим числа от 1 до 10, но пропускаем чётные.

    Как выбрать: if, for или while

  • if/elif/else — когда нужно выбрать действие в зависимости от условия
  • for — когда повторений заранее понятное количество (часто вместе с range())
  • while — когда повторять нужно до события (например, пока пользователь не введёт правильное значение)
  • Мини-итог

    Теперь ты умеешь строить программы, которые ведут себя по-разному и повторяют действия:

  • сравнивать значения и получать True/False
  • писать ветвления if/elif/else
  • повторять действия через for и while
  • управлять циклом с помощью break и continue
  • Официальная справка (полезно, когда захочется углубиться):

  • Учебник Python: if, for, while, break/continue
  • Документация range()
  • 5. Коллекции: списки, кортежи, словари, множества и работа с ними

    Коллекции: списки, кортежи, словари, множества и работа с ними

    До этого ты научился(ась) писать простые программы: получать ввод через input(), делать вычисления, выводить результат print(), а ещё управлять логикой через if и повторять действия через for и while.

    Теперь добавим важный элемент, без которого почти не бывает реальных программ: коллекции.

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

    !Схема-подсказка: чем отличаются основные коллекции в Python

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

    Коллекции нужны, когда у тебя:

  • несколько значений одного типа, например список оценок
  • набор однотипных объектов, например имена пользователей
  • данные в формате ключ → значение, например имя → возраст
  • необходимость быстро проверять, есть ли элемент в наборе
  • Пример без коллекций быстро становится неудобным:

    Со списком проще:

    Списки: list

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

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

    Доступ по индексу

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

  • первый элемент имеет индекс 0
  • второй — 1
  • последний можно взять индексом -1
  • Если попытаться взять индекс, которого нет, будет ошибка IndexError.

    Изменение элемента

    Список изменяемый, поэтому можно заменить элемент по индексу:

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

    Добавление в конец:

    Добавление сразу нескольких элементов:

    Удаление по значению (удалит первое совпадение):

    Удаление по индексу и получение удалённого элемента:

    Длина списка:

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

    Оператор in даёт True или False, поэтому он отлично дружит с if.

    Перебор списка циклом for

    Если нужен индекс:

    Кортежи: tuple

    Кортеж похож на список, но он неизменяемый.

    Создание кортежа

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

    Кортеж полезен, когда данные должны оставаться как есть:

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

    Но менять нельзя:

    Словари: dict

    Словарь хранит пары ключ → значение.

    Пример: имя пользователя → возраст.

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

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

    Если ключа нет, при обращении user["missing"] будет ошибка KeyError.

    Более безопасный способ — get():

    Изменение и добавление

    Перебор словаря

    Перебор по ключам:

    Перебор пар ключ-значение через items():

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

    in для словаря проверяет ключи:

    Множества: set

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

  • элементы не повторяются
  • порядок не гарантируется
  • Создание множества

    Важно: {} — это пустой словарь, а не множество. Для пустого множества нужно set().

    Уникальность элементов

    Зачем нужен set

    Самые частые задачи для множества:

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

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

    Добавление и удаление

    Безопасное удаление (не упадёт с ошибкой, если элемента нет):

    Преобразования между коллекциями

    Иногда нужно поменять тип коллекции.

    Список из кортежа:

    Список из множества:

    Множество из списка (убрать повторы):

    Как выбрать нужную коллекцию

    | Коллекция | Когда использовать | Можно менять? | Как получать элементы | |---|---|---|---| | list | порядок важен, элементы могут повторяться | да | по индексу | | tuple | порядок важен, но менять нельзя | нет | по индексу | | dict | нужен формат ключ → значение | да | по ключу | | set | важна уникальность и быстрый поиск | да | прямого индекса нет |

    Мини-итог

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

  • list хранит упорядоченные данные и легко изменяется
  • tuple похож на список, но защищён от изменений
  • dict хранит пары ключ → значение и помогает организовать данные
  • set хранит только уникальные элементы и удобен для проверки принадлежности
  • Полезные разделы документации Python:

  • Учебник Python: структуры данных
  • Встроенные типы: list
  • Встроенные типы: tuple
  • Встроенные типы: dict
  • Встроенные типы: set
  • 6. Функции и модули: def, параметры, return, импорт

    Функции и модули: def, параметры, return, импорт

    До этого мы писали код “сверху вниз”: input() → вычисления → print(), добавляли if и циклы, работали со списками и словарями.

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

  • Функция помогает вынести повторяющийся кусок кода в отдельный “кирпичик” с именем.
  • Модуль помогает хранить код в отдельных файлах и подключать его через импорт.
  • !Схема показывает, что основная программа вызывает функцию, а функция возвращает результат обратно.

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

    Функции решают три частые проблемы новичка.

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

    Как создать функцию: def

    Функция объявляется словом def.

    Здесь:

  • def означает “создать функцию”.
  • say_hello это имя функции.
  • () место для параметров (пока пусто).
  • : и отступы означают “внутри функции”.
  • Чтобы функция выполнилась, её нужно вызвать:

    Параметры: как передавать данные в функцию

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

    Пример: функция приветствия по имени.

    name внутри функции это переменная, которая получает значение при вызове.

    Несколько параметров

    Аргументы: позиционные и именованные

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

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

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

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

    Если второй аргумент не передали, берётся значение по умолчанию.

    return: как функция возвращает результат

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

    Пример: посчитать и вернуть площадь.

    Важные правила return.

  • return останавливает выполнение функции.
  • Строка после return внутри функции не выполнится.

  • Если в функции нет return, она всё равно возвращает специальное значение None.
  • None можно понимать как “нет значения”.

    Ранний return

    Часто удобно выйти из функции раньше, если условие не подходит.

    Локальные переменные: что “видно” внутри функции

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

    Параметры функции тоже являются локальными переменными.

    Это полезно: функция меньше “портит” другие части программы и становится предсказуемее.

    Модули: как подключать готовый код через import

    Модуль в Python это файл с кодом *.py, который можно подключить в другой программе.

    Есть два главных источника модулей.

  • Стандартная библиотека Python (идёт вместе с Python).
  • Твои модули (файлы в твоём проекте).
  • Импорт модуля целиком

    Пример со стандартным модулем math.

    Здесь math.sqrt читается как “в модуле math возьми функцию sqrt”.

    Импорт конкретных имён: from ... import ...

    Этот способ короче, но новичку важно помнить: теперь sqrt “пришёл” в текущий файл и используется без math..

    Псевдоним: as

    Иногда модуль называют короче.

    randint(1, 6) возвращает случайное целое число от 1 до 6 включительно.

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

    Допустим, у тебя в папке проекта два файла.

  • main.py
  • utils.py
  • Содержимое utils.py:

    Содержимое main.py:

    Важно: оба файла должны лежать в одной папке, и запускать нужно main.py.

    Мини-итог

    Теперь у тебя есть два мощных инструмента для “взрослого” кода.

  • Функции создаются через def, принимают параметры и могут возвращать результат через return.
  • Если return не написан, функция возвращает None.
  • Переменные внутри функции обычно локальные и не видны снаружи.
  • Модули подключаются через import и помогают переиспользовать код из стандартной библиотеки и из твоих файлов.
  • Полезные ссылки на документацию Python.

  • Встроенные функции: return
  • Определение функций
  • Модули
  • Модуль math
  • Модуль random
  • 7. Практика: файлы, исключения и мини-проекты для закрепления

    Практика: файлы, исключения и мини-проекты для закрепления

    Раньше ты уже научился(ась) основам Python: переменным и типам, input() и print(), условиям и циклам, коллекциям (list, dict, set) и функциям (def, return), а также импорту модулей.

    Теперь сделаем шаг к реальным программам: почти любая полезная программа

  • читает данные из файла и сохраняет результат в файл
  • умеет переживать ошибки (не падать сразу)
  • собирается из небольших функций
  • В этой статье ты разберёшь:

  • как читать и записывать файлы
  • как обрабатывать ошибки через try/except
  • как собирать мини-проекты из уже знакомых блоков
  • !Схема жизненного цикла работы с файлом: открыть → прочитать или записать → закрыть

    Файлы: зачем они нужны

    Пока что твои программы работали только "в момент запуска": ввёл данные, получил результат, закрыл терминал, и всё пропало.

    Файлы дают программе память.

  • можно хранить список дел
  • можно копить статистику
  • можно сохранять результаты вычислений
  • Открытие файла: open() и режимы

    Файлы открывают функцией open().

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

    Здесь:

  • "data.txt" — имя файла (или путь)
  • "r" — режим открытия (read, чтение)
  • encoding="utf-8" — кодировка (чтобы нормально читать русский текст)
  • Основные режимы

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

    Если работаешь с текстом, чаще всего достаточно "r", "w", "a".

    Почему важно закрывать файл

    Если файл не закрыть:

  • данные могут не успеть записаться
  • файл может остаться "занятым" (особенно на Windows)
  • Поэтому почти всегда используют with.

    Правильный способ: with open(...) as f

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

    Чтение целиком:

    Запись:

    Важно:

  • write() записывает строку
  • перевод строки — это "\n"
  • Построчное чтение

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

    Вариант 1: readlines()

    lines будет списком строк.

    Вариант 2: цикл for по файлу (часто самый удобный)

    Если не хочется, чтобы печатались лишние пустые строки (из-за "\n" в конце), можно убрать пробелы по краям:

    Исключения: что это такое и зачем нужно

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

    Примеры:

  • файл не найден (FileNotFoundError)
  • ввели не число, а текст, а мы делаем int(...) (ValueError)
  • деление на ноль (ZeroDivisionError)
  • Если исключение не обработать, программа остановится и покажет сообщение об ошибке. Это нормально на этапе обучения, но в пользовательских программах лучше обрабатывать ожидаемые ошибки.

    !Схема работы try/except: обычный путь и путь при ошибке

    try/except: базовый шаблон

    Самое частое применение: безопасно превратить ввод в число.

    Что здесь важно:

  • внутри try пишем код, который может упасть
  • в except описываем, что делать, если произошла конкретная ошибка
  • Несколько except

    Иногда возможны разные ошибки.

    except Exception as e: показать текст ошибки

    Так можно сделать сообщение более информативным:

    Такой стиль полезен в обучении и отладке.

    else и finally

  • else выполняется, если ошибки не было
  • finally выполняется в любом случае
  • На старте достаточно понимать главное: try/except защищает программу от падения там, где ты ожидаешь ошибку.

    Мини-практика: читаем, обрабатываем, сохраняем

    Ниже три мини-сценария, которые собираются из уже знакомых тем: коллекций, циклов, условий, функций, работы с файлами и исключениями.

    Мини-проект: список дел в файле

    Идея:

  • дела хранятся в todo.txt, по одному делу в строке
  • программа умеет показать дела и добавить новое
  • Ключевой навык: "a" (добавление), построчное чтение, strip().

    Пример функций (скелет):

    Обрати внимание:

  • если файла ещё нет, это не проблема: мы ловим FileNotFoundError и считаем, что список пуст
  • для аккуратной нумерации можно использовать enumerate()
  • Справка:

  • open()
  • Исключение FileNotFoundError
  • Мини-проект: подсчёт слов в тексте

    Идея:

  • читаем файл
  • разбиваем текст на слова
  • считаем количество слов и самые частые
  • Ключевой навык: строки, списки, словарь, цикл.

    Скелет:

    Почему тут удобно:

  • split() превращает строку в список "кусочков"
  • Counter умеет быстро считать частоты
  • Справка:

  • collections.Counter
  • Мини-проект: простой учёт расходов с сохранением в JSON

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

    Идея:

  • расходы — это список словарей, например {"title": "кофе", "amount": 199}
  • сохраняем всё в expenses.json
  • Ключевой навык: list + dict, функции, чтение и запись, обработка отсутствующего файла.

    Что тут важно:

  • json.load(f) читает JSON из файла и превращает в питоновские объекты
  • json.dump(...) записывает питоновские объекты в JSON
  • ensure_ascii=False нужен, чтобы русский текст сохранялся нормально
  • Справка:

  • Модуль json
  • Типичные ошибки и как их чинить

  • FileNotFoundError при чтении
  • - проверь имя файла и папку запуска - добавь обработку через try/except FileNotFoundError
  • ValueError при int(input(...))
  • - значит ввели не число - обработай через try/except ValueError
  • Файл перезаписывается, хотя хотел(а) дописать
  • - используй "a", а не "w"
  • Странные символы вместо русского текста
  • - укажи encoding="utf-8" при чтении и записи

    Мини-итог

    Теперь ты умеешь делать то, что отличает учебные примеры от практики:

  • читать и писать текстовые файлы через open()
  • выбирать режимы "r", "w", "a"
  • использовать with open(...) as f, чтобы файл закрывался автоматически
  • ловить ожидаемые ошибки через try/except (ValueError, FileNotFoundError, ZeroDivisionError)
  • собирать небольшие программы, где данные сохраняются между запусками
  • Дальше твой рост будет идти в основном через практику: бери одну простую идею (например, "заметки" или "список покупок"), добавляй сохранение в файл и обработку ошибок, а затем постепенно усложняй.