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

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

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

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

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

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

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

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

Ключевые преимущества: * Простота и лаконичность. Там, где в других языках (например, C++ или Java) нужно написать 10 строк кода, в Python часто достаточно одной или двух. * Интерпретируемость. Вам не нужно тратить время на сложную компиляцию. Вы пишете код и сразу запускаете его. * Богатая стандартная библиотека. Принцип «батарейки в комплекте» означает, что множество инструментов для работы с файлами, интернетом и данными уже встроены в язык.

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

Установка окружения

Прежде чем писать код, нам нужно установить интерпретатор Python. Это программа, которая будет читать ваш код и выполнять его.

Шаг 1: Загрузка

Перейдите на официальный сайт языка: Python.org. В разделе Downloads сайт обычно сам определяет вашу операционную систему и предлагает последнюю стабильную версию (например, Python 3.12 или новее).

Шаг 2: Установка

#### Для пользователей Windows Запустите скачанный установочный файл. Самый важный момент: внизу окна установки обязательно поставьте галочку напротив пункта Add Python to PATH (Добавить Python в PATH). Если этого не сделать, вы не сможете запускать Python через командную строку, и вам придется настраивать это вручную.

#### Для пользователей macOS На macOS часто уже установлена старая версия Python, но для обучения нам нужна актуальная версия 3.x. Скачайте установщик с сайта и следуйте инструкциям. Также популярным способом является установка через менеджер пакетов Homebrew: brew install python.

#### Для пользователей Linux В большинстве дистрибутивов Linux Python уже установлен. Вы можете проверить это, открыв терминал и введя команду:

Шаг 3: Выбор редактора кода (IDE)

Код можно писать даже в «Блокноте», но это неудобно. Для начала мы будем использовать IDLE — простую среду разработки, которая устанавливается вместе с Python. В дальнейшем, когда наши проекты станут сложнее, мы перейдем на профессиональные инструменты, такие как Visual Studio Code или PyCharm.

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

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

  • Откройте IDLE (найдите его в поиске программ на вашем компьютере).
  • Вы увидите окно с приглашением ввода >>>. Это интерактивный режим.
  • Нажмите File -> New File, чтобы создать файл скрипта.
  • В открывшемся пустом окне введите следующий код:
  • Сохраните файл (File -> Save) под именем hello.py. Обратите внимание: файлы с кодом на Python всегда имеют расширение .py.
  • Запустите программу, нажав Run -> Run Module (или клавишу F5).
  • Если в окне оболочки вы увидели текст Hello, World!, поздравляю! Вы написали свою первую программу.

    Разбор кода

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

    Базовый синтаксис Python

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

    Отступы (Indentation)

    Это самая важная особенность Python. В других языках для выделения блоков кода используются фигурные скобки {}. В Python для этого используются отступы (обычно 4 пробела).

    Если вы нарушите правила отступов, программа просто не запустится и выдаст ошибку IndentationError.

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

    Строка с отступом относится к блоку условия if. Строка без отступа выполняется независимо от условия.

    Комментарии

    Комментарии — это заметки для программиста, которые компьютер игнорирует. В Python однострочные комментарии начинаются с символа решетки #.

    Переменные и типы данных

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

    В Python не нужно заранее объявлять тип переменной (как в C++ или Java). Тип определяется автоматически в момент присваивания значения. Это называется динамической типизацией.

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

    * Имя может состоять из букв, цифр и знака подчеркивания _. * Имя не может начинаться с цифры. * Имя не должно совпадать с зарезервированными словами (например, print, if, for). * В Python принято использовать стиль snake_case (слова разделяются подчеркиванием, все буквы строчные).

    Пример: * Правильно: my_variable, user_name, count1. * Неправильно: 1variable, user-name, MyVariable (не ошибка, но не принято).

    Базовые математические операции

    Python отлично справляется с ролью калькулятора. Рассмотрим основные операции.

    | Операция | Символ | Пример кода | Результат | | :--- | :---: | :--- | :--- | | Сложение | + | 5 + 3 | 8 | | Вычитание | - | 10 - 2 | 8 | | Умножение | | 4 2 | 8 | | Деление | / | 16 / 2 | 8.0 (всегда float) | | Целочисленное деление | // | 17 // 2 | 8 (дробная часть отбрасывается) | | Остаток от деления | % | 17 % 2 | 1 | | Возведение в степень | | 2 3 | 8 |

    Математическое пояснение остатка от деления

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

    Для любых целых чисел и (где ), остаток вычисляется следующим образом:

    Где: * — остаток от деления. * — делимое (исходное число). * — делитель. * — неполное частное (целая часть от деления на ), которое можно выразить как .

    Рассмотрим пример для выражения 17 % 5:

  • Делим 17 на 5: получается 3.4.
  • Целая часть () равна 3.
  • Подставляем в формулу:
  • Таким образом, 17 % 5 вернет 2.

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

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

    Или более компактно:

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

    Пример калькулятора возраста:

    Заключение

    Сегодня вы сделали огромный шаг — подготовили рабочее место и написали свои первые строки кода. Мы изучили:

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

    > «Любая достаточно развитая технология неотличима от магии». — Артур Кларк

    Теперь вы начинаете становиться волшебником. Удачи в выполнении заданий!

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

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

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

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

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

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

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

    !Визуализация того, как переменные ссылаются на объекты в памяти.

    В Python создание переменной происходит в момент присваивания ей значения. Для этого используется знак равенства =. Читается это не как «равно» в математике, а как «присвоить значение».

    Здесь мы создали переменную score и положили в нее число 100, а также переменную player_name со строкой "Mario".

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

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

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

    Числа (Numbers)

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

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

    Тип int (от англ. integer) — это целые числа без дробной части. Они могут быть положительными, отрицательными или равными нулю.

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

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

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

    Даже если число выглядит целым, но записано с точкой (например, 5.0), для Python это уже тип float.

    #### Научная нотация

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

    Рассмотрим пример из физики. Скорость света в вакууме приблизительно равна:

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

    В коде это записывается так:

    Особенности арифметики

    Мы уже касались базовых операций в прошлой статье, но есть важный нюанс при делении. Обычное деление / всегда возвращает float, даже если числа делятся нацело.

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

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

    Строки (Strings)

    Строки (тип str) — это последовательности символов. Все, что заключено в кавычки, Python воспринимает как текст.

    Кавычки

    Можно использовать как одинарные ', так и двойные " кавычки. Главное правило: если начали с двойной, заканчивайте двойной.

    Это удобно, если внутри строки нужно использовать кавычки другого типа:

    Операции над строками

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

    Индексы и срезы

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

    !Визуализация прямой и обратной индексации в строках.

    Чтобы получить конкретный символ, мы указываем его индекс в квадратных скобках [].

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

    Срезы (Slicing) позволяют извлечь часть строки. Формат: [начало:конец]. * начало — индекс, с которого берем (включительно). * конец — индекс, ДО которого берем (не включая его).

    F-строки (Форматирование)

    Начиная с версии Python 3.6, появился удобный способ вставлять значения переменных прямо внутрь строки. Для этого перед кавычками ставится буква f, а имена переменных пишутся в фигурных скобках {}.

    Логические значения (Booleans)

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

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

    Логические значения чаще всего возникают как результат сравнения.

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

    Для построения сложных условий используются операторы and, or и not. Это основа булевой алгебры.

    Рассмотрим логическое умножение (конъюнкцию). Пусть и — логические переменные.

    Где истинно только тогда, когда истинны оба значения и .

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

    Таблица истинности для оператора and:

    | A | B | A and B | | :---: | :---: | :---: | | True | True | True | | True | False | False | | False | True | False | | False | False | False |

    Преобразование типов (Type Casting)

    Иногда нам нужно превратить один тип данных в другой. Например, функция input() всегда возвращает строку, даже если пользователь ввел цифры.

    Основные функции преобразования: * int() — превращает в целое число. * float() — превращает в дробное число. * str() — превращает в строку. * bool() — превращает в логическое значение.

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

    Интересно работает преобразование в bool. В Python почти все значения считаются True, кроме: * Числа 0 (и 0.0) * Пустой строки "" * None (пустоты)

    Как узнать тип данных?

    Если вы запутались, с каким типом данных работаете, используйте встроенную функцию type().

    Заключение

    Мы разобрали «кирпичики», из которых строятся данные в Python:

  • Числа (int, float) — для математики и подсчетов.
  • Строки (str) — для текста и общения с пользователем.
  • Логические значения (bool) — для принятия решений.
  • Преобразование типов — для совместимости данных.
  • Понимание типов данных убережет вас от множества ошибок. В следующей статье мы научимся управлять потоком выполнения программы с помощью условных операторов if, elif и else, используя знания о логических типах, которые вы получили сегодня.

    3. Управление потоком: условные операторы if-else и циклы for, while

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

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

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

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

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

    В основе любого решения лежит проверка условия. В Python за это отвечает оператор if (если). Он проверяет, является ли утверждение истинным (True). Если да — блок кода выполняется. Если нет — пропускается.

    Конструкция if

    Синтаксис очень прост, но требует внимательности к отступам:

    Обратите внимание на двоеточие : после условия и отступ в 4 пробела для блока кода внутри if. Это визуально показывает, какие команды зависят от условия.

    !Схематичное изображение работы оператора if: программа выбирает путь в зависимости от условия.

    Конструкция if-else

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

    Блок else не имеет условия. Он выполняется во всех случаях, когда условие if оказалось ложным (False).

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

    Жизнь редко бывает черно-белой. Иногда вариантов больше двух. Представьте, что мы пишем программу для светофора. У нас есть красный, желтый и зеленый сигналы. Здесь на помощь приходит elif (сокращение от else if — иначе если).

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

    Вложенные условия

    Внутри одного if может находиться другой. Это называется вложенностью.

    Хотя это работает, старайтесь не злоупотреблять глубокой вложенностью — такой код сложно читать.

    Математическая логика в условиях

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

    Формально это можно записать так:

    Где: * — размер скидки. * — сумма покупки. * — коэффициент скидки (10%).

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

    Циклы: автоматизация повторений

    Представьте, что вам нужно вывести на экран фразу «Я не буду писать код без тестов» 100 раз. Копировать строку print 100 раз — плохая идея. В программировании существует принцип DRY (Don't Repeat Yourself — не повторяйся).

    Для повторения действий используются циклы. В Python их два вида: while и for.

    Цикл while (Пока)

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

    Опасность: Если вы забудете изменить переменную внутри цикла (например, уберете строку count = count - 1), условие count > 0 всегда будет истинным. Программа попадет в бесконечный цикл и зависнет. Чтобы остановить такую программу, обычно нужно нажать Ctrl+C в терминале.

    Цикл for (Для)

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

    !Метафора цикла for: последовательная обработка каждого элемента в наборе данных.

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

    Здесь переменная letter на каждом шаге цикла автоматически принимает значение следующего символа строки word.

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

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

    Она имеет три формы:

  • range(stop) — от 0 до stop (не включая его).
  • range(start, stop) — от start до stop (не включая его).
  • range(start, stop, step) — с шагом step.
  • Пример математической прогрессии. Найдем сумму чисел от 1 до 5.

    Где: * — итоговая сумма. * — переменная итерации (счетчик). * — знак суммирования.

    Реализация на Python:

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

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

    break (Прервать)

    Оператор break немедленно останавливает выполнение цикла и выходит из него. Это полезно, например, при поиске: если мы нашли то, что искали, нет смысла продолжать перебор.

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

    Оператор continue прерывает текущую итерацию (шаг) и переходит к следующей. Это удобно для фильтрации данных.

    В этом примере, когда i равно 0, 2, 4 и т.д., срабатывает continue, и команда print(i) не выполняется.

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

    Давайте объединим полученные знания и напишем простую систему проверки пароля. У пользователя будет 3 попытки.

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

  • Мы используем цикл while, который работает, пока есть попытки.
  • Внутри запрашиваем ввод.
  • Сравниваем ввод с секретным паролем через if.
  • Если пароль верен — поздравляем и используем break, чтобы не спрашивать снова.
  • Если неверен (else) — уменьшаем счетчик попыток.
  • Вложенный if проверяет, не закончились ли попытки совсем.
  • Заключение

    Сегодня вы получили в свой арсенал мощнейшие инструменты. Условные операторы if-else позволяют вашим программам «думать» и реагировать на разные ситуации, а циклы for и while избавляют от рутинной работы, позволяя обрабатывать огромные объемы данных за доли секунды.

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

    Практикуйтесь, экспериментируйте с кодом и не бойтесь ошибок — это лучший способ обучения!

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

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

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

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

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

    Списки (Lists)

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

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

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

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

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

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

    Изменяемость (Mutability)

    Главное отличие списка от строки — его можно менять. Вы можете заменить содержимое любого «вагона».

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

    Python предоставляет множество встроенных инструментов (методов) для работы со списками:

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

    Пример работы:

    Срезы (Slicing)

    Мы можем получать подмножества списка, используя срезы, точно так же, как делали это со строками: список[старт:стоп:шаг].

    Кортежи (Tuples)

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

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

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

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

    Возникает вопрос: зачем использовать кортеж, если список умеет больше? Есть несколько причин:

  • Защита данных. Если вы передаете в программу координаты GPS или настройки подключения к базе данных, вы хотите быть уверены, что никто случайно их не изменит.
  • Производительность. Кортежи занимают меньше памяти и работают немного быстрее списков.
  • Ключи словарей. Кортежи могут быть ключами в словарях (об этом ниже), а списки — нет.
  • > «Совершенство достигается не тогда, когда нечего добавить, а тогда, когда нечего отнять». — Антуан де Сент-Экзюпери

    Это отличная метафора для кортежей: ничего лишнего, только данные.

    Словари (Dictionaries)

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

    Словарь — это неупорядоченная коллекция пар «ключ: значение». В других языках программирования эта структура может называться hash map или associative array.

    !Визуализация принципа работы словаря: доступ к значению по уникальному ключу.

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

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

    Здесь "name", "age" и "is_student" — это ключи, а "Алексей", 25 и True — соответствующие им значения.

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

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

    Добавление новой пары или изменение существующей:

    Ограничения ключей

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

    Методы словарей

    * keys() — возвращает список всех ключей. * values() — возвращает список всех значений. * items() — возвращает пары (ключ, значение).

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

    Сравнение структур данных

    Чтобы вам было проще ориентироваться, я составил сводную таблицу.

    | Характеристика | Список (List) | Кортеж (Tuple) | Словарь (Dictionary) | | :--- | :--- | :--- | :--- | | Синтаксис | [1, 2, 3] | (1, 2, 3) | {"key": "value"} | | Упорядоченность | Да | Да | Нет (до Python 3.7)* | | Изменяемость | Да (Mutable) | Нет (Immutable) | Да (Mutable) | | Доступ | По индексу (0, 1...) | По индексу (0, 1...) | По ключу | | Дубликаты | Разрешены | Разрешены | Ключи уникальны |

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

    Вложенность (Nesting)

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

    Разберем этот путь:

  • students[1] — берем второй элемент списка (словарь Бориса).
  • ["grades"] — берем значение по ключу "grades" (список оценок).
  • [0] — берем первый элемент этого списка.
  • Заключение

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

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

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

    5. Функции и модули: принципы DRY, создание функций и импорт библиотек

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

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

    Представьте, что вы пишете программу для расчета налогов. Формула одна и та же, но применять её нужно к зарплате, к премии и к доходу от инвестиций. Копировать формулу три раза? А если налоговая ставка изменится? Вам придется искать и исправлять код в трех разных местах. Это неудобно и ведет к ошибкам.

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

    Принцип DRY: Не повторяйся

    В программировании существует золотое правило, которое называется DRYDon't Repeat Yourself (Не повторяй самого себя).

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

    Нарушение этого принципа называется WETWrite Everything Twice (Пиши всё дважды) или We Enjoy Typing (Мы любим печатать). Мы с вами не хотим печатать лишнее, мы хотим писать эффективный код.

    Главный инструмент для соблюдения принципа DRY — это функция.

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

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

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

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

    Анатомия функции

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

    Разберем по частям:

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

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

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

    Здесь name — это переменная-параметр. Когда мы вызываем функцию, мы передаем в нее конкретное значение — аргумент.

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

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

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

    Для этого используется оператор return.

    Важное отличие print от return: * print просто показывает текст пользователю. Программа не может «запомнить» то, что было напечатано. * return передает данные обратно в то место, где была вызвана функция. Это как если бы вы попросили повара приготовить пиццу: print — это повар показал вам пиццу и выбросил её, а return — отдал её вам в руки.

    Рассмотрим математический пример. Вычислим площадь прямоугольника.

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

    Как только Python встречает слово return, выполнение функции немедленно прекращается, и значение возвращается. Код после return никогда не выполнится.

    Область видимости (Scope)

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

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

    Модули и библиотеки

    Принцип DRY работает не только внутри одного файла. Что если кто-то уже написал нужную вам функцию? Зачем писать её заново?

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

    Модуль math

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

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

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

    Также в модуле math есть число Пи:

    Модуль random

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

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

    Если вам не нужен весь модуль, а только одна функция, можно импортировать её напрямую:

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

    Любой файл с расширением .py — это модуль. Если вы создадите файл my_tools.py и напишете в нем функцию greet(), вы сможете использовать её в другом файле (находящемся в той же папке), написав import my_tools.

    Это позволяет разбивать большие программы на маленькие, понятные файлы.

    Заключение

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

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

    > «Простота — залог надежности». — Эдсгер Дейкстра

    Используйте функции, чтобы делать сложный код простым!