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

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

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

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

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

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

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

Python (читается как «Пайтон», хотя в рунете часто говорят «Питон») был создан Гвидо ван Россумом в начале 90-х годов. Язык назван не в честь змеи, а в честь популярного британского комедийного шоу «Летающий цирк Монти Пайтона». Это уже говорит о многом: программирование на Python должно быть увлекательным, а не мучительным.

Вот несколько причин, почему этот язык стал стандартом индустрии:

  • Читаемость кода. Синтаксис Python максимально приближен к обычному английскому языку. Здесь нет обилия фигурных скобок {} или точек с запятой ;, которые пугают новичков в C++ или Java.
  • Универсальность. На Python пишут веб-сайты (Instagram, Pinterest), создают искусственный интеллект (ChatGPT, нейросети), анализируют данные, автоматизируют рутину и даже делают игры.
  • Интерпретируемость. Это важное техническое понятие. Программы делятся на компилируемые и интерпретируемые.
  • !Сравнение работы компилируемого языка и интерпретируемого языка Python.

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

    Шаг 1: Подготовка рабочего места

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

    Установка на Windows

    Это самая распространенная операционная система, поэтому разберем процесс детально.

  • Перейдите на официальный сайт python.org.
  • Наведите курсор на раздел Downloads и нажмите на большую кнопку Download Python 3.x.x (где x.x — актуальная версия, например, 3.12.0).
  • Запустите скачанный файл установщика.
  • > КРИТИЧЕСКИ ВАЖНЫЙ МОМЕНТ: В окне установки внизу обязательно поставьте галочку напротив пункта Add Python to PATH (или «Add Python 3.x to PATH»).

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

  • Нажмите Install Now.
  • Дождитесь окончания установки и нажмите Close.
  • Установка на macOS

    На компьютерах Mac часто уже установлена старая версия Python (версия 2.x), но нам нужна современная версия 3. Процесс похож на Windows:

  • Зайдите на python.org и скачайте установщик для macOS.
  • Следуйте инструкциям установщика (нажимайте «Продолжить»).
  • После установки у вас в папке «Программы» появится папка Python 3.x.
  • Что такое IDLE?

    Вместе с Python устанавливается программа IDLE (Integrated Development and Learning Environment). Это простая среда разработки, которая идеально подходит для первых шагов. Она состоит из двух частей:

  • Интерактивная оболочка (Shell): место, где можно писать команды и сразу видеть результат.
  • Редактор кода: место, где мы пишем полноценные программы и сохраняем их в файлы.
  • В будущем мы перейдем на профессиональные инструменты, такие как VS Code или PyCharm, но сегодня начнем с IDLE, чтобы ничего не отвлекало нас от сути.

    Шаг 2: Первая встреча с кодом

    Давайте проверим, что все работает. Найдите в своих программах IDLE (Python 3.x) и запустите её. Вы увидите белое окно с текстом, похожим на этот:

    Значок >>> называется приглашением к вводу. Python ждет ваших команд.

    Традиция программистов

    Существует древняя традиция: первая программа на любом новом языке должна выводить на экран фразу «Hello, World!» («Привет, мир!»). Если вы это сделаете, боги программирования благословят ваш путь.

    Введите после >>> следующую команду и нажмите Enter:

    Если вы все сделали правильно, на следующей строке появится:

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

    Разбор полетов: как это работает?

    Давайте разберем эту простую строку print("Привет, мир!") на атомы, чтобы понять логику языка.

    1. Функция print()

    Слово print — это имя функции. В программировании функция — это мини-программа, которая умеет делать что-то конкретное. Функция print умеет выводить данные на экран (в консоль).

    Обратите внимание: команды в Python пишутся строчными (маленькими) буквами. Если вы напишете Print или PRINT, Python выдаст ошибку, так как он чувствителен к регистру.

    2. Скобки ( )

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

    3. Кавычки " "

    Текст Привет, мир! заключен в кавычки. Это могут быть двойные " или одинарные ' кавычки — для Python нет разницы, главное, чтобы они были одинаковыми в начале и в конце.

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

    !Детальный разбор синтаксиса функции print.

    Шаг 3: Создание файла с программой

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

  • В IDLE нажмите File -> New File (или Ctrl+N). Откроется чистое окно редактора.
  • Напишите там следующий код (попробуем вывести несколько строк):
  • Обратите внимание на последнюю строку print(2 + 2). Здесь нет кавычек. Это значит, что Python сначала вычислит выражение , а потом напечатает результат.
  • Теперь нужно сохранить файл. Нажмите File -> Save (или Ctrl+S).
  • Назовите файл first_program.py.
  • > ВАЖНО: Все файлы с кодом на Python должны иметь расширение .py. Именно по этому расширению операционная система понимает, что этот файл нужно не читать как текст, а запускать через интерпретатор Python.

  • Чтобы запустить программу, нажмите Run -> Run Module (или клавишу F5).
  • В окне Shell вы увидите результат:

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

    Программирование — это искусство совершать ошибки и исправлять их. Не бойтесь красного текста ошибок (Traceback). Вот самые частые проблемы на старте:

    1. SyntaxError: invalid syntax

    Это значит, вы нарушили правила грамматики языка. Пример:* print "Привет" (забыли скобки — в старых версиях Python 2 это работало, в Python 3 — нет). Пример:* print("Привет) (забыли закрывающую кавычку).

    2. NameError: name '...' is not defined

    Вы пытаетесь использовать команду или переменную, которую Python не знает. Пример:* Print("Привет") (написали с большой буквы). Пример:* print(Привет) (забыли кавычки, и Python думает, что Привет — это имя какой-то переменной, а не просто текст).

    3. IndentationError: unexpected indent

    Ошибка отступов. В Python пробелы в начале строки имеют огромное значение (об этом мы поговорим в следующих уроках). Совет:* Всегда начинайте писать код с самого начала строки, не ставьте пробелы перед print, если это не требуется логикой программы.

    Дзен Python

    В Python встроена «пасхалка», которая описывает философию языка. Вернитесь в интерактивную оболочку (Shell) и введите команду:

    Вы увидите 19 афоризмов, известных как «Дзен Python». Вот некоторые из них в переводе:

    Красивое лучше, чем уродливое.* (Beautiful is better than ugly.) Явное лучше, чем неявное.* (Explicit is better than implicit.) Простое лучше, чем сложное.* (Simple is better than complex.) Читаемость имеет значение.* (Readability counts.)

    Эти принципы помогут вам писать хороший код. Мы будем возвращаться к ним на протяжении всего курса.

    Заключение

    Сегодня вы сделали огромный шаг. Вы:

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

    А пока — выполните домашнее задание, чтобы закрепить материал!

    2. Основы синтаксиса: переменные, типы данных и операции

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

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

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

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

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

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

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

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

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

    Синтаксис выглядит так: имя_переменной = значение

    Давайте создадим несколько переменных в IDLE (File -> New File):

    Когда Python видит строчку age = 25, он делает две вещи:

  • Выделяет место в памяти для числа 25.
  • Приклеивает к этому месту ярлык с именем age.
  • Теперь, когда мы пишем print(age), Python находит в памяти значение, на которое ссылается этот ярлык, и выводит его.

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

    Имя переменной не может быть случайным набором символов. В Python есть строгие правила и рекомендации (стандарт PEP 8):

  • Только латиница, цифры и подчеркивание. Имя может содержать a-z, A-Z, 0-9 и _.
  • Нельзя начинать с цифры. 1st_place — ошибка, place_1 — можно.
  • Никаких пробелов. Если имя состоит из нескольких слов, используйте нижнее подчеркивание. Этот стиль называется snake_case (змеиный регистр).
  • Плохо:* my name, MyName Хорошо:* my_name, user_age
  • Чувствительность к регистру. score, Score и SCORE — это три разные переменные.
  • Типы данных

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

    Рассмотрим четыре основных типа данных, с которыми вы будете работать 90% времени.

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

    int — сокращение от integer. Это любые целые числа: положительные, отрицательные или ноль.

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

    float — это дробные числа.

    > ВАЖНО: В программировании для разделения целой и дробной части используется точка, а не запятая.

    3. Строки (str)

    str — сокращение от string. Это любой текст, заключенный в кавычки. Мы уже сталкивались с ними.

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

    bool — сокращение от boolean. У этого типа всего два возможных значения: True (Истина) и False (Ложь). Обратите внимание, они пишутся с большой буквы.

    Как узнать тип переменной?

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

    Базовые операции

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

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

    Python — отличный калькулятор. Вот основные операторы:

    | Операция | Символ | Пример | Результат | | :--- | :---: | :--- | :--- | | Сложение | + | 5 + 3 | 8 | | Вычитание | - | 10 - 2 | 8 | | Умножение | | 4 2 | 8 | | Деление | / | 16 / 2 | 8.0 |

    Обратите внимание: обычное деление / всегда возвращает результат типа float, даже если числа делятся нацело.

    Продвинутая математика

    Есть три специфических оператора, которые часто вызывают вопросы у новичков, но они крайне полезны.

    1. Целочисленное деление (//) Отбрасывает дробную часть, оставляя только целое число.

    2. Остаток от деления (%) Возвращает то, что осталось после целочисленного деления. Это можно описать формулой:

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

    Пример для 10 % 3:

  • 10 делится на 3 три раза (3 * 3 = 9).
  • Остаток: 10 - 9 = 1.
  • 3. Возведение в степень ()** Используется две звездочки.

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

    Строки тоже можно «складывать» и «умножать».

    Конкатенация (Сложение строк) Знак + склеивает две строки в одну.

    Дублирование (Умножение строки на число) Знак * повторяет строку указанное количество раз.

    > ОШИБКА: Нельзя сложить число и строку (например, "Мне " + 25). Python выдаст ошибку TypeError. Число нужно сначала превратить в строку.

    Ввод данных: функция input()

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

    Она останавливает программу и ждет, пока пользователь введет текст и нажмет Enter.

    Главная ловушка input()

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

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

    Вы ожидаете увидеть 30, но увидите 1020. Почему? Потому что для Python вы сложили две строки: "10" и "20", как "Super" и "Man".

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

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

    * int() — превращает в целое число. * float() — превращает в дробное число. * str() — превращает в строку.

    Исправленный пример:

    А если мы хотим вывести текст с числом, используем str():

    Заключение

    Поздравляю! Теперь вы умеете:

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

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

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

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

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

    Логика принятия решений

    В основе любого выбора лежит вопрос, на который можно ответить только «Да» (True) или «Нет» (False). В прошлом уроке мы познакомились с типом данных bool. Именно он управляет потоком выполнения программы.

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

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

    | Оператор | Значение | Пример (Результат) | | :---: | :--- | :--- | | == | Равно | 5 == 5 (True) | | != | Не равно | 5 != 3 (True) | | > | Больше | 10 > 2 (True) | | < | Меньше | 1 < 5 (True) | | >= | Больше или равно | 5 >= 5 (True) | | <= | Меньше или равно | 4 <= 5 (True) |

    > ВНИМАНИЕ: Самая частая ошибка новичка — путаница между = и ==. Одинарное равно = — это присваивание (положить значение в переменную). Двойное равно == — это сравнение (проверить, равны ли значения).

    Условный оператор if

    Конструкция if (если) проверяет условие. Если оно истинно (True), выполняется блок кода внутри.

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

    Синтаксис в Python уникален и строг к оформлению:

    Магия отступов

    Обратите внимание на пробелы перед командами print. В других языках (C++, Java, JavaScript) для выделения блоков кода используются фигурные скобки {}. В Python используются отступы (indentation).

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

    Если вы забудете отступ, Python выдаст ошибку IndentationError.

    Развилки: else и elif

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

    Блок else не имеет условия. Он выполняется всегда, когда проверка в if дала False.

    А если вариантов больше двух? Например, в игре персонаж может быть «Здоров», «Ранен» или «Мертв». Здесь на помощь приходит elif (сокращение от else if — иначе если).

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

    Сложная логика: and, or, not

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

    Для этого используются логические операторы:

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

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

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

    Для повторения действий используются циклы.

    Цикл while (Пока)

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

    Как это работает:

  • Проверяется условие count <= 5.
  • Если True, выполняется тело цикла.
  • Переменная count увеличивается.
  • Программа возвращается к шагу 1.
  • > Осторожно: Бесконечный цикл! > Если вы забудете строку count = count + 1, переменная count всегда будет равна 1, условие 1 <= 5 всегда будет истинным, и программа зависнет, бесконечно печатая текст. Чтобы остановить такую программу, нажмите Ctrl+C в консоли.

    Цикл for (Для)

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

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

    Функция range()

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

    Она генерирует последовательность чисел. У неё есть три варианта использования:

  • range(stop): от 0 до stop - 1.
  • range(start, stop): от start до stop - 1.
  • range(start, stop, step): от start до stop - 1 с шагом step.
  • Важный нюанс математики Python: Верхняя граница всегда не включена в диапазон. Это можно записать как интервал , где квадратная скобка означает включение, а круглая — исключение.

    Пример:

    Если нам нужно вывести только четные числа до 10:

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

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

    break (сломать)

    Команда break немедленно прерывает выполнение цикла и выходит из него. Это полезно, если мы искали что-то и уже нашли.

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

    Команда continue прерывает текущую итерацию (текущий круг) и сразу переходит к следующей, пропуская весь код, который написан ниже неё в теле цикла.

    Допустим, мы хотим распечатать все числа от 1 до 5, кроме числа 3.

    Результат:

    Практический пример: Проверка на четность

    Давайте объединим знания. Напишем программу, которая ищет все четные числа в диапазоне от 1 до 10 и выводит их.

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

    где — проверяемое число, а — операция взятия остатка от деления на 2 (в Python это оператор %).

    Заключение

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

  • Принимать решения с помощью if, elif, else.
  • Проверять сложные условия с and, or.
  • Повторять действия с помощью while и for.
  • Управлять ходом цикла через break и continue.
  • В следующем уроке мы перейдем к одной из самых мощных концепций программирования — структурам данных. Мы узнаем, как хранить не просто одно значение в переменной, а целые списки информации, словари и кортежи.

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

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

    В прошлых уроках мы научились хранить данные в переменных. Мы создавали коробки с надписями age или name, куда клали одно число или одну строку. Но что, если нам нужно сохранить список покупок из 50 пунктов? Создавать 50 переменных (item_1, item_2...) — это долго, неудобно и делает код нечитаемым.

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

    Списки (Lists)

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

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

    Индексация: магия нуля

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

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

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

    Если вы попробуете обратиться к heroes[3], Python выдаст ошибку IndexError, потому что элемента с индексом 3 не существует (у нас всего 3 элемента: 0, 1 и 2).

    Отрицательные индексы

    Python — очень удобный язык. Он позволяет считать элементы с конца. Индекс -1 — это всегда последний элемент списка.

    Изменяемость списков

    Списки — это изменяемый (mutable) тип данных. Это значит, что мы можем менять содержимое «вагонов» прямо на ходу.

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

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

  • append(item) — добавляет элемент в конец списка.
  • remove(item) — удаляет первый найденный элемент по значению.
  • pop(index) — удаляет элемент по индексу и возвращает его.
  • len(list) — возвращает длину списка (количество элементов).
  • Срезы (Slicing)

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

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

    Кортежи (Tuples)

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

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

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

    Зачем нужны кортежи?

  • Защита данных. Если вы передаете в программу список настроек, которые нельзя менять, используйте кортеж.
  • Скорость. Кортежи работают немного быстрее списков и занимают меньше памяти.
  • Логика. Некоторые данные по своей природе неизменны (например, дни недели или координаты GPS).
  • Словари (Dictionaries)

    Списки и кортежи хороши, когда нам важен порядок элементов. Но что, если мы хотим найти телефон друга? Мы не ищем его по номеру страницы («друг номер 154»), мы ищем его по имени.

    Словарь — это структура данных, которая хранит пары Ключ: Значение.

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

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

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

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

    В словарях нет индексов 0, 1, 2. Мы обращаемся к данным по ключу.

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

    Словари изменяемы. Вы можете легко добавить новую пару или обновить старую.

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

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

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

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

    Со словарями чуть сложнее. По умолчанию цикл for идет по ключам.

    Если нужны и ключи, и значения, используют метод .items():

    Итоговая таблица: что выбрать?

    | Структура | Скобки | Упорядоченность | Изменяемость | Для чего подходит | | :--- | :---: | :---: | :---: | :--- | | Список (List) | [] | Да | Да | Коллекции однотипных данных, которые будут меняться. | | Кортеж (Tuple) | () | Да | Нет | Хранение констант, координат, настроек. | | Словарь (Dict) | {} | Нет* | Да | Хранение данных объекта (имя, возраст), быстрый поиск по ключу. |

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

    Заключение

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

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

    А пока — выполните задания ниже, чтобы закрепить материал!

    5. Функции и модули: создание переиспользуемого кода

    Функции и модули: создание переиспользуемого кода

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

    Но по мере того как ваши программы становятся больше, вы можете заметить одну неприятную вещь: вам приходится копировать и вставлять одни и те же куски кода в разные места. Представьте, что вы пишете программу для интернет-магазина, и вам нужно пять раз в разных местах посчитать итоговую стоимость корзины с учетом скидки. Копировать эти 10 строчек кода пять раз — плохая идея. Если формула скидки изменится, вам придется искать и исправлять её во всех пяти местах.

    Сегодня мы изучим функции и модули — инструменты, которые позволяют писать код один раз и использовать его сколько угодно. Это и есть реализация принципа DRY (Don't Repeat Yourself — Не повторяйся), о котором мы говорили ранее.

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

    Функция — это именованный блок кода, который выполняет определенную задачу. Вы уже пользовались функциями: print(), input(), len(), type(). Кто-то (разработчики Python) уже написал для них код, а вы просто вызываете их по имени.

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

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

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

    Общий шаблон выглядит так:

    Давайте разберем синтаксис:

  • def: Команда интерпретатору: «Сейчас я буду создавать новую функцию».
  • имя_функции: Правила именования такие же, как у переменных: используем snake_case (маленькие буквы и нижнее подчеркивание), имя должно быть понятным (например, calculate_tax, а не func1).
  • Скобки (): Обязательный элемент. Внутри них могут быть параметры (об этом ниже).
  • Двоеточие :: Означает начало блока кода.
  • Отступы: Всё, что сдвинуто вправо (обычно на 4 пробела), относится к функции.
  • Вызов функции

    Если вы просто напишете код выше и запустите программу, на экране ничего не появится. Почему? Потому что вы только научили Python делать это действие, но не попросили его выполнить.

    Чтобы код заработал, функцию нужно вызвать:

    Теперь Python найдет в памяти инструкцию с именем say_hello и выполнит весь код внутри неё.

    !Аналогия между определением функции (запись рецепта) и её вызовом (готовка по рецепту).

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

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

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

    Здесь name — это параметр. Теперь мы можем здороваться с кем угодно:

    Значения "Алекс" и "Мария", которые мы передаем внутрь, называются аргументами.

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

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

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

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

    Это, пожалуй, самая важная концепция урока.

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

    Для этого используется ключевое слово return.

    Представьте функцию как сотрудника. * Функция с print — это сотрудник, который кричит ответ на весь офис, но не записывает его в отчет. * Функция с return — это сотрудник, который молча кладет папку с результатом вам на стол.

    Рассмотрим пример сложения двух чисел:

    Когда Python доходит до слова return, функция немедленно прекращает работу и «превращается» в то значение, которое стоит после return. В примере выше вызов add_numbers(5, 3) превратился в число 8, которое мы сохранили в переменную summa.

    Ошибка новичка: print vs return

    Посмотрите на этот код и попробуйте догадаться, в чем проблема:

    Вы получите ошибку TypeError. Почему?

  • Функция bad_math напечатала 4 на экран.
  • Но она ничего не вернула (нет слова return). В Python, если функция ничего не возвращает явно, она возвращает специальное значение None (пустота).
  • Переменная x стала равна None.
  • В последней строке вы пытаетесь сложить None + 10, что невозможно.
  • > Правило: Если вы хотите использовать результат работы функции в дальнейших вычислениях, используйте return.

    !Функция как черный ящик: принимает данные, обрабатывает их и возвращает результат.

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

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

    Это сделано для безопасности. Представьте, что у вас в программе 100 функций, и в каждой есть переменная result. Если бы они все были общими, начался бы хаос. Благодаря локальной области видимости, result в одной функции никак не мешает result в другой.

    Модули: организация кода

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

    Импорт стандартных модулей

    Вместе с Python устанавливается огромная библиотека полезных модулей. Это называется «Батарейки в комплекте» (Batteries Included). Чтобы использовать их, нужно написать import имя_модуля.

    Например, модуль math содержит сложные математические функции, а модуль random — генератор случайных чисел.

    Пример использования math для вычисления площади круга. Формула площади круга выглядит так:

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

    Здесь math.pi — это переменная, хранящаяся внутри модуля math.

    Пример использования random:

    Создание своего модуля

    Вы можете создать свой модуль очень просто:

  • Создайте файл my_tools.py.
  • Напишите в нем функцию greet(name).
  • Создайте рядом файл main.py.
  • В main.py напишите:
  • Так создаются большие профессиональные программы: код разбивается на логические части (модули), которые подключаются друг к другу.

    Аргументы по умолчанию

    Иногда мы хотим, чтобы у параметра было значение «по умолчанию», если пользователь забыл его передать. Это делается через знак = в определении функции.

    Заключение

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

  • Упростить код: разбить сложную задачу на маленькие подзадачи.
  • Избежать повторов: написать логику один раз и вызывать её где угодно.
  • Улучшить читаемость: имя функции calculate_salary() говорит само за себя, в отличие от 20 строк математических формул.
  • Теперь вы готовы писать структурированный и чистый код. В следующем уроке мы поговорим о том, как работать с файлами: читать текст из документов и сохранять результаты работы программы на диск.