Основы программирования на Python: от первых строк до логических структур

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

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

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

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

Философия языка и роль интерпретатора

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

В мире программирования существует два основных способа перевода текста программы в понятные процессору электрические сигналы: компиляция и интерпретация.

  • Компиляторы (как в языках C++ или Rust) переводят весь текст программы целиком в машинный код еще до запуска. Это долго на этапе подготовки, но очень быстро при исполнении.
  • Интерпретаторы (как в Python) читают код построчно и сразу его выполняют.
  • Это различие критически важно для новичка. Если в середине программы на Python допущена ошибка, она не «сломается» в самом начале. Интерпретатор честно выполнит все строки до проблемного места и только тогда остановится, выдав сообщение об ошибке. Такая интерактивность делает Python идеальным для обучения: вы получаете мгновенную обратную связь от системы.

    Подготовка рабочего пространства: Python и его окружение

    Для того чтобы ваш компьютер «понимал» команды Python, необходимо установить соответствующее программное обеспечение. На текущий момент актуальной является ветка Python 3.x. Важно понимать, что Python 2 и Python 3 — это фактически разные языки, которые не полностью совместимы друг с другом. В 2020 году поддержка второй версии была официально прекращена, поэтому мы будем работать исключительно с версией 3.10 или выше.

    Установка в разных операционных системах

    Процесс установки может отличаться в зависимости от вашей системы, и здесь есть несколько «подводных камней», о которых стоит знать заранее.

  • Windows: Самый простой способ — скачать инсталлятор с официального сайта python.org. Критически важный нюанс: в самом начале установки необходимо поставить галочку в пункте «Add Python to PATH». Если этого не сделать, вы не сможете запускать Python из командной строки, и многие инструменты разработки просто не увидят установленный интерпретатор. PATH — это список путей, по которым операционная система ищет исполняемые файлы. Без этой галочки компьютер будет отвечать «Команда не найдена» на любую попытку запустить код.
  • macOS: В систему уже встроен Python, но обычно это устаревшая версия или минимальный набор для нужд самой ОС. Для разработки рекомендуется установить актуальную версию через менеджер пакетов Homebrew или официальный сайт.
  • Linux: Большинство дистрибутивов поставляются с предустановленным Python 3. Проверить это можно, введя в терминале команду python3 --version.
  • Выбор редактора кода

    Писать код можно даже в обычном «Блокноте», но это путь к бесконечным ошибкам. Профессионалы используют специализированные инструменты: IDE (Integrated Development Environment — интегрированная среда разработки) или продвинутые текстовые редакторы.

  • IDLE: Идет в комплекте с Python. Это очень простая среда, лишенная излишеств. Она отлично подходит для первых пяти минут знакомства, но быстро становится тесной.
  • PyCharm: Мощная профессиональная IDE от компании JetBrains. Она умеет подсказывать ошибки на лету, анализировать структуру проекта и помогать в отладке. Для обучения существует бесплатная версия Community.
  • VS Code (Visual Studio Code): Легкий и гибкий редактор от Microsoft. С установленным расширением для Python он превращается в полноценную среду разработки. Это «золотая середина» для большинства современных разработчиков.
  • Первая программа и интерактивный режим REPL

    После установки Python у вас появляется доступ к инструменту под названием REPL (Read-Eval-Print Loop — цикл «прочитать-выполнить-вывести»). Чтобы запустить его, достаточно открыть терминал (или командную строку) и ввести python (или python3 в macOS/Linux).

    Вы увидите приглашение к вводу в виде трех угловых скобок >>>. Это означает, что интерпретатор готов слушать. Если вы введете `, он тут же вернет . Это режим живого диалога. Но программы редко пишутся в REPL, так как после закрытия окна весь ваш труд исчезнет. Программы сохраняются в файлы с расширением .py.

    Создадим классическую первую программу. В любом текстовом редакторе напишите одну строку:

    Сохраните файл под именем hello.py. Чтобы запустить его, перейдите в терминале в папку с файлом и введите: python hello.py

    Разбор функции print()

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

    Если вы забудете кавычки и напишете print(Hello), Python решит, что Hello — это имя переменной (контейнера с данными), не найдет ее и выдаст ошибку NameError. Это одно из первых правил синтаксиса: данные должны быть четко обозначены своим типом.

    Синтаксис и «правила хорошего тона»

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

    > Пробелы — это не просто украшение, это часть логики программы. Ошибка в один лишний пробел в начале строки приведет к IndentationError. > > The Zen of Python (PEP 20)

    Это решение заставляет программистов писать «чистый» и читаемый код. Существует официальный документ PEP 8, который регламентирует, как должен выглядеть код на Python. Например, стандартный отступ — это всегда 4 пробела. Использование табуляции технически возможно, но крайне не рекомендуется, так как разные редакторы могут отображать длину табуляции по-разному, что ломает структуру кода.

    Комментарии: код для людей

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

    Хорошим тоном считается писать комментарии там, где логика неочевидна, но не стоит комментировать самоочевидные вещи вроде # Выводим текст на экран.

    Ошибки — это нормально

    Важный психологический этап для новичка — перестать бояться красного текста в консоли. Сообщения об ошибках в Python (Traceback) очень информативны. Они обычно состоят из трех частей:

  • Где произошла ошибка: имя файла и номер строки.
  • Контекст: сама строка кода, на которой споткнулся интерпретатор.
  • Тип и описание ошибки: например, SyntaxError: invalid syntax (ошибка в правилах написания) или ZeroDivisionError: division by zero.
  • Чтение этих сообщений — 50% работы программиста. Если программа не работает, первым делом смотрите в самую нижнюю строку сообщения об ошибке.

    Как компьютер исполняет ваш код

    Когда вы запускаете файл hello.py, происходит сложный многоступенчатый процесс. Сначала интерпретатор проверяет синтаксис. Если вы забыли закрыть скобку в print("Hello", программа даже не начнет выполняться — вы сразу получите SyntaxError.

    Если синтаксис верен, Python транслирует ваш текстовый код в промежуточный формат — байт-код. Вы могли замечать появление папок __pycache__ в своих проектах — именно там хранятся эти скомпилированные инструкции. Затем виртуальная машина Python (PVM) выполняет этот байт-код. Такая схема позволяет Python быть кроссплатформенным: один и тот же файл .py будет работать на Windows, Linux и macOS без изменений, так как за адаптацию под конкретное «железо» отвечает сама виртуальная машина.

    Практические нюансы установки библиотек

    Рано или поздно стандартных возможностей Python вам станет не хватать. Для расширения функционала используется менеджер пакетов pip. Он устанавливается автоматически вместе с Python. С его помощью можно скачивать чужой код (библиотеки) из глобального репозитория PyPI.

    Например, команда pip install requests позволит вам в будущем писать программы, которые скачивают данные из интернета. На начальном этапе важно просто знать о существовании этого инструмента и проверять его работоспособность командой pip --version`.

    Итоги первого шага

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

    2. Переменные и базовые типы данных: как компьютер хранит информацию

    Переменные и базовые типы данных: как компьютер хранит информацию

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

    Анатомия переменной: ярлык на ячейке памяти

    Многие новички представляют переменную как коробку, внутри которой лежит значение. Это наглядная, но не совсем точная метафора для Python. На самом деле, переменная в Python — это имя (ссылка), которое прикреплено к объекту в памяти компьютера.

    Когда вы пишете user_age = 25, происходит следующее:

  • Python создает в памяти объект — целое число 25.
  • Python создает имя user_age.
  • Python «приклеивает» ярлык user_age к объекту 25.
  • В этом кроется важное отличие Python от языков вроде C++ или Java. Там переменная — это жестко зарезервированная ячейка памяти определенного размера. В Python же переменная может сегодня ссылаться на число, а завтра — на длинный текст. Это свойство называется динамической типизацией.

    Правила именования: искусство чистого кода

    Чтобы компьютер вас понял, а коллеги-программисты не проклинали при чтении кода, имена переменных должны подчиняться правилам синтаксиса и правилам хорошего тона (PEP 8): * Имя может содержать латинские буквы (a-z, A-Z), цифры и символ подчеркивания _. * Имя не может начинаться с цифры. Запись 1_step вызовет ошибку, а step_1 — нет. * Регистр имеет значение. Salary, salary и SALARY — это три разные переменные. * Нельзя использовать зарезервированные слова (ключевые слова языка), такие как if, else, while, import, def.

    В сообществе Python принято использовать стиль snake_case (змеиный регистр): все буквы строчные, а слова разделяются нижним подчеркиванием. Например, total_price вместо totalprice или TotalPrice. Хорошее имя переменной отвечает на вопрос «Что здесь лежит?», а не «Какого это типа?». Имя user_name гораздо лучше, чем просто s или string1.

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

    Числа — это фундамент вычислений. В Python выделяют два основных типа для работы с ними.

    Тип int (Integers)

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

    Тип float (Floating-point numbers)

    Это числа с дробной частью, например 3.14, -0.001 или 2.0. Важно помнить, что разделителем всегда служит точка, а не запятая.

    Числа float хранятся в памяти в двоичном формате согласно стандарту IEEE 754. Это приводит к интересному нюансу — проблеме точности. Попробуйте выполнить в REPL: 0.1 + 0.2 Результат вас удивит: 0.30000000000000004. Это не ошибка Python, это особенность представления дробей в двоичной системе (точно так же, как мы не можем точно записать в десятичной системе — получается ). Для обычных вычислений это не критично, но в финансовых операциях, где важна каждая копейка, программисты используют специальные инструменты, которые мы изучим позже.

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

    Python поддерживает стандартный набор операций: +, -, — сложение, вычитание, умножение. * / — деление. Важно: в Python 3 деление всегда возвращает float, даже если вы делите 4 / 2. * // — целочисленное деление. Откидывает дробную часть. 7 // 3 даст 2. * % — остаток от деления. 7 % 3 даст 1. Это незаменимый инструмент для проверки четности числа (если x % 2 равен 0, число четное). * — возведение в степень. 2 3 — это восемь.

    Строки (str): работа с текстом

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

    Если внутри строки нужно использовать кавычку, выберите другой тип для обрамления: "I'm a programmer" или используйте экранирование обратным слешем: 'I\'m a programmer'.

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

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

    Если у нас есть строка word = "Python", то: * word[0] — это 'P'. * word[5] — это 'n'. * word[-1] — это последний символ ('n'), отрицательные индексы позволяют считать с конца.

    Строки в Python неизменяемы. Вы не можете написать word[0] = "J", чтобы превратить Python в Jython. Вам придется создать новую строку.

    Форматирование строк

    Часто нам нужно вставить значение переменной внутрь текста. Самый современный и удобный способ — f-строки (formatted strings). Они появились в версии 3.6 и стали стандартом де-факто.

    Префикс f перед кавычками говорит Python: «Ищи фигурные скобки и подставляй туда значения переменных». Это делает код чистым и легко читаемым.

    Логический тип (bool) и пустота (NoneType)

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

    Этот тип данных — «сердце» управления программой. Любое сравнение возвращает логическое значение: * 5 > 3True * 10 == 9False (двойное равно используется для сравнения, одиночное — для присваивания). * "Apple" != "Orange"True (проверка на неравенство).

    Тип None

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

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

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

    Если пользователь ввел 25, и вы сохранили это в age = input(), вы не сможете прибавить к этому числу единицу. Для Python "25" + 1 — это попытка сложить «текст» и «число», что вызовет ошибку TypeError.

    Чтобы это исправить, нужно выполнить явное преобразование: * int("25") превратит строку в целое число 25. * float("3.14") превратит строку в дробное число. * str(100) превратит число в строку "100". * bool(1) превратит единицу в True, а bool(0) — в False.

    Интересный факт: в Python почти любой объект можно привести к логическому типу. Пустые объекты (пустая строка "", число 0, None) превратятся в False, а всё остальное — в True. Это часто используется в сокращенных проверках.

    Динамическая типизация и функция type()

    Как мы уже выяснили, Python сам понимает, какой тип данных перед ним. Это называется неявной типизацией. Вам не нужно писать int x = 5, достаточно x = 5.

    Чтобы узнать, к какому типу относится объект, на который ссылается переменная, используется встроенная функция type().

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

    Как данные хранятся в памяти: объекты и ссылки

    Для глубокого понимания Python важно осознать концепцию id. У каждого объекта в памяти есть свой уникальный идентификатор (адрес). Его можно увидеть с помощью функции id().

    Когда вы пишете:

    Вы не копируете список. Вы создаете второй ярлык b и вешаете его на тот же самый объект в памяти, на который уже смотрит a. Если вы измените список через b, он изменится и для a. Это критически важный момент при работе с изменяемыми типами данных (списками, словарями), о которых мы будем говорить в следующих главах. Однако для чисел и строк (неизменяемых типов) это работает проще: любое «изменение» на самом деле создает новый объект в памяти и перевешивает ярлык на него.

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

    Практический нюанс: арифметика разных типов

    В Python существует иерархия типов при выполнении операций. Если вы складываете int и float, Python автоматически приведет результат к более сложному типу — float, чтобы не потерять точность.

    Например: 5 + 2.0 даст 7.0.

    Это называется неявным приведением типов. Python старается быть дружелюбным и берет на себя рутину, где это возможно без риска логических ошибок. Однако он никогда не станет автоматически превращать строку "5" в число 5 при сложении, так как это могло бы привести к непредсказуемым последствиям: что должен вернуть код "5" + 2? Семь? Или "52"? Чтобы избежать двусмысленности, Python требует от программиста явного указания намерений через функции int() или str().

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