1. Основы Python: от первой строки кода до управления переменными и типами данных
Основы Python: от первой строки кода до управления переменными и типами данных
Представьте, что вы пытаетесь объяснить иностранцу, как приготовить яичницу, но этот иностранец понимает только предельно конкретные команды и не обладает интуицией. Если вы забудете сказать «разбей яйцо», он положит его на сковороду целиком. Программирование на Python — это искусство составления таких инструкций, где роль иностранца играет интерпретатор, а роль рецепта — ваш исходный код. Python стал самым популярным языком в мире не потому, что он «простой», а потому, что его синтаксис максимально приближен к человеческому мышлению, позволяя фокусироваться на логике решения задачи, а не на технических деталях управления памятью компьютера.
Философия интерпретации и первая инструкция
Когда вы запускаете программу на Python, в дело вступает интерпретатор. В отличие от компилируемых языков (как C++ или Rust), где весь код сначала переводится в машинные нули и единицы, а затем запускается, Python читает и выполняет ваш код построчно. Это дает колоссальное преимущество в скорости разработки: вы можете проверить гипотезу, написав одну строку и сразу увидев результат.
Традиционно обучение начинается с функции print(). На первый взгляд, это тривиальный вывод текста на экран. Однако за кулисами происходит сложный процесс: интерпретатор находит функцию в оперативной памяти, передает ей аргумент (строку), преобразует его в поток байтов и отправляет системному вызову операционной системы для отображения в терминале.
Обратите внимание на синтаксис: имя функции, круглые скобки для передачи данных и кавычки для обозначения текста. В Python нет разницы между одинарными ' ' и двойными " " кавычками, если они парные. Это позволяет удобно комбинировать их, если внутри строки нужно использовать кавычку как символ: print("Книга 'Изучаем Python'").
Переменные как именованные ссылки
В большинстве учебников переменные сравнивают с коробками, в которые мы «кладем» данные. Для Python это сравнение технически не совсем верно и может привести к ошибкам в понимании сложных структур данных в будущем. Правильнее представлять переменную как ярлык или бирку, прикрепленную к объекту в памяти.
Когда вы пишете x = 10, происходит три события:
10 в определенной области памяти.x.x связывается с объектом 10 с помощью оператора присваивания =.Это различие критично. Если вы напишете y = x, вы не создадите вторую «коробку» с числом 10. Вы просто приклеите второй ярлык y к тому же самому объекту, где уже висит ярлык x.
Динамическая типизация
Python — язык с динамической типизацией. Это означает, что тип переменной определяется не в момент написания кода, а в момент выполнения, исходя из того, на какой объект она указывает.
В языках со статической типизацией (например, Java) такой трюк не прошел бы: если переменная объявлена как числовая, она навсегда останется числовой. Гибкость Python ускоряет написание кода, но накладывает на программиста ответственность: нужно следить, чтобы в переменную случайно не попали данные, которые сломают последующую логику (например, попытка сложить число со строкой).
Числовые типы: целые и вещественные
Python эффективно работает с числами, разделяя их на две основные категории: целые (int) и числа с плавающей точкой (float).
Целые числа (Integer)
Интересная особенность Python заключается в том, что целые числа имеют произвольную точность. В других языках программирования число ограничено 32 или 64 битами (максимум около ). В Python вы можете вычислять , и ограничением будет только объем вашей оперативной памяти.Числа с плавающей точкой (Float)
Эти числа используются для дробных значений. Они реализованы согласно стандарту IEEE 754. Из-за двоичного представления дробей возникает классический нюанс:Это не ошибка Python, а особенность компьютерной арифметики. Если вам нужна идеальная точность (например, в финансовых расчетах), используются специальные модули, такие как decimal, но для 99% инженерных и аналитических задач стандартного float достаточно.
Арифметические операции
Помимо стандартного сложения + и вычитания -, Python предлагает три вида деления:
/ — обычное деление, результатом которого всегда будет float (даже если ).// — целочисленное деление. Оно отбрасывает дробную часть. Например, даст .% — остаток от деления. даст .Для возведения в степень используется оператор **, а не привычный по математике знак ^ (который в программировании обычно означает побитовое исключающее ИЛИ).
Например, 2 ** 3 вернет 8.
Строки: не просто текст, а последовательности
Строки в Python (str) — это неизменяемые последовательности символов Unicode. Unicode означает, что Python «из коробки» понимает и кириллицу, и эмодзи, и иероглифы.
Индексация и срезы
Поскольку строка — это последовательность, мы можем обращаться к её отдельным элементам по индексу. Важнейшее правило: индексация начинается с нуля.
Срезы (slices) позволяют извлекать подстроки по формуле [start:stop:step].
start: индекс начала (включается).stop: индекс конца (не включается).step: шаг (необязателен).Если мы хотим получить "yth" из "Python", мы используем word[1:4]. Математически это можно представить как полуоткрытый интервал .
Методы строк
Строки обладают богатым набором встроенных инструментов. Важно помнить, что методы не меняют исходную строку (так как она неизменяема), а возвращают новую.
.upper() / .lower() — изменение регистра..strip() — удаление пробелов по краям..replace("что", "на что") — замена подстроки.Особое внимание стоит уделить f-строкам (форматированным строкам), появившимся в Python 3.6. Это самый современный и быстрый способ вставки переменных в текст:
Логический тип (Boolean) и пустота (None)
Тип bool имеет всего два значения: True (Истина) и False (Ложь). Это фундамент всей логики программирования. Любое сравнение возвращает логическое значение:
5 > 3 → True10 == 9 → False (обратите внимание: двойное равно — это сравнение, одинарное — присваивание).В Python существует понятие «истинности» (truthiness) объектов. Например, пустая строка "", число 0 и специальный объект None в логическом контексте ведут себя как False. Почти всё остальное считается True.
None — это уникальный тип данных (NoneType), который используется для обозначения отсутствия значения. Это не ноль и не пустая строка, это буквально «ничего». Его часто используют как значение по умолчанию для аргументов функций или как временную заглушку для переменной.
Преобразование типов (Casting)
Иногда данные приходят к нам не в том формате, который нужен. Например, функция input(), с помощью которой мы получаем данные от пользователя, всегда возвращает строку. Если пользователь ввел "25", и мы попытаемся прибавить к этому 5, Python выдаст ошибку TypeError.
Для решения этой задачи используются функции-конструкторы:
int("25") превратит строку в число.str(100) превратит число в строку.float(10) превратит целое число в 10.0.При преобразовании из float в int Python не округляет число по правилам математики, а просто отсекает дробную часть. int(3.9) превратится в 3. Для честного округления используется встроенная функция round().
Углубление в логику: мутабельность и именование
Одной из самых частых ошибок новичков является непонимание неизменяемости (immutability) базовых типов. Числа, строки и кортежи (о которых мы поговорим позже) нельзя изменить «на месте».
Когда вы делаете так:
Вы не добавили текст к старой строке. Вы создали в памяти новую строку "hello world" и переклеили ярлык s на неё. Старая строка "hello" осталась в памяти без ярлыка, и вскоре её удалит «сборщик мусора» (Garbage Collector) — специальный механизм Python, который автоматически очищает память от объектов, на которые никто не ссылается.
Правила именования переменных
В профессиональной разработке принят стандарт PEP 8. Согласно ему:
snake_case): user_balance, max_speed.a = 500 лучше написать bonus_points = 500.Избегайте использования зарезервированных имен (таких как print, int, str) в качестве названий переменных, иначе вы «перекроете» встроенную функциональность языка, и вызвать print() в коде ниже уже не получится.
Математические операции и приоритеты
В Python действуют стандартные математические приоритеты (PEMDAS/BODMAS): сначала скобки, затем возведение в степень, потом умножение и деление, и в конце — сложение и вычитание.
В коде это будет выглядеть так: (10 + 2) 3 / 2*2.
Важно помнить, что любое деление / превращает результат в float, поэтому мы получили 9.0, а не 9.
Ввод данных и интерактивность
Программа становится полезной, когда она взаимодействует с внешним миром. Функция input() приостанавливает выполнение программы и ждет, пока пользователь введет текст и нажмет Enter.
Этот простой скрипт демонстрирует полный цикл работы базовой программы:
str).float) и математическое вычисление.Комментарии: код для людей
Код читается гораздо чаще, чем пишется. Комментарии в Python начинаются с символа #. Все, что идет после него до конца строки, игнорируется интерпретатором.
Хороший тон — писать комментарии не о том, что делает код (это должно быть понятно из названий переменных), а о том, почему он это делает.
Для многострочных пояснений часто используют тройные кавычки """ текст """, хотя технически это не комментарии, а многострочные строки, которые Python просто игнорирует, если они не присвоены переменной. В будущем мы увидим, что они используются для создания документации к функциям (docstrings).
Граничные случаи и ошибки
Начинающему разработчику важно научиться читать сообщения об ошибках. Python очень дружелюбен в этом плане.
NameError: вы пытаетесь использовать переменную, которая еще не была создана.TypeError: вы пытаетесь совершить действие, недопустимое для этого типа (например, '5' + 5).ValueError: тип правильный, но значение неподходящее (например, int("abc")).Понимание этих основ — переменных как ссылок, динамической типизации и базовых типов — закладывает фундамент. Программирование на Python — это не заучивание команд, а понимание того, как данные текут через вашу программу, меняя свою форму и содержание. В следующей главе мы научим эти данные принимать решения и повторять действия, превращая статические вычисления в живые алгоритмы.