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

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

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

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

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

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

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

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

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

Как установить Python?

  • Перейдите на официальный сайт python.org.
  • В разделе Downloads скачайте последнюю версию для вашей операционной системы (Windows, macOS или Linux).
  • Важный момент для пользователей Windows: При запуске установщика обязательно поставьте галочку напротив пункта Add Python to PATH. Это позволит вам запускать Python из командной строки.
  • Следуйте инструкциям установщика, нажимая «Next».
  • После установки у вас появится IDLE — простая среда разработки, которая идет в комплекте с Python. Однако для серьезной работы программисты обычно используют более продвинутые редакторы кода, такие как VS Code или PyCharm. Для начала обучения нам будет достаточно и простого IDLE или даже онлайн-компилятора.

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

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

    Откройте редактор кода, напишите следующую строку и запустите её:

    Если на экране появилась надпись Hello, World!, поздравляю — вы написали свою первую программу! Разберем, что здесь произошло:

    * print — это функция. Команда компьютеру: «Напечатай то, что находится внутри скобок». * "Hello, World!" — это текст (строка), который мы хотим вывести. Текст в Python всегда заключается в кавычки.

    Особенности синтаксиса Python

    Синтаксис — это набор правил, по которым пишется код. Если вы нарушите эти правила, интерпретатор не поймет вас и выдаст ошибку.

    Отступы (Indentation)

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

    Обычно используется 4 пробела (или одна клавиша Tab) для каждого уровня вложенности. Это делает код визуально чистым и читаемым.

    Пример (пока не вникайте в логику if, просто посмотрите на структуру):

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

    Комментарии

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

    Переменные: хранение данных

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

    [VISUALIZATION: На белом фоне изображена открытая картонная коробка. На боку коробки черным маркером написано имя переменной

    2. Управляющие конструкции: условные операторы if-else и циклы for/while

    Управляющие конструкции: условные операторы if-else и циклы for/while

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

    Представьте, что вы пишете инструкцию для робота. Если вы скажете ему просто «Иди вперед», он упрется в стену и продолжит шагать на месте. Нам нужны инструменты, чтобы сказать: «Если перед тобой стена, поверни направо, иначе иди прямо». А если нужно перенести 100 коробок, мы не будем писать 100 раз команду «Возьми коробку», мы скажем: «Пока есть коробки, переноси их».

    Именно об этих инструментах — условных операторах и циклах — мы и поговорим в этой статье.

    Условные операторы: учим программу думать

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

    В Python для этого используется конструкция if (если). Давайте посмотрим, как это работает.

    Простая проверка: if

    Самый простой вариант условия выглядит так:

    Обратите внимание на двоеточие : после условия и отступ в 4 пробела на следующей строке. Это критически важно. Всё, что написано с отступом, выполнится только в том случае, если условие истинно (True). Строка print("Проверка завершена.") не имеет отступа, поэтому она выполнится в любом случае.

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

    Альтернатива: else

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

    Здесь программа проверит переменную weather. Если там записана строка "дождь", мы увидим сообщение про зонт. В любом другом случае сработает блок else.

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

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

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

    Логические операции

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

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

    * and — истина, только если оба условия верны. * or — истина, если хотя бы одно из условий верно. * not — переворачивает значение (делает ложь истиной и наоборот).

    Пример:

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

    Представьте, что вам нужно вывести на экран фразу «Привет!» 5 раз. Можно написать print 5 раз. А если 1000 раз? Копировать строки — плохая идея. Здесь на помощь приходят циклы.

    Цикл while (пока)

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

    Разберем этот код:

  • Мы создаем переменную-счетчик count и присваиваем ей 1.
  • Python проверяет: ? Да. (Здесь — текущее значение, — предел).
  • Выполняется тело цикла: печатается текст и счетчик увеличивается на 1.
  • Python снова проверяет: ? Да. И так далее.
  • Когда count станет равным 6, условие станет ложным, и цикл остановится.
  • Осторожно: Бесконечный цикл! Если вы забудете увеличить счетчик (count = count + 1), условие всегда будет истинным, и программа зависнет, бесконечно печатая «Попытка номер 1». Это называется бесконечным циклом.

    Цикл for (для)

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

    Самый частый спутник цикла for — это функция range().

    Функция range(5) создает последовательность чисел от 0 до 4. Важно запомнить: верхняя граница не включается. То есть range(5) даст нам числа 0, 1, 2, 3, 4.

    Если мы хотим начать не с нуля, можно указать два числа:

    Здесь мы используем математический интервал , где — начало (включительно), а — конец (исключительно).

    ![Визуализация итерации: цикл for последовательно обрабатывает каждый элемент из набора данных.

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

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

  • break — немедленно прерывает цикл. Мы выходим из него полностью.
  • continue — прерывает только текущую итерацию и переходит к следующей.
  • Пример с break:

    Пример с continue:

    Вложенные конструкции

    Вы можете вкладывать одни конструкции в другие. Внутри if может быть цикл, а внутри цикла — if.

    Главное — следить за отступами. Каждый новый уровень вложенности добавляет еще 4 пробела.

    Заключение

    Сегодня мы сделали огромный шаг вперед. Теперь ваши программы не линейны — они могут ветвиться, принимать решения и выполнять рутинную работу за вас. Условные операторы if-else и циклы for и while — это фундамент алгоритмического мышления.

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

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

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

    В предыдущих статьях мы научились сохранять данные в переменные. Мы создавали коробки, в которые клали одно число или одну строку текста. Но что, если нам нужно сохранить список покупок из 50 пунктов? Создавать 50 переменных (item1, item2, item3...) — это долго, неудобно и неэффективно.

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

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

    Списки (Lists): Универсальные коробки

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

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

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

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

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

    !Индексация списка начинается с нуля: первый элемент имеет индекс 0.

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

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

    Где — это индекс последнего элемента, а — общее количество элементов в списке (длина списка).

    Изменение списков

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

    Кортежи (Tuples): Защищенные списки

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

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

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

    Зачем нужны кортежи, если есть списки?

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

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

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

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

    Доступ к данным

    Чтобы получить значение, мы обращаемся к словарю по ключу:

    !Словарь хранит данные под уникальными именами-ключами, а не под номерами.

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

    Множества (Sets): Уникальность превыше всего

    Множество — это коллекция, которая хранит только уникальные элементы. В множестве нет порядка (нет первого или последнего элемента), и в нем не может быть дубликатов.

    Множества также используют фигурные скобки {}, но без двоеточий, как в словарях.

    Обратите внимание: мы положили три тройки, но в множестве осталась только одна. Множества идеально подходят для задач, где нужно убрать повторы. Например, у вас есть список всех IP-адресов, посетивших сайт, и вы хотите узнать, сколько уникальных посетителей было.

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

    Множества в Python поддерживают математические операции, знакомые вам из школьной программы (теория множеств).

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

    Мы можем найти:

  • Объединение (все приглашенные): A | B
  • Пересечение (общие друзья): A & B
  • Разность (друзья Васи, которых не знает Маша): A - B
  • Как выбрать структуру данных?

    Чтобы не запутаться, используйте эту простую шпаргалку:

  • Нужен упорядоченный список, который будет меняться? Список (list)
  • Нужен упорядоченный список, который НЕЛЬЗЯ менять? Кортеж (tuple)
  • Нужно хранить данные парами «Название — Значение»? Словарь (dict)
  • Нужно хранить уникальные элементы и порядок не важен? Множество (set)
  • Заключение

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

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

    4. Функции, модули и обработка исключений в Python

    Функции, модули и обработка исключений в Python

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

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

    Функции: искусство переиспользования

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

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

    Создание функции

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

    Когда Python встречает def, он запоминает код, но не выполняет его. Выполнение происходит только в момент вызова say_hello().

    Аргументы функции

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

    Здесь name — это переменная, которая существует только внутри функции. Когда мы пишем greet("Алексей"), строка "Алексей" попадает в переменную name.

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

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

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

    Рассмотрим пример вычисления площади круга. Математическая формула выглядит так:

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

    Реализуем это в коде:

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

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

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

    Представьте, что функция — это дом с тонированными стеклами. То, что происходит внутри дома, не видно с улицы.

    Модули: разделяй и властвуй

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

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

    Чтобы использовать модуль, его нужно подключить командой import.

    Пример: Модуль math

    В примере с площадью круга мы задавали число Пи вручную. Но в модуле math оно уже есть, причем гораздо точнее.

    Пример: Модуль random

    Этот модуль незаменим для игр и симуляций.

    Вы также можете создавать свои модули. Если вы сохраните функции в файле my_tools.py, то в другом файле (лежащем в той же папке) вы сможете написать import my_tools и использовать свои функции.

    Обработка исключений: подушка безопасности

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

    Чтобы программа не «падала» при малейшей ошибке, мы используем конструкцию try-except.

    Конструкция try-except

    Логика проста: «Попробуй (try) сделать это. Если возникнет ошибка (except), сделай то».

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

  • Код внутри блока try выполняется строчка за строчкой.
  • Если пользователь введет «привет», функция int() сломается и возникнет ошибка ValueError. Python тут же перепрыгнет в блок except ValueError и напечатает сообщение, не прерывая программу аварийно.
  • Если пользователь введет «0», возникнет ошибка деления на ноль ZeroDivisionError, и сработает соответствующий блок.
  • !Визуальная метафора обработки исключений: страховочная сетка ловит ошибки, предотвращая крах программы.

    Блок finally

    Иногда нужно выполнить действие независимо от того, была ошибка или нет (например, закрыть файл или разорвать соединение с базой данных). Для этого существует блок finally.

    Заключение

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

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

    5. Основы объектно-ориентированного программирования и работа с файлами

    Основы объектно-ориентированного программирования и работа с файлами

    Мы прошли долгий путь от простых переменных до написания собственных функций и модулей. Теперь ваши программы могут принимать решения, повторять действия и обрабатывать ошибки. Но есть еще один уровень абстракции, который используют профессиональные разработчики для создания крупных и сложных систем. Это Объектно-Ориентированное Программирование (ООП).

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

    Часть 1: Объектно-ориентированное программирование

    Представьте, что вы разрабатываете игру-стратегию. У вас есть сотни юнитов: лучники, рыцари, крестьяне. У каждого из них есть здоровье, сила атаки и координаты. Если использовать только списки и словари, ваш код превратится в хаос из тысяч переменных. Вам нужно что-то, что объединит данные (характеристики) и поведение (функции) в единое целое.

    Классы и Объекты

    ООП строится на двух китах: Классах и Объектах.

  • Класс (Class) — это чертеж, шаблон или инструкция. Сам по себе он ничего не делает, он просто описывает, каким должен быть объект.
  • Объект (Object) — это конкретный экземпляр, созданный по этому чертежу.
  • !Слева — класс (чертеж), справа — объекты (реальные машины), созданные по этому чертежу.

    Давайте создадим класс Cat (Кошка). У каждой кошки должно быть имя и возраст, и каждая кошка должна уметь мяукать.

    Разберем этот код:

    * class Cat: — объявление нового класса. * __init__ — это специальный метод (конструктор). Он запускается автоматически в момент создания нового объекта. Именно здесь мы задаем начальные характеристики. self — это ссылка на текущий* объект. Когда мы создаем трех разных кошек, self позволяет программе понять, что имя "Мурзик" относится именно к первой кошке, а не ко всем сразу.

    Теперь создадим объекты (экземпляры) этого класса:

    Атрибуты и Методы

    В терминологии ООП: * Переменные внутри объекта (name, age) называются атрибутами. * Функции внутри класса (meow) называются методами.

    Методы могут делать вычисления. Представьте, что нам нужно вычислить площадь прямоугольника, который мы описываем классом.

    Математическая формула площади прямоугольника:

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

    Реализуем это в коде:

    Наследование: не повторяй себя

    Одна из главных фишек ООП — наследование. Представьте, что у вас есть классы Cat (Кошка) и Dog (Собака). У обоих есть имя, возраст, и оба умеют спать. Чтобы не писать один и тот же код дважды, мы можем создать общий родительский класс Animal (Животное).

    Класс Dog получил всё, что было у Animal, и добавил свое уникальное поведение. Это позволяет строить сложные иерархии и легко расширять программу.

    Часть 2: Работа с файлами

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

    Открытие файла

    Для работы с файлами в Python используется встроенная функция open(). Она принимает два основных аргумента: имя файла и режим работы.

    Основные режимы: * 'r' (read) — чтение. Файл должен существовать. Если нет — ошибка. * 'w' (write) — запись. Если файл не существует, он будет создан. Если существует — старое содержимое удаляется. * 'a' (append) — добавление. Данные дописываются в конец файла. Старое содержимое сохраняется.

    Чтение из файла

    Допустим, у нас есть файл message.txt с текстом.

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

    Менеджер контекста with

    Забыть закрыть файл очень легко, особенно если в программе произошла ошибка до строчки close(). Чтобы этого избежать, в Python используют конструкцию with. Она автоматически закрывает файл, как только блок кода заканчивается, даже если случилась ошибка.

    Это профессиональный способ работы с файлами:

    Метод .strip() убирает лишние пробелы и символы переноса строки, которые есть в файле.

    !Менеджер контекста with гарантирует автоматическое закрытие файла после завершения работы.

    Практический пример: Журнал событий

    Давайте объединим знания. Напишем программу, которая спрашивает имя пользователя и сохраняет его в файл guests.txt.

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

    Заключение

    Сегодня мы затронули две фундаментальные темы. ООП позволяет нам моделировать реальный мир в коде, создавая удобные структуры — классы и объекты. А работа с файлами дает нашим программам «память», позволяя сохранять результаты труда.

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