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

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

1. Что такое программирование и как работает компьютер

Что такое программирование и как работает компьютер

Зачем вообще нужно программирование

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

Компьютеры полезны тем, что умеют:

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

    Что такое программа

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

    Программа почти всегда работает с данными — тем, что она получает на вход и что преобразует:

  • числа, текст, картинки
  • файлы на диске
  • данные из интернета
  • нажатия клавиш и клики мыши
  • Когда вы пишете код, вы по сути описываете:

  • какие данные нужны
  • какие шаги нужно выполнить с этими данными
  • какой результат должен получиться
  • Эту последовательность шагов часто называют алгоритмом. Алгоритм — это понятный и конечный план действий для решения задачи.

    Полезные ссылки:

  • Программирование
  • Алгоритм
  • Из чего состоит компьютер

    Чтобы понимать программирование, важно в общих чертах понимать, куда попадает код и кто его выполняет.

    Основные части компьютера:

  • Процессор (CPU) — выполняет команды, одна за другой
  • Оперативная память (RAM) — хранит данные и программы во время работы
  • Накопитель (SSD/HDD) — хранит данные долго: файлы, игры, приложения
  • Устройства ввода/вывода — клавиатура, мышь, экран, сеть и т.д.
  • !Схема показывает, какие основные «части» участвуют в выполнении программ.

    Полезные ссылки:

  • Центральный процессор
  • Оперативная память
  • Как компьютер выполняет программу: общая идея

    Компьютер выполняет команды очень простого уровня. Внутри он оперирует электрическими сигналами, которые удобно представлять как 0 и 1. Такие данные называют двоичными.

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

  • вы пишете код на языке программирования
  • этот код преобразуется в форму, которую может выполнить процессор
  • процессор выполняет команды, используя память и работая с данными
  • Почему существуют языки программирования

    Если бы мы писали напрямую для процессора, это было бы:

  • очень сложно
  • очень долго
  • сильно зависело бы от конкретного компьютера
  • Поэтому люди используют языки программирования — удобные правила записи алгоритмов.

    Языки бывают разными, но почти везде есть базовые вещи:

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

    Когда вы написали программу, её нужно запустить. Есть два очень распространённых подхода.

    Компиляция

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

    Обычно компиляция полезна тем, что:

  • программы часто работают быстро
  • многие ошибки можно найти до запуска
  • Ссылка:

  • Компилятор
  • Интерпретация

    Интерпретатор выполняет программу «на лету»: читает команды и сразу выполняет их.

    Это часто удобно тем, что:

  • проще быстро попробовать идею
  • можно запускать код почти сразу после написания
  • Ссылка:

  • Интерпретатор
  • !Сравнение двух способов: компиляция заранее и интерпретация во время выполнения.

    Роль операционной системы

    Операционная система (Windows, macOS, Linux, Android) — это главный набор программ, который управляет ресурсами компьютера.

    Операционная система:

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

    Ссылка:

  • Операционная система
  • Что происходит при запуске программы: упрощённая картина

    Когда вы запускаете программу, в упрощённом виде происходит следующее:

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

  • накопитель — долгое хранение (файл программы лежит там)
  • оперативная память — временная рабочая зона (программа работает там)
  • Пример «программы» на человеческом языке

    Представьте задачу: посчитать стоимость покупки.

    Алгоритм может звучать так:

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

    Ошибки в программах и как к ним относиться

    Ошибки в программах — это нормально.

    Часто встречаются:

  • ошибки синтаксиса — вы нарушили правила языка (как опечатка в слове)
  • ошибки логики — правила языка не нарушены, но программа делает не то, что вы хотели
  • Слово баг означает ошибку в программе.

    Чтобы искать ошибки, используют:

  • внимательное чтение кода
  • вывод промежуточных значений
  • отладчик — инструмент, который позволяет выполнять программу по шагам и смотреть, что происходит внутри
  • Ссылки:

  • Отладчик
  • Ошибка программного обеспечения
  • Как эта тема поможет в следующих уроках

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

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

    2. Переменные, типы данных и операции

    Переменные, типы данных и операции

    Как эта тема связана с предыдущей

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

    Что такое переменная

    Переменная — это имя, которое ссылается на некоторое значение (данные), с которым работает программа.

    Проще: переменная помогает вам сохранить результат и использовать его дальше.

    Пример на Python:

    Здесь:

  • price — имя переменной
  • 120 — значение
  • = — операция присваивания (положили значение в переменную)
  • Важно: = в программировании чаще всего означает присвоить, а не равно.

    !Иллюстрация того, что имя переменной ссылается на значение в памяти

    Зачем нужны типы данных

    Тип данных отвечает на вопрос: что именно хранится в переменной и какие операции с этим допустимы.

    Например:

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

    Базовые типы данных

    Ниже — самые частые типы, с которых начинают.

    | Тип | Как выглядит | Пример | Для чего подходит | |---|---|---|---| | Целое число | int | 10, -5, 0 | счётчики, количество, индексы | | Дробное число | float | 3.14, 0.5 | измерения, проценты, средние значения | | Строка (текст) | str | "Привет" | имена, сообщения, данные из ввода | | Логическое значение | bool | True, False | проверки, условия, фильтры |

    Полезная деталь про float: дробные числа в компьютере хранятся приближённо, поэтому иногда возможны эффекты вроде 0.1 + 0.2 даёт не совсем 0.3. Это нормально для большинства бытовых задач, но важно помнить.

    Операции над числами

    Арифметика

    Основные арифметические операции (на примерах Python):

    | Операция | Запись | Пример | Результат | |---|---|---|---| | Сложение | + | 2 + 3 | 5 | | Вычитание | - | 7 - 2 | 5 | | Умножение | | 4 5 | 20 | | Деление | / | 10 / 4 | 2.5 | | Целочисленное деление | // | 10 // 4 | 2 | | Остаток от деления | % | 10 % 4 | 2 | | Степень | | 2 3 | 8 |

    Зачем нужны // и %:

  • // удобно, когда важна целая часть (например, сколько полных коробок)
  • % удобно, когда важен остаток (например, сколько осталось предметов)
  • Пример:

    Приоритет операций

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

    Пример:

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

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

    Конкатенация (склеивание)

    Повторение строки

    Длина строки

    Сравнения и логические операции

    Чтобы программа могла принимать решения, нужны сравнения.

    Операции сравнения

    Они возвращают значение типа bool.

    | Сравнение | Запись | Пример | Результат | |---|---|---|---| | Равно | == | 5 == 5 | True | | Не равно | != | 5 != 3 | True | | Больше | > | 7 > 10 | False | | Меньше | < | 2 < 4 | True | | Больше или равно | >= | 5 >= 5 | True | | Меньше или равно | <= | 3 <= 1 | False |

    Важно: ==проверка равенства, а =присваивание.

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

    | Операция | Смысл | Пример | |---|---|---| | and | истинно, если истинно и слева, и справа | age >= 18 and has_ticket | | or | истинно, если истинно хотя бы одно | is_student or is_teacher | | not | меняет True на False и наоборот | not is_raining |

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

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

    Частая ситуация у новичков: данные приходят как текст, а вы хотите считать.

    В Python ввод пользователя через input() всегда даёт строку.

    Пример ошибки по смыслу:

    Так нельзя, потому что age — строка, а 1 — число.

    Правильный вариант:

    Распространённые преобразования:

  • int("123") превращает строку в целое число
  • float("3.14") превращает строку в дробное число
  • str(100) превращает число в строку
  • Важно: не всякую строку можно превратить в число. Например, int("12a") вызовет ошибку. Ошибки — нормальная часть разработки: вы увидели сообщение, поняли причину, исправили.

    Хорошие имена переменных

    Имя переменной — это часть объяснения вашего кода.

    Рекомендации:

  • используйте понятные слова: price, total_sum, user_name
  • избегайте слишком коротких имён без смысла: a, b, x (кроме маленьких примеров)
  • придерживайтесь одного стиля (в Python часто используют snake_case)
  • Мини-пример: считаем стоимость покупки

    Этот пример связывает всё вместе: переменные, числа, ввод, преобразование типов и операции.

    Здесь происходит следующее:

  • получаем данные от пользователя
  • приводим их к нужным типам (float и int)
  • умножаем
  • выводим результат
  • Что дальше

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

    3. Ввод и вывод: общение программы с пользователем

    Ввод и вывод: общение программы с пользователем

    Как эта тема связана с предыдущими

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

    Теперь добавим то, без чего большинство программ выглядят «закрытыми»: ввод и вывод. Это способы:

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

    !Цикл общения: пользователь вводит данные, программа обрабатывает и выводит результат.

    Что такое ввод и вывод

    Ввод — когда программа получает данные извне (в нашем случае: с клавиатуры).

    Вывод — когда программа показывает данные наружу (в нашем случае: в консоль).

    Это важная идея: обычно программа делает одно и то же в любой задаче.

  • получает входные данные
  • обрабатывает их (алгоритм)
  • выдаёт результат
  • Вывод в консоль: функция print()

    Главный инструмент вывода в Python — функция print().

    Пример:

    Что умеет print()

    print() может выводить не только строки, но и числа, и вообще почти любые значения.

    Здесь важно:

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

  • print (Python built-in functions)
  • Перевод строки и параметры sep и end

    По умолчанию print() добавляет перевод строки в конце, то есть следующий вывод начнётся с новой строки.

    Иногда это нужно менять.

    1) Разделитель между частями вывода задаётся параметром sep.

    2) То, что будет добавлено в конце, задаётся параметром end.

    В результате получится Загрузка...готово, потому что в первом print() мы убрали перевод строки.

    Ввод с клавиатуры: функция input()

    Для ввода используется функция input().

    Важное правило:

  • input() всегда возвращает строку (str), даже если пользователь ввёл число
  • Документация:

  • input (Python built-in functions)
  • Почему после input() часто нужны преобразования типов

    Так как input() возвращает строку, с числами нужно быть аккуратным.

    Пример типичной ошибки:

    Если ввести 2 и 3, программа выведет 23, потому что это склеивание строк.

    Правильный вариант:

    Если вам нужны дробные числа, используйте float():

    Форматирование вывода: как красиво показывать результаты

    Пользователь воспринимает программу по тому, что она пишет. Поэтому полезно уметь выводить результат понятно.

    Способ через запятую в print()

    Это простой и часто достаточный способ.

    f-строки: удобный способ вставлять значения в текст

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

    Почему это удобно:

  • читается почти как обычный текст
  • не нужно вручную склеивать строки и ставить пробелы
  • Документация:

  • f-strings (Python reference)
  • Округление при выводе

    Частая задача: вывести число с ограниченным количеством знаков после запятой.

    Пример:

    Здесь :.2f означает:

  • вывести число как дробное (f)
  • оставить 2 знака после запятой (.2)
  • Ввод нескольких значений за одну строку

    Иногда пользователь вводит несколько значений через пробел, например 10 20.

    Для этого удобно сочетать split() и преобразование типов.

    Чуть короче (пока просто как пример чтения, детали можно изучать позже):

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

    Программа как диалог: хороший стиль ввода и вывода

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

  • Пишите понятные подсказки в input() (что именно нужно ввести и в каком формате)
  • Подписывайте вывод (не просто 42, а Ответ: 42)
  • Старайтесь не перегружать пользователя лишними сообщениями
  • Пример мини-диалога для расчёта стоимости:

    Что происходит «под капотом»: стандартный ввод и стандартный вывод

    Внутри большинства программ есть идея потоков ввода и вывода.

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

    Если интересно, где это описано в Python:

  • sys.stdin and sys.stdout (Python sys module)
  • Итог

    Теперь у вас есть полный минимальный цикл работы программы:

  • получить данные через input()
  • сохранить их в переменные
  • при необходимости преобразовать типы (int, float, str)
  • выполнить вычисления и операции
  • вывести результат через print() (обычно с понятными подписями и форматированием)
  • Дальше это станет основой для более «умных» программ: когда вы добавите условия, программа сможет по-разному реагировать на ввод пользователя.

    4. Условия и логика: ветвления в программе

    Условия и логика: ветвления в программе

    Как эта тема связана с предыдущими

    Ранее вы научились:

  • хранить данные в переменных
  • понимать типы данных (int, float, str, bool)
  • получать ввод через input() и выводить результат через print()
  • сравнивать значения и получать True или False
  • Теперь добавим ключевую возможность: ветвление. Это когда программа выполняет разные действия в зависимости от условия.

    Зачем нужны условия

    Без условий программа всегда идёт по одному пути: получает данные, считает, выводит. Но реальная логика почти всегда выглядит так:

  • если пользователь ввёл корректные данные, продолжаем
  • если сумма больше 1000, даём скидку
  • если пароль неверный, показываем ошибку
  • Условия превращают программу из калькулятора в принимающую решения.

    !Схема показывает, как программа выбирает один из двух путей в зависимости от условия

    Что такое условие и булева логика

    Условие в коде — это выражение, которое вычисляется в логическое значение: True или False.

    Чаще всего условие строится из сравнений:

  • x > 10
  • name == "Ира"
  • age >= 18
  • И объединяется логическими операциями:

  • and означает и (оба условия должны быть истинны)
  • or означает или (достаточно одного истинного)
  • not означает не (переворачивает True/False)
  • Про сравнения и bool вы уже читали ранее, но сейчас это становится механизмом управления ходом программы.

    Оператор if: как устроено ветвление в Python

    В Python ветвление делается с помощью конструкций if, elif, else.

    Базовый вид:

    Важно:

  • после условия стоит двоеточие :
  • действия внутри ветки записываются с отступом (обычно 4 пробела)
  • отступы в Python имеют смысл: они определяют, где начинается и заканчивается блок
  • Пример:

    Здесь строка print("Хорошего дня!") выполнится всегда, потому что она не внутри блока if.

    Справка по синтаксису:

  • The if statement (Python reference)
  • else: что делать, если условие ложно

    else означает иначе.

    Ровно одна ветка будет выполнена:

  • если условие истинно, выполнится блок после if
  • иначе выполнится блок после else
  • elif: несколько вариантов выбора

    Если вариантов больше двух, используют elif (иначе если).

    Как это работает:

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

    Вложенные условия: if внутри if

    Иногда внутри одной ветки нужно сделать ещё одну проверку.

    Вложенность полезна, но если её слишком много, код становится сложнее читать. Часто вложенные условия можно заменить на более ясные составные условия с and/or.

    Составные условия: and, or, not

    and: оба условия должны быть истинны

    or: достаточно одного условия

    not: отрицание

    Скобки помогают избежать путаницы и делают намерение более явным.

    Важная деталь: короткое вычисление (short-circuit)

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

  • в A and B, если A ложно, то B не проверяется
  • в A or B, если A истинно, то B не проверяется
  • Практический смысл: это может защищать от ошибок.

    Пример идеи:

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

    Частая тема: проверка диапазона

    Проверка, что число лежит в диапазоне от 1 до 10 включительно:

    Можно короче (и так чаще делают в Python):

    Это читается почти как обычная математика: 1 меньше или равно x и x меньше или равно 10.

    Истинность значений: что считается True и False

    Иногда в условиях используют не сравнение, а само значение:

    Здесь пустая строка "" считается ложной, а непустая — истинной.

    Это называется проверкой истинности значений.

    Справка:

  • Truth Value Testing (Python documentation)
  • Типичные ошибки новичков

  • путать = и ==
  • забывать двоеточие : после if/elif/else
  • делать неправильные отступы (Python воспринимает это как другую структуру программы)
  • сравнивать числа со строками из input() без int() или float()
  • Пример ошибки с типами:

    Так нельзя: age — строка. Нужно:

    Мини-проект: скидка в магазине

    Напишем программу, которая:

  • спрашивает сумму покупки
  • если сумма больше или равна 1000, применяет скидку 10%
  • выводит итог
  • Обратите внимание на подход:

  • условие отвечает только за выбор действий
  • вычисление и вывод остаются простыми и читаемыми
  • Итог

    Теперь вы умеете управлять поведением программы:

  • строить условия из сравнений
  • использовать if, elif, else
  • комбинировать условия через and, or, not
  • аккуратно работать с отступами и блоками
  • Следующий логичный шаг после ветвлений — научиться повторять действия (например, спрашивать ввод, пока он неверный). Для этого в программировании используют циклы.

    5. Циклы: повторение действий и обработка данных

    Циклы: повторение действий и обработка данных

    Как эта тема связана с предыдущими

    Ранее вы научились:

  • получать данные через input() и показывать результат через print()
  • хранить значения в переменных и выполнять операции
  • делать ветвления через if/elif/else
  • Но многие реальные задачи требуют не выбора из вариантов, а повторения действий:

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

    !Схема показывает, что цикл проверяет условие перед каждой итерацией и либо выполняет тело, либо завершает работу

    Что такое цикл и итерация

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

    Итерация — это один «круг» выполнения цикла.

    Почти любой цикл можно описать тремя идеями:

  • когда начинать
  • когда остановиться
  • что делать на каждом шаге
  • В Python есть два основных вида циклов:

  • while — повторять, пока условие истинно
  • for — повторять, перебирая элементы или выполняя шаги заданное число раз
  • Цикл while

    Синтаксис while

    Общий вид:

    Правила те же, что и у if:

  • после условия стоит :
  • внутри блока обязательны отступы
  • условие должно давать True или False
  • Документация:

  • The while statement
  • Пример: считаем от 1 до 5

    Что здесь важно понять:

  • x = 1 — мы задаём начальное значение
  • while x <= 5: — пока условие истинно, выполняется тело цикла
  • x = x + 1 — мы изменяем x, чтобы однажды условие стало ложным и цикл завершился
  • Если забыть изменять x, цикл может стать бесконечным.

    Частый сценарий: ввод до правильного значения

    Например, просим число от 1 до 10 и повторяем вопрос, пока пользователь не введёт корректно.

    Здесь not (1 <= number <= 10) означает: повторять, пока число не подходит.

    Бесконечный цикл и управляемый выход

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

    Шаблон:

    Так часто делают в программах-диалогах.

    break: досрочно выйти из цикла

    break немедленно завершает цикл.

    continue: пропустить текущую итерацию

    continue не завершает цикл, а переходит к следующей итерации.

    Здесь пустая строка просто игнорируется.

    Цикл for

    for в Python чаще всего используют для перебора:

  • элементов последовательности (строки, списки и другие)
  • чисел из диапазона через range()
  • Документация:

  • The for statement
  • for по диапазону: range()

    range() помогает сделать «счётчик».

  • range(5) даёт числа 0, 1, 2, 3, 4
  • range(1, 6) даёт числа 1, 2, 3, 4, 5
  • Документация:

  • range
  • Пример: вывести квадраты чисел от 1 до 5.

    Накопление результата: сумма чисел

    Один из самых важных шаблонов в программировании — накопление.

    Пример: найти сумму чисел от 1 до n.

    Смысл переменной total:

  • в начале там «пустая» сумма 0
  • на каждом шаге добавляем очередное число
  • в конце получаем итог
  • Перебор символов строки

    Строка — это последовательность символов, и for умеет перебирать её напрямую.

    Здесь ch — текущий символ строки на каждой итерации.

    while или for: как выбирать

    Ориентируйтесь на вопрос как вы понимаете повторение:

  • используйте for, если заранее понятно, что именно перебираем (числа из range, символы строки)
  • используйте while, если повторение зависит от условия и заранее неизвестно, сколько будет итераций (например, ввод до корректного значения)
  • Вложенные циклы

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

    Пример: прямоугольник из * размером height на width.

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

    Типичные ошибки новичков в циклах

  • бесконечный цикл из-за того, что переменная-счётчик не меняется
  • ошибка на один в range() (например, забыли, что верхняя граница не включается)
  • неправильные отступы внутри тела цикла
  • попытка сравнивать числа со строками (если забыли int() после input())
  • Хорошая привычка для отладки циклов:

  • временно добавлять print() внутри цикла, чтобы видеть, как меняются переменные
  • Мини-проект: «копилка» — суммируем ввод, пока не введут 0

    Задача:

  • пользователь вводит числа по одному
  • если введён 0, программа заканчивает ввод
  • программа выводит сумму и количество введённых (не считая ноль)
  • Что здесь тренируется:

  • цикл while True
  • выход через break
  • накопление суммы и счётчика
  • Итог

    Теперь вы умеете:

  • повторять действия с помощью while и for
  • контролировать цикл через break и continue
  • использовать range() для повторений заданное число раз
  • делать важные шаблоны обработки данных: накопление и подсчёт
  • Дальше на базе циклов обычно изучают структуры данных (например, списки) и пишут первые программы, которые обрабатывают наборы значений, а не одно число за раз.

    6. Функции и модульность: как писать понятный код

    Функции и модульность: как писать понятный код

    Как эта тема связана с предыдущими

    До этого вы писали программы как последовательность команд с:

  • переменными и типами данных
  • вводом и выводом через input() и print()
  • условиями if/elif/else
  • циклами for и while
  • На этом этапе появляется типичная проблема: код начинает расти, повторяться, его становится трудно читать и менять.

    Функции решают эту проблему: они помогают разбивать программу на понятные куски, переиспользовать код и делать проекты аккуратнее.

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

    Что такое функция

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

    У функции обычно есть:

  • имя (например, calc_total)
  • входные данные (параметры)
  • действия (тело функции)
  • результат (возвращаемое значение), если он нужен
  • В Python функции создают с помощью def.

    Справка:

  • The def statement (Python documentation)
  • Зачем функции нужны на практике

    Функции помогают:

  • не копировать одинаковый код (уменьшают повторы)
  • дать сложному куску кода понятное имя
  • тестировать и отлаживать части программы по отдельности
  • читать программу «сверху вниз» как план действий
  • Первый пример: выносим повтор в функцию

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

    С функцией это выглядит так:

    Здесь read_int() — наша функция «прочитать целое число». Мы описали её один раз и используем много раз.

    Параметры и аргументы

    Термины очень похожи, но смысл разный.

  • Параметр — это переменная в объявлении функции.
  • Аргумент — это конкретное значение, которое передают при вызове.
  • Пример:

    Позиционные и именованные аргументы

    В Python можно передавать аргументы:

  • позиционно (по порядку)
  • именованно (по имени параметра)
  • Оба варианта корректны.

    Возврат результата: return

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

    Чем return отличается от print()

  • print() показывает значение пользователю (вывод в консоль).
  • return отдаёт значение обратно в программу (в место вызова).
  • Пример:

    Здесь функция не печатает площадь — она её возвращает. А уже снаружи решаем, что с ней делать: вывести, сравнить, сложить с другой площадью.

    Ранний выход из функции

    return может использоваться, чтобы завершить работу функции раньше.

    Функция читается как набор правил: если возраст странный — сразу False, иначе проверяем условие.

    Справка:

  • The return statement (Python documentation)
  • Локальные переменные и область видимости

    Переменные, созданные внутри функции, обычно локальные: они существуют только внутри этой функции.

    Если попытаться использовать x снаружи, будет ошибка, потому что переменная «живёт» только внутри demo().

    Это полезно: функции не мешают друг другу своими временными переменными.

    Глобальные переменные: почему с ними осторожнее

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

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

    Справка:

  • Naming and binding (Python documentation)
  • Как писать функции понятными

    Имена функций

    Хорошее имя функции — это короткое описание действия.

  • calc_total() — посчитать итог
  • read_int() — прочитать целое число
  • print_receipt() — напечатать чек
  • В Python обычно используют стиль snake_case.

    Рекомендации по стилю:

  • PEP 8 — Style Guide for Python Code
  • Докстринг: короткое описание внутри функции

    Докстринг — это строка в начале тела функции, которая объясняет, что функция делает.

    Докстринг помогает вам самим через неделю и помогает другим людям читать код.

    Справка:

  • Documentation Strings (Python documentation)
  • Модульность: как собирать программу из функций

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

    Один из полезных принципов для новичка:

  • одна функция — одна понятная обязанность
  • Примеры обязанностей:

  • функция чтения данных (ввод)
  • функция вычислений (логика)
  • функция вывода результата
  • Так вы избегаете функций, которые делают «всё сразу».

    Модули: как подключать готовые возможности через import

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

    Пример с модулем math:

  • math — модуль
  • math.sqrt — функция из модуля
  • Справка:

  • math — Mathematical functions
  • Вариант from ... import ...

    Иногда импортируют конкретное имя:

    Так короче, но новичкам важно помнить: если вы импортировали много имён напрямую, можно случайно запутаться, откуда что взялось. Поэтому на старте часто проще и понятнее import math.

    Справка:

  • The import system (Python documentation)
  • Мини-проект: аккуратный расчёт суммы покупки

    Соберём небольшую программу из функций. Задача:

  • спросить цену и количество
  • применить скидку 10%, если сумма не меньше 1000
  • вывести итог
  • Что важно в этом примере:

  • каждая функция делает маленькую часть работы
  • вычисления отделены от ввода и вывода
  • программу легко расширять (например, добавить налог или несколько товаров)
  • Итог

    Теперь вы умеете писать более взрослый и понятный код:

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

    7. Мини-проекты: калькулятор, викторина и анализ простых данных

    Мини-проекты: калькулятор, викторина и анализ простых данных

    Как эта тема связана с предыдущими

    К этому моменту вы уже умеете:

  • хранить данные в переменных и понимать типы (int, float, str, bool)
  • делать ввод и вывод через input() и print()
  • управлять логикой через if/elif/else
  • повторять действия через циклы while и for
  • разбивать программу на функции и возвращать результат через return
  • Теперь самое полезное: собрать эти навыки в мини-проекты. Мини-проект — это небольшая программа, в которой есть:

  • понятный сценарий для пользователя
  • несколько ветвлений и повторений
  • аккуратная структура через функции
  • Мы сделаем три программы:

  • консольный калькулятор
  • мини-викторину
  • анализ набора введённых чисел
  • !Общая схема того, как устроены мини-проекты: ввод → обработка → вывод

    Общий принцип: отделяем ввод, логику и вывод

    Когда программа становится больше пары строк, полезно разделять её на части:

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

    Мини-проект: консольный калькулятор

    Что должен уметь калькулятор

    Сценарий:

  • показать меню операций
  • прочитать выбор пользователя
  • запросить два числа
  • выполнить операцию
  • вывести результат
  • повторять, пока пользователь не выберет выход
  • Операции возьмём базовые:

    | Команда | Операция | |---|---| | 1 | сложение | | 2 | вычитание | | 3 | умножение | | 4 | деление | | 0 | выход |

    Важно для деления:

  • делить на ноль нельзя, поэтому нужна проверка
  • Код калькулятора

    Что здесь тренируется

  • while True как цикл-меню
  • break для выхода
  • функция calc(), которая возвращает результат через return
  • проверка ошибок через if (деление на ноль, неизвестная команда)
  • Справка по базовым функциям:

  • input — Python built-in functions
  • print — Python built-in functions
  • The while statement — Python reference
  • Мини-проект: викторина (вопросы и подсчёт баллов)

    Идея викторины

    Викторина — это отличный тренажёр для:

  • условий
  • подсчёта результата (накопление)
  • функций (чтобы не копировать одинаковый код)
  • Мы сделаем простую версию:

  • программа задаёт несколько вопросов
  • пользователь вводит ответ
  • программа говорит, верно или нет
  • в конце показывает итоговый счёт
  • Функция одного вопроса

    Сделаем функцию ask_question(). Она:

  • печатает вопрос
  • принимает ответ
  • сравнивает его с правильным
  • возвращает 1, если ответ верный, иначе 0
  • Полная программа викторины

    Как улучшать викторину дальше

    Без новых тем (списки, файлы) вы уже можете улучшить проект:

  • принимать ответы без учёта регистра (например, "Bool" и "bool")
  • добавлять подсказки, если ответ неверный
  • делать режим повтора: играть снова или выйти
  • Подсказка про регистр:

  • метод строки lower() превращает текст в нижний регистр
  • справка: str.lower — Python documentation
  • Мини-проект: анализ простых данных (сумма, среднее, минимум, максимум)

    Задача

    Пусть пользователь вводит целые числа. Программа должна:

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

    Важный шаблон: накопление и первые значения

    С суммой всё просто: начинаем с 0 и прибавляем.

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

    Один из простых подходов:

  • прочитать первое число отдельно
  • если оно 0, значит данных нет
  • иначе считаем его и как сумму, и как минимум, и как максимум
  • дальше читаем остальные числа циклом
  • Код анализатора

    Что здесь тренируется

  • цикл while с break по условию завершения
  • несколько «накопителей» сразу: total, count, min_value, max_value
  • аккуратная обработка ситуации, когда данных нет (пользователь сразу ввёл 0)
  • Как понять, что мини-проект получился

    Проверьте себя по простым критериям:

  • программа запускается без ошибок на обычных вводах
  • пользователь видит понятные подсказки и подписи результатов
  • в коде нет больших повторяющихся кусков (их лучше выносить в функции)
  • вы можете быстро изменить правило (например, добавить новую операцию в калькулятор) и не переписывать всё
  • Что дальше

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

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