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

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

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

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

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

Что такое Python

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

Важно различать:

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

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

    Обычно вы будете делать так:

  • Создаёте папку проекта.
  • Открываете проект в редакторе кода.
  • Создаёте виртуальное окружение (чтобы зависимости проекта не мешали другим проектам).
  • Пишете код в файле .py.
  • Запускаете файл через Python.
  • !Схема показывает путь от написания кода до запуска и получения результата

    Установка Python

    Скачивайте Python только из официального источника:

  • Python.org — Downloads
  • Windows

  • Перейдите на Python.org — Downloads и скачайте установщик для Windows.
  • Запустите установщик.
  • Обязательно отметьте галочку Add Python to PATH.
  • Нажмите Install Now.
  • Проверка установки:

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

    > На Windows часто удобнее использовать py (Python Launcher), он ставится вместе с Python.

    macOS

    Самый надёжный путь — установить Python с официального сайта:

  • Скачайте установщик с Python.org — Downloads.
  • Установите Python.
  • Проверка установки:

    Linux

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

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

    Терминал и базовые команды

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

    Полезные команды:

  • Проверка версии Python: python --version или python3 --version
  • Запуск файла: python main.py или python3 main.py
  • Проверка pip: pip --version или pip3 --version
  • Режим интерактивной работы (REPL)

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

    Запуск:

    или на macOS/Linux:

    Пример:

    Выход:

  • Windows: exit() или сочетание клавиш Ctrl + Z, затем Enter
  • macOS/Linux: exit() или Ctrl + D
  • Интерактивный режим удобен для быстрых проверок, но программы курса мы будем писать в файлах.

    Редактор кода

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

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

  • Visual Studio Code: бесплатный и популярный редактор
  • - Visual Studio Code - Python extension for Visual Studio Code
  • PyCharm Community Edition: бесплатная версия IDE от JetBrains
  • - PyCharm

    На старте достаточно VS Code.

    Папка проекта и первый файл

    Создайте папку проекта, например python-basics.

    Внутри создайте файл main.py:

    Запуск из терминала (в папке проекта):

    Если у вас macOS/Linux и команда python не работает:

    Виртуальное окружение (venv)

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

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

  • venv — создание виртуальных окружений
  • Создание venv

    В папке проекта выполните:

    На macOS/Linux иногда нужно так:

    Активация venv

    Windows (PowerShell):

    Windows (cmd):

    macOS/Linux:

    После активации в начале строки терминала обычно появляется имя окружения, например (.venv).

    Деактивация venv

    !Иллюстрация показывает, где лежит код и где находится виртуальное окружение

    pip и установка пакетов

    pip — менеджер пакетов Python. С его помощью вы устанавливаете сторонние библиотеки.

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

  • pip — документация
  • Пример установки пакета (в активированном venv):

    Проверка установленных пакетов:

    Файл requirements.txt

    Чтобы зафиксировать зависимости проекта, обычно создают файл requirements.txt.

    Сохранить текущие зависимости:

    Установить зависимости из файла:

    На первом занятии вам может быть достаточно venv и pip install .... Подробно про пакеты и зависимости мы ещё поговорим, когда начнём делать проекты.

    Частые проблемы и решения

    Команда python не найдена

    Возможные причины и действия:

  • Python не установлен.
  • Python установлен, но не добавлен в PATH (актуально для Windows).
  • На macOS/Linux команда может быть python3, а не python.
  • В VS Code не тот интерпретатор

    Если VS Code запускает не тот Python:

  • Откройте палитру команд.
  • Найдите команду выбора интерпретатора Python.
  • Выберите интерпретатор внутри .venv.
  • Справка по Python в VS Code:

  • VS Code Python — документация
  • Ошибка прав при активации venv в PowerShell

    Иногда PowerShell блокирует выполнение скриптов активации. В таком случае можно активировать окружение через cmd или настроить политику выполнения. Если вы не уверены, используйте активацию через cmd.

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

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

  • python --version
  • запуск файла python main.py
  • создание и активация .venv
  • установка пакета через pip
  • 2. Переменные, типы данных и преобразования

    Переменные, типы данных и преобразования

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

    Переменные

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

    Пример:

    Здесь:

  • name — имя переменной
  • "Аня" — значение (строка)
  • age — имя переменной
  • 17 — значение (целое число)
  • Python читает присваивание справа налево: сначала вычисляет значение справа, затем “привязывает” к нему имя слева.

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

    Правила именования

  • Имена чувствительны к регистру: age и Age — разные переменные.
  • Имя может содержать буквы, цифры и _, но не может начинаться с цифры.
  • Не используйте имена встроенных функций, например print, type, input.
  • Принятый стиль в Python: snake_case, например total_price.
  • Типы данных

    Тип данных определяет:

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

    Как узнать тип значения

    Используйте функцию type():

    Основные типы в начале курса

    int

    int — целые числа.

    float

    float — числа с дробной частью.

    Особенность: float хранится приближённо, поэтому иногда возможны эффекты округления.

    str

    str — строки (текст).

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

  • склеивание (конкатенация):
  • повторение:
  • bool

    bool — логический тип: True или False.

    Он часто появляется в сравнениях:

    NoneType (значение None)

    None означает “нет значения” или “значение отсутствует”.

    None полезен как “заглушка”, когда значение появится позже.

    Операции с числами

    Примеры арифметики:

    Важно: оператор / всегда даёт float, даже если делится без остатка.

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

    Преобразование типа — это превращение значения одного типа в значение другого типа.

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

  • int()
  • float()
  • str()
  • bool()
  • Документация по встроенным функциям: Встроенные функции Python.

    str → int / float

    Если строка не похожа на число, будет ошибка ValueError:

    int / float → str

    Чтобы склеивать число со строкой, нужно преобразовать число в строку (или использовать форматирование):

    bool()

    bool() превращает значение в True или False.

    Неявные преобразования (автоматически)

    Иногда Python сам “поднимает” тип, чтобы операция имела смысл.

    Пример: если сложить int и float, результат будет float:

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

    Ввод данных: input() всегда возвращает строку

    Функция input() читает текст, который ввёл пользователь, и возвращает значение типа str.

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

    Удобный вывод: f-строки

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

    Документация: Formatted string literals (f-strings).

    Мини-пример: небольшая программа

    Создайте файл main.py и запустите его через терминал, как вы делали в прошлой теме.

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

    Что важно запомнить

  • Переменная — это имя, которое ссылается на значение.
  • Тип данных определяет, какие операции возможны.
  • input() возвращает строку, даже если ввели цифры.
  • Преобразования типов делайте явно: int(), float(), str(), bool().
  • Для удобного вывода используйте f-строки.
  • 3. Операторы, выражения и ввод-вывод

    Операторы, выражения и ввод-вывод

    В прошлой теме вы познакомились с переменными и типами данных, узнали про input(), type() и преобразования через int(), float(), str(). Теперь разберём, как строятся выражения из значений и операторов, а также как аккуратно делать ввод-вывод в консоль.

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

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

    Примеры выражений:

    Официальная справка по выражениям: Python Language Reference — Expressions.

    Арифметические операторы

    Арифметика работает с числами (int, float).

    | Оператор | Пример | Что делает | |---|---|---| | + | 3 + 2 | сложение | | - | 3 - 2 | вычитание | | | 3 2 | умножение | | / | 3 / 2 | деление (результат обычно float) | | // | 3 // 2 | целочисленное деление | | % | 3 % 2 | остаток от деления | | | 3 2 | степень |

    Пример:

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

    Операторы сравнения возвращают bool (True или False).

    | Оператор | Пример | Смысл | |---|---|---| | == | x == 10 | равно | | != | x != 10 | не равно | | > | x > 10 | больше | | < | x < 10 | меньше | | >= | x >= 10 | больше или равно | | <= | x <= 10 | меньше или равно |

    Пример:

    Важно различать = и ==:

  • = — присваивание (положить значение в переменную)
  • == — сравнение (получить True или False)
  • Логические операторы: and, or, not

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

    | Оператор | Пример | Когда True | |---|---|---| | and | a and b | когда и a, и b истинны | | or | a or b | когда хотя бы одно истинно | | not | not a | когда a ложно |

    Пример:

    Короткое замыкание

    В Python есть короткое замыкание:

  • в a and b, если a ложно, b не вычисляется
  • в a or b, если a истинно, b не вычисляется
  • Это полезно, чтобы не делать лишнюю работу и не получать ошибки.

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

    Обычное присваивание:

    Сокращённые формы (часто говорят присваивание с операцией):

    | Запись | Эквивалент | |---|---| | x += 1 | x = x + 1 | | x -= 1 | x = x - 1 | | x = 2 | x = x 2 | | x /= 2 | x = x / 2 | | x //= 2 | x = x // 2 | | x %= 2 | x = x % 2 | | x = 2 | x = x 2 |

    Пример:

    Приоритет операторов и скобки

    Иногда одно выражение содержит много операторов. Тогда Python применяет приоритет.

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

  • сначала выражения в скобках ( )
  • затем **
  • затем *, /, //, %
  • затем +, -
  • затем сравнения (>, == и т. п.)
  • затем not, потом and, потом or
  • Если сомневаетесь, ставьте скобки: так код легче читать и проще отлаживать.

    Пример:

    Ввод: input()

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

    Если вы ждёте число, делайте преобразование:

    Если пользователь введёт не число, произойдёт ошибка ValueError. Обрабатывать такие ошибки вы научитесь позже.

    Документация по встроенным функциям: Python docs — Built-in Functions.

    Вывод: print()

    print() выводит данные в консоль.

    Несколько значений, sep и end

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

    Вы можете управлять разделителем через параметр sep:

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

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

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

    Строки можно складывать через +, но числа придётся превращать в строки:

    f-строки

    Самый удобный способ подставлять значения в текст — f-строки:

    Внутри {...} можно писать выражения:

    Документация: Python reference — Formatted string literals (f-strings).

    Мини-программа: ввод → преобразование → вычисление → вывод

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

    Пример программы, которая считает стоимость покупки:

    Что важно запомнить

  • Выражение вычисляется в значение, оператор выполняет действие.
  • Сравнения дают bool.
  • and, or, not работают с логикой и используют короткое замыкание.
  • input() всегда возвращает str, числа нужно получать через int() или float().
  • print() поддерживает параметры sep и end.
  • Для удобного вывода используйте f-строки.
  • 4. Условия и циклы: управление потоком

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

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

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

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

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

    Пример блока:

    Если отступы нарушены, вы получите ошибку IndentationError.

    !Базовая схема ветвления if/else

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

    Условие в Python записывается через if. После условия ставится двоеточие : и идёт блок кода с отступом.

    if

    Если выражение age >= 18 вычислилось в True, блок выполнится. Если в False, блок пропустится.

    else

    else выполняется, когда условие if ложно.

    elif

    elif позволяет проверять несколько условий по очереди.

    Python проверяет условия сверху вниз и выполняет первый подошедший блок.

    Справка в документации:

  • Инструкция if
  • Условия строятся на выражениях и bool

    Вы уже знаете операторы сравнения (>, <, ==, !=) и логические операторы (and, or, not). Именно они чаще всего и формируют условия.

    Примеры:

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

    Истинность значений: что считается True и False

    В if можно писать не только сравнение, но и просто значение. Тогда Python проверит истинность значения.

    Ложными считаются:

  • 0 и 0.0
  • пустая строка ""
  • None
  • Почти всё остальное считается истинным.

    Пример:

    Справка в документации:

  • Проверка истинности значений
  • Частые ошибки в условиях

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

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

    Циклы нужны, когда вы хотите повторить один и тот же код много раз.

    В Python базовые циклы:

  • while повторяет, пока условие истинно
  • for перебирает элементы последовательности (в начале чаще всего используют range())
  • !Схема работы цикла while

    Цикл while

    while выполняет блок кода, пока условие даёт True.

    Здесь важно, что i += 1 приближает цикл к завершению. Если забыть изменять значение, можно получить бесконечный цикл.

    Типичный сценарий: повторный ввод

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

    Справка в документации:

  • Инструкция while
  • Цикл for и range()

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

    range(n) даёт числа от 0 до n - 1.

    Если нужно начать не с нуля, используйте range(start, stop):

    Если нужен шаг, используйте range(start, stop, step):

    Справка в документации:

  • Функция range
  • break и continue

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

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

    Пример с continue:

    Справка в документации:

  • Инструкции break и continue
  • Мини-пример: простая консольная программа

    Пример объединяет ввод, условия и цикл. Программа просит число и выводит сумму чисел от 1 до введённого значения.

    Здесь:

  • if проверяет корректность ввода
  • for повторяет сложение нужное число раз
  • total += i использует сокращённое присваивание, которое вы уже видели
  • Что важно запомнить

  • if, elif, else управляют ветвлением, а блоки задаются отступами.
  • Условие должно вычисляться в True или False.
  • while повторяет код, пока условие истинно, и легко становится бесконечным, если не менять данные.
  • for часто используют с range() для повторения действий.
  • break завершает цикл, continue пропускает итерацию.
  • 5. Функции: параметры, возврат, область видимости

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

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

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

  • не дублировать один и тот же код
  • разбивать программу на понятные части
  • легче тестировать и исправлять ошибки
  • Официальная справка: Defining Functions — Python Tutorial.

    Как объявлять и вызывать функции

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

    Важно:

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

    Термины:

  • параметры — переменные в объявлении функции
  • аргументы — конкретные значения, которые вы передаёте при вызове
  • Пример:

    Здесь name — параметр, а строки "Аня", "Игорь" — аргументы.

    Позиционные аргументы

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

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

    Можно явно указать, какой параметр какое значение получает.

    Именованные аргументы полезны, когда:

  • параметров много
  • хочется повысить читаемость
  • Значения по умолчанию

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

    Правило чтения вызова:

  • если аргумент передан, он заменяет значение по умолчанию
  • если не передан, используется значение по умолчанию
  • Возврат значения: return

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

    Это разные вещи.

    Функция, которая возвращает значение

    Теперь результат сложения можно:

  • сохранить в переменную
  • использовать в выражении
  • передать в другую функцию
  • Ранний выход из функции

    return завершает выполнение функции сразу.

    Что возвращает функция без return

    Если return не указан, функция возвращает None.

    None — это специальное значение “ничего” или “значение отсутствует”, с ним вы уже встречались.

    Область видимости: где “живут” переменные

    Область видимости определяет, откуда доступна переменная по имени.

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

  • локальная — внутри функции
  • глобальная — на уровне файла (вне функций)
  • Официальная справка: Naming and binding — Python Reference.

    !Схема показывает разницу между глобальной и локальной областями видимости

    Локальные переменные

    Переменные, созданные внутри функции, по умолчанию локальные: вне функции их “не существует” по имени.

    Глобальные переменные (и осторожность с ними)

    Глобальная переменная объявляется вне функций.

    Это работает, но важно:

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

    Почему присваивание внутри функции создаёт локальную переменную

    Если внутри функции написать x = ..., Python считает x локальной переменной этой функции.

    Это не “перезаписало” глобальную x, а создало локальную x.

    global: как изменить глобальную переменную

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

    Используйте global редко и осознанно. В большинстве учебных и реальных задач лучше возвращать новое значение через return.

    Частые ошибки при работе с функциями

  • Путать print() и return.
  • Забывать вызвать функцию (написали def, но нигде не сделали name()).
  • Делать слишком “большую” функцию, в которой намешано всё сразу.
  • Ожидать, что переменная внутри функции будет доступна снаружи.
  • Мини-пример: программа с функциями

    Разобьём задачу на функции: одна читает число, другая считает, третья печатает.

    Здесь видно ключевую идею: каждая функция делает одну понятную часть работы.

    Что важно запомнить

  • Функция объявляется через def и выполняется только при вызове.
  • Параметры — в объявлении, аргументы — при вызове.
  • return возвращает значение и завершает функцию.
  • Если return нет, возвращается None.
  • Переменные внутри функции локальные; глобальные доступны, но менять их лучше как можно реже.
  • 6. Коллекции: списки, кортежи, множества, словари

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

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

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

    !Схема помогает быстро сравнить четыре основные коллекции Python

    Что такое коллекция и что важно знать вначале

    Коллекция — это структура данных, которая хранит набор элементов.

    Для старта важны две идеи:

  • Упорядоченность: есть ли у элементов порядок и индексы.
  • Изменяемость: можно ли менять коллекцию после создания.
  • В Python основные коллекции:

    | Тип | Как выглядит | Упорядочено | Можно менять | Уникальность элементов | |---|---|---:|---:|---:| | list | [1, 2, 3] | да | да | нет | | tuple | (1, 2, 3) | да | нет | нет | | set | {1, 2, 3} | нет | да | да | | dict | {"a": 1, "b": 2} | да (порядок добавления) | да | ключи уникальны |

    > Начиная с Python 3.7 словари сохраняют порядок добавления ключей как часть языковой спецификации. Это отражено в документации: Built-in Types — Mapping Types — dict

    Списки: list

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

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

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

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

    Индексация начинается с 0.

    Срез — это получение части списка:

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

    Списки можно менять:

    Частые методы списка

    | Операция | Пример | Что делает | |---|---|---| | Добавить в конец | a.append(x) | добавляет один элемент | | Добавить несколько | a.extend([x, y]) | добавляет элементы из другой коллекции | | Вставить по индексу | a.insert(i, x) | вставляет элемент | | Удалить по значению | a.remove(x) | удаляет первое совпадение | | Удалить по индексу | a.pop() или a.pop(i) | удаляет и возвращает элемент | | Очистить | a.clear() | удаляет всё | | Найти индекс | a.index(x) | индекс первого совпадения | | Посчитать | a.count(x) | сколько раз встречается | | Отсортировать | a.sort() | сортирует список на месте |

    Пример разницы append и extend:

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

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

    Кортежи: tuple

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

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

    Особый случай: кортеж из одного элемента записывается с запятой:

    Доступ к элементам

    Работают индексация и срезы так же, как у списков:

    Почему кортежи полезны

  • Безопасность: никто случайно не изменит данные.
  • Удобство передачи: кортеж часто используют как “запись” из нескольких значений.
  • Пример: функция возвращает сразу два значения (на практике это один кортеж):

    Множества: set

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

    Создание множества

    Пустое множество создаётся не так:

    Потому что {} — это пустой словарь.

    Уникальность и удаление дублей

    Операции с множествами

    | Операция | Пример | Смысл | |---|---|---| | Объединение | a | b | элементы из обоих множеств | | Пересечение | a & b | элементы, которые есть в обоих | | Разность | a - b | элементы из a, которых нет в b |

    Пример:

    Методы множества

    | Операция | Пример | Что делает | |---|---|---| | Добавить элемент | s.add(x) | добавляет элемент | | Удалить элемент | s.remove(x) | удаляет, если нет — ошибка | | Удалить без ошибки | s.discard(x) | удаляет, если есть |

    Словари: dict

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

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

    Доступ по ключу и изменение

    Если обратиться к несуществующему ключу через user["x"], будет KeyError. Более безопасный вариант — get:

    Какие бывают ключи

    Ключи должны быть неизменяемыми (например, str, int, tuple). Список (list) ключом быть не может.

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

    По умолчанию for перебирает ключи:

    Если нужны пары:

    Только значения:

    Частые операции со словарём

    | Операция | Пример | Что делает | |---|---|---| | Проверить ключ | "age" in user | True или False | | Получить с дефолтом | user.get("age", 0) | безопасное получение | | Удалить ключ | user.pop("age") | удаляет и возвращает значение | | Очистить | user.clear() | удаляет всё |

    Общие полезные функции и операторы для коллекций

    len()

    len() возвращает количество элементов.

    Оператор in

    in проверяет, содержится ли элемент.

    Частые ошибки новичков

  • Путать {} и set() при создании пустого множества.
  • Ожидать, что у множества есть индексы: s[0] не работает.
  • Пытаться использовать list как ключ словаря.
  • Пытаться изменить кортеж: t[0] = ... вызывает ошибку.
  • Путать dict и list: словарь ищет по ключу, список — по индексу.
  • Как выбрать подходящую коллекцию

  • Выбирайте list, если нужны порядок, индексы и изменения.
  • Выбирайте tuple, если нужен порядок, но данные должны быть фиксированными.
  • Выбирайте set, если важны уникальность и быстрые проверки “есть ли элемент”.
  • Выбирайте dict, если нужно хранить и быстро находить данные по ключу.
  • Мини-пример: подсчёт уникальных слов

    Программа читает строку, разбивает на слова, считает уникальные слова и количество повторов с помощью set и dict.

    Здесь вы используете сразу несколько тем курса:

  • ввод через input()
  • цикл for
  • коллекции list, set, dict
  • аккуратное получение значений через dict.get()
  • 7. Модули, файлы и основы объектного подхода

    Модули, файлы и основы объектного подхода

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

  • разберём, как разделять код по файлам и подключать его как модули
  • научимся читать и записывать данные в файлы
  • познакомимся с базовыми идеями объектного подхода (классы и объекты)
  • !Как код распределяется по файлам и как один файл импортирует другой

    Модули и импорт

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

    Модуль в Python — это обычный файл с кодом и расширением .py. Например, файл utils.py — это модуль utils.

    Зачем нужны модули:

  • чтобы не держать весь код в одном огромном файле
  • чтобы повторно использовать функции и константы
  • чтобы логично группировать задачи (например, io_utils.py, math_utils.py)
  • Официальная справка: Модули в Python

    Как работает import

    Когда вы пишете import something, Python:

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

    Примеры:

    Практические рекомендации:

  • если используете много функций из модуля, часто удобно import module и обращаться как module.name
  • from module import name делает имя доступным напрямую, но может ухудшать читаемость при больших проектах
  • Свой модуль в проекте

    Структура проекта:

  • main.py
  • utils.py
  • utils.py:

    main.py:

    Важно:

  • обычно импортируют в начале файла
  • имена модулей не должны конфликтовать с модулями стандартной библиотеки, например не называйте файл json.py или math.py
  • Пакеты: папки с кодом

    Пакет — это папка с модулями. В классическом варианте пакет содержит файл __init__.py.

    Пример структуры:

  • main.py
  • tools/
  • - __init__.py - text.py

    Тогда импорт может выглядеть так:

    Справка: Пакеты в Python

    Зачем нужен блок if __name__ == "__main__"

    У любого модуля есть специальное имя __name__.

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

    Пример utils.py:

    Работа с файлами

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

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

    Путь к файлу и pathlib

    Пути можно хранить строками, но в Python удобно использовать pathlib.Path.

    Справка: pathlib — Object-oriented filesystem paths

    Пример:

    Чтение текстового файла

    Главное правило: файл нужно открыть, прочитать и закрыть. Самый безопасный способ — контекстный менеджер with: он закроет файл автоматически.

    Частые режимы открытия:

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

    Почему важно encoding="utf-8":

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

    Если файл большой, удобно читать построчно:

    strip() убирает пробелы и перенос строки по краям.

    Запись в файл

    Запись (перезапись):

    Дозапись:

    Важное отличие:

  • "w" очищает файл перед записью
  • "a" сохраняет содержимое и дописывает в конец
  • Обработка ошибок: файл может не существовать

    Если файла нет, при чтении будет FileNotFoundError. Пока вы не изучили try/except глубоко, можно хотя бы проверять существование файла:

    Справка: Path.exists

    Пример: сохранить результаты в файл

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

    Основы объектного подхода

    Функции помогают разделять логику. Но иногда удобно объединить данные и действия над ними в одну сущность. Для этого в Python есть классы и объекты.

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

    Класс и объект

  • класс — это “чертёж” (описание), какие данные будут у сущности и какие действия она умеет
  • объект — это конкретный экземпляр класса (созданный по чертежу)
  • Пример из жизни:

  • класс: User
  • объекты: пользователь Аня, пользователь Игорь
  • !Разница между классом (описание) и объектами (экземпляры)

    Как объявить класс

    Минимальный класс:

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

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

    Атрибут — это данные, которые хранятся внутри объекта.

    Можно создать атрибут так:

    Но чаще делают правильнее: описывают создание объекта через __init__.

    Конструктор: __init__

    Метод __init__ автоматически вызывается при создании объекта.

    Что такое self:

  • self — это ссылка на конкретный объект, с которым сейчас работает метод
  • через self.name и self.age вы сохраняете данные внутри объекта
  • Методы

    Метод — это функция, которая “принадлежит” классу и работает с данными объекта.

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

  • метод вызывается как u.greet()
  • self передаётся автоматически
  • Когда объектный подход особенно удобен

    Объектный подход полезен, когда у вас:

  • много связанных данных, которые логично хранить вместе
  • операции, которые всегда выполняются над этими данными
  • несколько экземпляров “одинаковой сущности”
  • Пример: задача заметок.

  • у заметки есть заголовок и текст
  • заметка умеет красиво печататься
  • Это напрямую связано с прошлыми темами:

  • notes — список (list)
  • перебор — цикл for
  • форматирование — f-строки
  • логика оформлена в виде класса и методов
  • Как всё соединяется в мини-проект

    Типичная структура консольной программы после изучения этой темы:

  • main.py — точка входа, общая логика
  • models.py — классы (например, User, Note)
  • storage.py — функции чтения и записи файлов
  • utils.py — небольшие вспомогательные функции
  • Главная идея: вы используете модули для структуры, файлы для данных, и классы для удобного представления сущностей.

    Что важно запомнить

  • модуль — это файл .py, его подключают через import
  • импорт выполняет код модуля при первом подключении
  • if __name__ == "__main__" позволяет отделить запуск файла от импорта
  • файлы читают и записывают через open, безопаснее всего через with
  • для путей удобно использовать pathlib.Path
  • класс — описание, объект — экземпляр; __init__ создаёт и настраивает объект, self ссылается на текущий объект