Основы программирования: Путь новичка

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

1. Введение в IT: как работают компьютеры, алгоритмы и выбор первого языка

Введение в IT: как работают компьютеры, алгоритмы и выбор первого языка

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

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

Как устроен компьютер: анатомия цифрового помощника

Чтобы научиться управлять компьютером, нужно понимать, с кем мы имеем дело. Компьютер — это не умный собеседник. Это невероятно быстрый, но абсолютно буквальный исполнитель. Он не понимает намёков, интонаций или контекста. Он делает ровно то, что ему сказали.

Железо (Hardware)

Давайте представим компьютер как кухню ресторана. Это поможет нам понять роли основных компонентов:

  • Процессор (CPU) — это Шеф-повар. Он выполняет работу: режет, жарит, варит. Чем мощнее процессор, тем быстрее шеф-повар машет ножом. Но шеф-повар может делать только одно действие за раз (или несколько, если у него много рук — ядер), но делает это с безумной скоростью.
  • Оперативная память (RAM) — это рабочий стол перед шеф-поваром. На нём лежат продукты, которые нужны прямо сейчас. Стол быстрый, до всего легко дотянуться, но его размер ограничен. Если выключить свет (перезагрузить компьютер), всё со стола уберут.
  • Жесткий диск (HDD/SSD) — это кладовая и холодильник. Там продукты могут храниться годами. Места много, но чтобы достать ингредиент, шеф-повару нужно время: сходить в кладовую, найти, принести на рабочий стол.
  • !Аналогия устройства компьютера: Процессор как повар, Оперативная память как рабочий стол, Жесткий диск как склад.

    Язык компьютера: Бит и Байт

    В глубине своей электронной души компьютер понимает только два состояния: есть сигнал (1) и нет сигнала (0). Это называется двоичной системой счисления.

    Минимальная единица информации — это бит (0 или 1). Но один бит может описать слишком мало (только «да» или «нет»). Поэтому биты объединяют в группы. Стандартная группа из 8 битов называется байт.

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

    Где — это количество возможных комбинаций (вариантов значений), — основание двоичной системы (так как у нас всего два символа: 0 и 1), а — количество битов.

    Например, в одном байте (8 бит) можно закодировать:

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

    Что такое алгоритм?

    Слово «алгоритм» звучит страшно, но на деле вы используете их каждый день. Алгоритм — это четкая последовательность действий, приводящая к ожидаемому результату.

    Пример алгоритма из жизни — рецепт чая:

  • Взять чайник.
  • Налить в него воду.
  • Включить чайник.
  • ЕСЛИ воды нет, ТО вернуться к шагу 2.
  • Ждать, пока вода закипит.
  • Положить пакетик чая в кружку.
  • Залить кипятком.
  • В программировании всё точно так же. Мы пишем инструкции, используя логические конструкции:

    * Последовательность: делай А, потом Б. * Ветвление (Условия): если случилось Х, делай Y, иначе делай Z. * Циклы: повторяй действие А, пока не наступит событие Б.

    !Блок-схема, показывающая логику простого бытового алгоритма.

    > Программирование — это искусство объяснять тупому компьютеру, что именно вы от него хотите, так подробно, чтобы он не смог ошибиться.

    Языки программирования: от машинного кода к человеческому

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

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

    1. Низкоуровневые языки (Машинный код и Ассемблер)

    Это языки, максимально близкие к «железу». Плюсы:* Максимальный контроль над процессором и памятью, высочайшая скорость. Минусы:* Очень сложно писать и читать. Нужно знать устройство процессора досконально.

    2. Высокоуровневые языки

    Это современные языки (Python, Java, C++, JavaScript). Они похожи на английский язык. Вместо управления ячейками памяти вы пишете команды вроде print("Hello") (напечатай "Привет") или if x > 10 (если икс больше 10).

    Но как компьютер понимает английские слова? Ему нужен переводчик. В мире IT есть два типа таких переводчиков:

    * Компилятор: Берет весь ваш текст программы, переводит его целиком в машинный код (создает отдельный файл, например .exe) и только потом запускает. (Примеры: C++, Go). * Интерпретатор: Читает вашу программу строчка за строчкой и сразу выполняет её, как синхронный переводчик. (Примеры: Python, JavaScript, PHP).

    Муки выбора: какой язык учить первым?

    Новичков часто пугает обилие языков. Их сотни! Но популярных — около десятка. Выбор первого языка зависит от ваших целей.

    Вот краткий обзор популярных направлений:

    | Язык | Где используется | Сложность для новичка | | :--- | :--- | :--- | | Python | Искусственный интеллект, анализ данных, веб-сайты, автоматизация | Низкая (Легкий старт) | | JavaScript | Веб-сайты (всё, что движется в браузере), серверы | Средняя | | Java / C# | Корпоративные системы, банки, Android-приложения | Выше средней | | C++ | Сложные игры, движки, высокопроизводительный софт | Высокая | | Swift | Приложения для iPhone и Mac | Средняя |

    Наш выбор: Python

    Для этого курса мы выбрали Python. Почему?

  • Читаемость: Код на Python выглядит почти как обычный текст на английском. В нем минимум лишних скобок и знаков.
  • Популярность: Это один из самых востребованных языков в мире. На нем пишут Google, NASA, Netflix.
  • Универсальность: Выучив основы Python, вы сможете пойти в веб-разработку, создание ботов или науку о данных (Data Science).
  • Заключение

    Сегодня вы узнали, что компьютер — это не магия, а сложный калькулятор, управляемый инструкциями. Вы поняли, что программирование — это написание алгоритмов (рецептов) на языке, который специальная программа-переводчик превращает в нули и единицы.

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

    Краткие итоги:

    * CPU считает, RAM хранит временное, HDD хранит вечное. * Компьютер понимает только 0 и 1. * Алгоритм — это пошаговая инструкция. * Мы будем учить Python, потому что он дружелюбен к новичкам.

    2. Фундамент кода: переменные, типы данных и базовые операции

    Фундамент кода: переменные, типы данных и базовые операции

    В предыдущей статье мы сравнили компьютер с кухней ресторана, где процессор — это шеф-повар, а оперативная память (RAM) — это его рабочий стол. Сегодня мы переходим от теории к практике. Мы научимся раскладывать «продукты» (данные) по контейнерам и выполнять с ними основные действия.

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

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

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

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

    Как создать переменную в Python?

    В Python создание переменной происходит невероятно просто. Вам нужно придумать имя и присвоить ему значение с помощью знака равно =.

    Давайте разберем, что здесь произошло:

  • Мы выделили место в памяти (взяли пустую коробку).
  • Положили туда значение (строку "Alex", число 25).
  • Наклеили на коробку этикетку (user_name, age).
  • !Визуализация концепции переменных как коробок с данными

    > Важно: В программировании знак = означает не «равно» (как в математике), а «присвоить». Мы говорим компьютеру: «Возьми значение справа и положи его в переменную слева».

    Правила именования (Этикет)

    Компьютеру всё равно, как вы назовете переменную: x, y или super_mega_box_2000. Но код читают люди. В Python принят стиль snake_case (змеиный регистр): слова пишутся маленькими буквами и разделяются нижним подчеркиванием.

    * Хорошо: my_salary, player_health, is_game_over * Плохо: MySalary (стиль Java/C#), mysalary (нечитаемо), x (непонятно, что это) * Запрещено: начинать имя с цифры (1st_place — ошибка) и использовать пробелы (my salary — ошибка).

    Типы данных: почему нельзя сложить кота и лампу?

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

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

    Вот «Большая Четверка» базовых типов данных:

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

    Это обычные числа без дробной части. Они могут быть положительными, отрицательными или нулем.

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

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

    3. Строки (String или str)

    Это текст. Любой набор символов, заключенный в кавычки. Python понимает и одинарные ', и двойные " кавычки.

    > Если вы обернете число в кавычки ("25"), для компьютера оно перестанет быть числом и станет просто текстом (картинкой цифры).

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

    Самый простой тип, имеющий всего два значения: Истина (True) или Ложь (False). Это переключатель света: он либо включен, либо выключен.

    | Тип Python | Пример | Аналогия из жизни | | :--- | :--- | :--- | | int | 10 | Целое яблоко | | float | 10.5 | Полтора литра воды | | str | "Привет" | Записка на бумаге | | bool | True | Выключатель света |

    Базовые операции: Математика и магия строк

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

    Арифметика

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

    * Сложение: + * Вычитание: - Умножение: * Деление: / (результат всегда float, даже если делится нацело)

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

    #### Целочисленное деление (//) Отбрасывает дробную часть.

    Пример: 7 // 2 вернет 3 (потому что 3.5 превращается в 3).

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

    Математически это можно записать так:

    Где — делимое, — делитель, — неполное частное, а — остаток. В Python операция % возвращает именно .

    Пример: 7 % 2 вернет 1. Почему? Потому что в семерку двойка влезает 3 раза (), и . Остаток — 1.

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

    Строки тоже можно складывать! Это называется конкатенация.

    А еще строки можно умножать на числа:

    Но вы не можете сложить число и строку. Операция "Мне " + 20 + " лет" вызовет ошибку. Компьютер не понимает, как сложить слово и математическую величину. Чтобы это сработало, нужно превратить число в строку.

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

    Иногда нам нужно изменить тип данных «на лету». Для этого используются функции с названиями типов:

    * str(10) "10" (Число стало строкой) * int("5") 5 (Строка стала числом) * float(5) 5.0 (Целое стало дробным)

    Исправим нашу ошибку с возрастом:

    Диалог с пользователем: input() и print()

    Программа, которая работает сама в себе, скучна. Мы хотим взаимодействия.

    Вывод данных: print()

    Эту команду вы уже видели. Она «печатает» то, что вы ей передадите, на экран (в консоль).

    Ввод данных: input()

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

    > Критически важно: Функция input() ВСЕГДА возвращает строку (str). Даже если пользователь ввел цифры «100», для программы это будет текст «100».

    Если вы хотите спросить возраст и прибавить к нему год, вам нужно сразу преобразовать ввод:

    Или короче:

    !Схема ввода-вывода данных: от пользователя к компьютеру и обратно

    Заключение

    Сегодня мы заложили первый кирпич в фундамент ваших знаний. Вы узнали:

  • Переменные — это коробки для хранения информации.
  • Типы данных (int, float, str, bool) определяют, что можно делать с содержимым коробок.
  • Динамическая типизация Python позволяет легко менять содержимое, но требует внимательности.
  • Ввод/Вывод — это способ общения программы с внешним миром.
  • В следующей статье мы научим программу принимать решения. Мы разберем логические операторы и условные конструкции if/else. Готовьтесь, ваш код станет «умным»!

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

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

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

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

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

    Условные конструкции: Искусство выбора

    В основе любого интеллектуального поведения лежит слово «ЕСЛИ». В программировании это реализуется с помощью конструкции if.

    Анатомия выбора

    Давайте переведем фразу «Если на улице холодно, надень шапку» на язык Python.

    Обратите внимание на две критически важные вещи:

  • Двоеточие (:) в конце строки с if. Оно говорит Python: «Дальше будет блок команд, относящийся к этому условию».
  • Отступ (Indentation). Строки print сдвинуты вправо (обычно на 4 пробела). В Python отступы — это не просто красота, это закон. Всё, что сдвинуто, выполняется только если условие истинно. Последняя строка print("Я иду гулять.") не имеет отступа, поэтому она выполнится в любом случае, независимо от погоды.
  • !Блок-схема работы условного оператора if

    А если нет? Конструкция else

    Часто нам нужен план «Б». «Если есть молоко, купи молоко, иначе купи сливки».

    Блок else (иначе) выполняется только тогда, когда условие в if оказалось ложным (False).

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

    Жизнь не всегда черно-белая. Иногда вариантов больше двух. Для этого существует elif (сокращение от else if — «иначе если»).

    Представьте светофор:

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

    Операторы сравнения: Инструменты судьи

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

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

    > Важно: Один знак = — это присваивание (положить значение в коробку). Два знака == — это сравнение (равно ли содержимое коробок?). Это самая частая ошибка новичков.

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

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

    В Python есть три слова для связки условий:

  • and (И) — Истина, только если оба условия верны.
  • or (ИЛИ) — Истина, если хотя бы одно условие верно.
  • not (НЕ) — Переворачивает значение (Истину делает Ложью и наоборот).
  • Циклы: Магия повторения

    Представьте, что вам нужно вывести на экран фразу «Я не буду кидаться мелом» 100 раз. Писать 100 строк print? Ни в коем случае. Программисты ленивы, поэтому они придумали циклы.

    Цикл — это конструкция, которая повторяет блок кода несколько раз.

    Цикл while (Пока)

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

    Опасность: Если вы забудете уменьшать количество яблок (apples = apples - 1), условие apples > 0 всегда будет истинным. Программа зависнет в бесконечном цикле. Это черная дыра программирования.

    !Принцип работы цикла while на бытовом примере

    Цикл for (Для каждого)

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

    Результат:

    А как же повторить действие ровно 10 раз? Для этого есть функция-генератор range().

    Функция range(5) создает последовательность чисел от 0 до 4 (всего 5 штук). Компьютерный счет всегда начинается с нуля!

    Математика циклов

    Давайте посмотрим, зачем нужны циклы на примере математики. Допустим, нам нужно найти сумму всех чисел от 1 до 100.

    Без программирования мы могли бы использовать формулу суммы арифметической прогрессии:

    Где — сумма членов, — количество чисел (100), — первое число (1), а — последнее число (100).

    В коде это решается циклом, который просто складывает числа в копилку:

    Этот код работает для любого диапазона, и вам не нужно помнить школьные формулы.

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

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

    * break — досрочно ломает цикл и выходит из него. (Пример: мы искали ключ в связке, нашли его, дальше перебирать нет смысла). * continue — пропускает текущий круг и переходит к следующему. (Пример: мы перебираем яблоки, гнилое выкидываем и сразу берем следующее, не моя его).

    Заключение

    Теперь ваш код умеет думать и работать усердно.

  • if-elif-else позволяют программе ветвиться и реагировать на разные ситуации.
  • Циклы while и for позволяют выполнять рутинную работу тысячи раз за доли секунды.
  • Логические операторы помогают строить сложные условия.
  • В следующей статье мы разберем Функции. Это способ упаковывать ваш код в новые команды, чтобы не писать одно и то же много раз. Это как научить собаку команде «Голос», вместо того чтобы каждый раз объяснять ей, как открывать рот и издавать звук.

    Практикуйтесь, экспериментируйте с условиями и не бойтесь ошибок — это лучший способ учиться!

    4. Структурирование и оптимизация: функции, методы и модульность

    Структурирование и оптимизация: функции, методы и модульность

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

    Представьте, что вы пишете книгу, но не делите её на главы и абзацы. Или строите дом, но каждый раз заново изобретаете кирпич. Это неэффективно. В программировании существует принцип DRYDon't Repeat Yourself (Не повторяй себя).

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

    Функции: ваши личные заклинания

    Вспомните, как мы считали площадь круга в школе. Вы не выводили формулу каждый раз заново. Вы просто знали: «Чтобы найти площадь, нужно применить формулу ».

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

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

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

    Мы только что создали (объявили) функцию. Но если запустить этот код, на экране ничего не появится. Почему? Потому что мы создали инструмент, но не воспользовались им. Чтобы функция сработала, её нужно вызвать:

    Аргументы: передача ингредиентов

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

    Теперь наша функция универсальна. name — это переменная, которая существует только внутри функции и принимает то значение, которое вы ей передали при вызове.

    !Визуальная метафора функции: входные данные превращаются в результат.

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

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

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

    Представьте, что вы просите повара приготовить пиццу: * Если повар использует print, он просто показывает вам фотографию пиццы. * Если повар использует return, он отдает вам коробку с горячей пиццей, которую вы можете съесть или унести домой.

    Пример математической функции:

    > Важно: Команда return немедленно завершает работу функции. Всё, что написано после неё, выполнено не будет.

    Область видимости: что происходит в Вегасе...

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

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

    Методы: функции, привязанные к объектам

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

    Вспомните собаку. У неё есть действия, которые может делать только она. Собака может лаять(). В коде это выглядело бы как dog.bark().

    Примеры методов строк:

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

    Модульность: не изобретайте велосипед

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

    Модуль — это файл с кодом (функциями и переменными), который можно подключить к своей программе с помощью команды import.

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

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

    Формула площади круга:

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

    Реализация в коде:

    Пример: Случайности и модуль random

    Хотите сделать игру, где компьютер загадывает число? Вам нужен модуль random.

    Зачем нам всё это?

    Разделение кода на функции и модули дает три огромных преимущества:

  • Читаемость: Вместо 1000 строк сплошного текста вы видите 10 аккуратных функций с понятными именами.
  • Переиспользование: Написав функцию один раз, вы можете использовать её в сотне разных мест.
  • Отладка: Если функция сломалась, вы чините только её, не боясь сломать остальную программу.
  • Заключение

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

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

    5. Хранение информации и введение в объектно-ориентированное программирование

    Хранение информации и введение в объектно-ориентированное программирование

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

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

    Это неудобно, громоздко и совершенно не подходит для реальных задач. Что, если продуктов будет сто? А если мы не знаем заранее, сколько их будет?

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

    Списки (Lists): Поезд с данными

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

    Создание списка

    Списки в Python обозначаются квадратными скобками [].

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

    Чтобы достать что-то из списка, нужно знать номер вагона. Этот номер называется индексом.

    > Главное правило программиста: Счет всегда начинается с нуля.

    Если у нас есть список shopping_list, то: * "Хлеб" лежит под индексом 0. * "Молоко" — под индексом 1. * "Яйца" — под индексом 2.

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

    Доступ к элементу осуществляется так:

    Основные операции со списками

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

  • Добавление (append): Прицепляет новый вагон в конец поезда.
  • Изменение: Мы можем заменить содержимое конкретного вагона.
  • Длина списка (len): Узнаем количество вагонов.
  • Словари (Dictionaries): Ключ к успеху

    Списки хороши, когда нам важен порядок (первый, второй, третий). Но что, если нам нужно найти телефон друга по его имени? Перебирать весь список номеров, пока не найдем нужное имя — долго.

    Для таких задач существуют словари (в других языках их называют хеш-таблицами или ассоциативными массивами).

    Словарь работает как реальный бумажный словарь или телефонная книга. Данные хранятся парами: Ключ — Значение.

    Создание словаря

    Словари обозначаются фигурными скобками {}.

    Здесь "Alex" — это ключ, а "+79001112233"значение.

    Доступ по ключу

    В словарях нет порядковых номеров (индексов 0, 1, 2...). Чтобы получить значение, вы «зовете» его по ключу.

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

    Когда использовать список, а когда словарь?

    * Нужен упорядоченный набор (очередь, список дел, история сообщений)? Используйте Список. * Нужно быстро находить данные по какому-то признаку (имя пользователя, ID товара, название города)? Используйте Словарь.

    ---

    Введение в ООП: Программирование как моделирование мира

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

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

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

    Класс и Объект: Чертеж и Дом

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

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

    Пишем первый класс на Python

    Давайте создадим класс Cat (Кот). В Python имена классов принято писать с БольшойБуквы (CamelCase).

    Код выглядит сложным? Давайте разберем его по винтикам.

    #### 1. __init__ — Конструктор Это функция с особым именем (два подчеркивания, init, два подчеркивания). Python запускает её автоматически, когда мы создаем новый объект. Её задача — настроить начальные характеристики.

    #### 2. self — Это «Я» Вы заметили странное слово self, которое стоит первым аргументом?

    Представьте, что у нас есть три кота. Когда один из них мяукает, как программа поймет, чье именно имя нужно вывести?

    self — это ссылка объекта на самого себя. * Когда Барсик выполняет код, self — это Барсик. * Когда Мурзик выполняет код, self — это Мурзик.

    Фраза self.name = name переводится как: «Моё (self) имя теперь равно тому, что передали в переменной name».

    Создание объектов

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

    Обратите внимание: мы написали функцию meow всего один раз внутри класса, но работает она для всех котов, используя их уникальные имена. В этом сила ООП.

    Зачем нам ООП?

    Вы можете спросить: «Зачем эти сложности? Я мог бы просто хранить имя кота в переменной».

    Да, для одного кота это сработает. Но представьте, что вы делаете игру-стратегию. У вас есть 1000 юнитов: лучники, рыцари, крестьяне. У каждого свое здоровье, своя позиция на карте, свой урон.

    Без ООП вам пришлось бы создавать тысячи переменных или гигантские, запутанные списки. С ООП вы просто пишете один класс Archer (Лучник) и штампуете армию:

    Это делает код чистым, структурированным и понятным.

    Заключение

    Сегодня мы сделали огромный шаг вперед. Мы перешли от простых переменных к сложным структурам:

  • Списки позволяют хранить коллекции данных по порядку.
  • Словари позволяют находить данные по ключу.
  • Классы и Объекты позволяют моделировать реальный мир, объединяя данные и поведение в единое целое.
  • В следующей статье мы применим все эти знания на практике и создадим ваш первый полноценный проект — текстовую игру или полезного бота. Готовьтесь, будет интересно!