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

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

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

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

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

Программирование начинается с понимания того, как компьютер читает инструкции и как он хранит информацию.

Философия и базовый синтаксис

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

> Программы должны быть написаны для того, чтобы их читали люди, и лишь попутно — чтобы их выполняли машины. > > Харольд Абельсон, Структура и интерпретация компьютерных программ

Эта цитата идеально описывает подход создателя языка Гвидо ван Россума. Код должен выглядеть как обычный английский текст.

Рассмотрим классическую первую программу:

Здесь print() — это встроенная функция, которая выводит переданную ей информацию на экран. Нам не нужно писать сложные конструкции для импорта библиотек вывода, как это делается в Java или C++.

Если мы хотим выполнить несколько команд, мы просто пишем их на новых строках:

Переменные: контейнеры для информации

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

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

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

В этом примере мы создали две переменные. Компьютер выделил место в памяти для числа 25 и связал это место с именем user_age.

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

Компьютер строг к тому, как вы называете свои «коробки». В Python существуют четкие правила:

  • Имя может состоять только из букв, цифр и символа подчеркивания.
  • Имя не может начинаться с цифры (например, 1user вызовет ошибку, а user1 — сработает).
  • Регистр имеет значение: Age, age и AGE — это три разные переменные.
  • Нельзя использовать зарезервированные слова языка (например, if, for, class).
  • В сообществе разработчиков принято использовать стиль snake_case (змеиный регистр) для названий переменных: слова пишутся со строчной буквы и разделяются подчеркиванием. Например: max_speed, customer_first_name.

    Встроенные типы данных

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

    В таблице ниже представлены четыре основных базовых типа данных:

    | Название типа | Обозначение | Описание | Пример | | --- | --- | --- | --- | | Целые числа | int | Любые целые числа без дробной части | 10, -5, 0 | | Вещественные числа | float | Числа с плавающей точкой (дробные) | 3.14, -0.001 | | Строки | str | Текстовая информация, заключенная в кавычки | "Привет", 'A' | | Логический тип | bool | Истина или ложь | True, False |

    Разберем каждый из них подробнее.

    Числа: int и float

    Тип int (от английского integer) используется для точного счета: количество пользователей, количество дней в месяце.

    Тип float используется для измерений, где важна точность: вес, температура, курс валют. Обратите внимание, что дробная часть отделяется точкой, а не запятой.

    С числами можно выполнять все стандартные математические операции:

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

    Для более сложных расчетов применяются специальные операторы. Например, целочисленное деление // и остаток от деления %.

    Если мы хотим распределить 50 яблок между 15 школьниками поровну, не разрезая их, мы используем математическую формулу:

    Где — остаток, — общее количество яблок, — количество школьников.

    Строки: str

    Тип str (от английского string) — это последовательность символов. Строки всегда заключаются в одинарные или двойные кавычки. Для языка нет разницы, какие именно кавычки вы используете, главное — чтобы они совпадали в начале и в конце.

    Строки можно «складывать» друг с другом. Эта операция называется конкатенацией:

    Современный и более удобный способ работы с текстом — это f-строки (форматированные строки). Они позволяют вставлять значения переменных прямо внутрь текста, если перед кавычками поставить букву f, а переменную обернуть в фигурные скобки:

    Логический тип: bool

    Тип bool (от английского boolean) может принимать только два значения: True (Истина) или False (Ложь). Этот тип данных является фундаментом для построения логики программы.

    Обычно логические значения получаются в результате операций сравнения:

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

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

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

    Более того, одна и та же переменная может менять свой тип в процессе работы программы:

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

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

    Часто данные поступают в программу не в том формате, который нам нужен. Например, если пользователь вводит свой возраст на сайте, программа может получить его в виде текста "25", а не числа 25.

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

  • int() — превращает значение в целое число.
  • float() — превращает значение в дробное число.
  • str() — превращает значение в строку.
  • Рассмотрим практический пример расчета скидки. Допустим, базовая цена товара составляет 1000 руб., а пользователь ввел размер скидки в текстовое поле.

    Если бы мы не использовали функцию int(), программа попыталась бы выполнить операцию 1000 - "150" и завершилась бы с ошибкой.

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

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

    Итоги

    * Переменные служат именованными контейнерами для хранения данных в памяти компьютера. Имена переменных должны быть осмысленными и соответствовать правилам языка. * В языке выделяют четыре базовых типа данных: целые числа (int), вещественные числа (float), строки (str) и логические значения (bool). Python* использует динамическую типизацию, автоматически определяя тип переменной на основе присвоенного ей значения. * Для корректной работы программы часто требуется преобразование типов с помощью встроенных функций int(), float() и str(), чтобы избежать ошибок при взаимодействии разных типов данных.

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

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

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

    Ветвление: условный оператор if

    Как турникет в метро понимает, кого пропустить, а кого нет? Он считывает баланс карты и сравнивает его со стоимостью проезда. Если денег достаточно — створки открываются. В Python для реализации такой логики используется условный оператор if (если).

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

    В этом примере мы используем оператор сравнения. Результатом выражения является логическое значение типа bool, с которым мы познакомились ранее. Если результат True (Истина), код внутри блока выполняется.

    Но что делать, если денег не хватает? Для обработки альтернативного сценария существует блок else (иначе). Он срабатывает только в том случае, если условие в if оказалось ложным (False).

    Часто в жизни выбор состоит не из двух, а из множества вариантов. Например, расчет скидки в зависимости от суммы покупок. Для проверки нескольких условий подряд применяется оператор elif (сокращение от else if).

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

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

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

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

    | Оператор | Описание | Пример (для , ) | Результат | | --- | --- | --- | --- | | == | Равно | | True | | != | Не равно | | True | | > | Больше | | False | | < | Меньше | | True | | >= | Больше или равно | | True | | <= | Меньше или равно | | True |

    Сложные решения: логические операторы

    Иногда для принятия решения нужно совпадение сразу нескольких факторов. Банк одобрит кредит, если возраст заемщика больше 18 лет и его доход превышает определенную сумму.

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

    Рассмотрим пример с выдачей кредита. Допустим, минимальный возраст составляет 18 лет, а требуемый доход — 50 000 рублей.

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

    Повторение до достижения цели: цикл while

    Представьте, что вы регистрируетесь на сайте, и система просит придумать пароль длиной не менее 8 символов. Если вы введете короткий пароль, сайт попросит повторить попытку. И так будет продолжаться до тех пор, пока вы не выполните требование.

    Для многократного выполнения одного и того же блока кода используются циклы. Первый из них — цикл while (пока). Он работает по принципу: «пока условие истинно, повторяй действия».

    В этом примере переменная password_length изначально равна 5. Условие истинно, поэтому цикл запускается. Внутри цикла мы увеличиваем длину на 1. Процесс повторяется, пока длина не достигнет 8. Как только условие становится ложным (False), цикл завершается.

    > Итерация свойственна человеку, рекурсия — божественна. > > Питер Дойч, создатель Ghostscript

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

    Перебор известных значений: цикл for

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

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

    Допустим, нам нужно рассчитать, как увеличится банковский вклад за 3 года при ставке 10% годовых. Начальная сумма — 100 000 рублей.

    Функция range(3) создает последовательность из трех чисел: 0, 1 и 2. На каждой итерации переменная year принимает следующее значение из этой последовательности. Обратите внимание, что счет в программировании почти всегда начинается с нуля.

    Функция range() гораздо мощнее, чем кажется на первый взгляд. Она может принимать до трех аргументов: range(старт, стоп, шаг). * старт — число, с которого начинается отсчет (по умолчанию 0). * стоп — число, перед которым отсчет остановится (само это число не включается). * шаг — разность между соседними числами (по умолчанию 1).

    Например, если мы хотим вывести все четные числа от 2 до 10 включительно, мы напишем:

    Программа выведет: 2, 4, 6, 8, 10. Обратите внимание, что мы указали стоп равным 11, так как правая граница не входит в генерируемый диапазон.

    Экстренное торможение: break и continue

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

    Оператор break (прервать) немедленно останавливает цикл целиком, даже если условие все еще истинно или остались неперебранные элементы. Это похоже на стоп-кран в поезде.

    Например, мы ищем нужный товар на складе. Как только мы его нашли, нет смысла проверять остальные коробки:

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

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

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

    Итоги

    * Условные операторы if, elif и else позволяют программе выбирать различные пути выполнения в зависимости от истинности заданных условий. * Логические операторы and, or и not используются для объединения нескольких простых условий в одно сложное. * Цикл while повторяет блок кода до тех пор, пока его условие остается истинным (True). Он идеален для ситуаций с неизвестным числом повторений. * Цикл for применяется для перебора элементов конечной последовательности или выполнения действий заданное количество раз (часто в связке с функцией range()). * Операторы break и continue дают дополнительный контроль над циклами, позволяя досрочно завершать их или пропускать отдельные итерации.