Программирование на Python с нуля

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

1. Установка Python и первая программа

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

Цель этого урока — установить Python, проверить, что он работает, и запустить первую программу из файла и из терминала.

1) Установка Python

Windows

  • Скачайте установщик Python (обычно выбирают Python 3.x, 64-bit).
  • Запустите установщик.
  • Важно: поставьте галочку “Add Python to PATH” (добавить Python в PATH).
  • Нажмите Install Now.
  • Дождитесь завершения.
  • > Если забыли поставить “Add Python to PATH”, Python установится, но команда python может не работать в терминале. Это исправляется переустановкой или настройкой переменных среды.

    macOS

    Обычно Python можно установить через официальный установщик. В терминале могут встречаться команды python3 и pip3 — это нормально: так отделяют Python 3 от старого python.

    Linux

    Во многих дистрибутивах Python уже установлен. Если нет — устанавливают через менеджер пакетов. В терминале чаще используется команда python3.

    2) Проверка установки

    Откройте Терминал (macOS/Linux) или PowerShell/Командную строку (Windows) и выполните:

    Если команда не находится, попробуйте:

    Ожидаемый результат — строка вида:

    Проверка pip

    pip — это менеджер пакетов (установка библиотек). Проверка:

    Если не работает, попробуйте pip3 --version.

    3) Выбор редактора кода

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

    Варианты:

  • VS Code (удобный редактор, легко настраивается).
  • PyCharm (мощная среда разработки, часто тяжелее).
  • IDLE (ставится вместе с Python, минималистично).
  • Главное требование: вы должны уметь создать файл .py и запустить его.

    4) Первая программа: “Hello, world!”

    Вариант A: запуск в интерактивном режиме

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

  • Откройте терминал.
  • Запустите интерпретатор:
  • (или python3)

  • Введите команду:
  • Для выхода обычно используют:
  • Что происходит:

  • print(...) выводит текст на экран.
  • Кавычки вокруг Hello, world! означают строку (текст).
  • Вариант B: запуск программы из файла

  • Создайте папку, например python-start.
  • Создайте файл hello.py со следующим содержимым:
  • Откройте терминал в этой папке и выполните:
  • Если у вас используется python3, то:

    Ожидаемый вывод:

    5) Частые проблемы и быстрые решения

  • Команда python не найдена
  • - Windows: проверьте, что при установке был включён PATH. - macOS/Linux: попробуйте python3 вместо python.

  • Запускается не та версия Python
  • - Проверьте python --version и python3 --version. - Важно понимать, какой командой вы запускаете ваш файл.

  • Файл не находится
  • - Убедитесь, что терминал открыт в нужной папке. - Проверьте имя файла: hello.py, а не hello.py.txt.

  • Ничего не выводится
  • - Проверьте, что в файле есть print(...). - Убедитесь, что вы запускаете именно этот файл.

    6) Мини-советы по аккуратности

  • Называйте файлы латиницей без пробелов: first_program.py.
  • Не называйте файл python.py или print.py — это может конфликтовать с модулями.
  • Сохраняйте файлы в кодировке UTF-8 (по умолчанию это чаще всего так).
  • ---

    Задания для закрепления

  • Проверьте версию Python на вашем компьютере.
  • Создайте файл my_name.py, чтобы программа выводила ваше имя.
  • Сделайте файл two_lines.py, который печатает две строки (двумя вызовами print).
  • (Чуть сложнее) Создайте файл sum_2_3.py, который выводит сумму чисел 2 и 3.
  • <details> <summary> Ответы </summary>

    1) Проверка версии:

    или

    2) my_name.py (пример):

    3) two_lines.py:

    4) sum_2_3.py:

    </details>

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

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

    Переменная — это имя, под которым программа хранит значение. В Python вы не объявляете тип заранее: он определяется автоматически по присвоенному значению.

    1) Переменные: присваивание и имена

    Присваивание делается оператором =:

    Правила именования

  • Используйте латиницу, цифры и _.
  • Имя не может начинаться с цифры.
  • Регистр важен: age и Age — разные переменные.
  • Хороший стиль — snake_case: user_age, total_sum.
  • Переприсваивание

    Переменная может получать новое значение (и даже другого типа):

    2) Основные типы данных

    int — целые числа

    float — числа с точкой

    > Особенность: 0.1 + 0.2 может дать 0.30000000000000004 из‑за того, как компьютеры хранят дроби. Для начала достаточно помнить: сравнение дробей на точное равенство иногда опасно.

    str — строки (текст)

    Строки можно “склеивать”:

    bool — логические значения

    Только два значения: True и False.

    None — “ничего”

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

    3) Как узнать тип: type()

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

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

    Часто нужно превратить строку в число и наоборот.

    Важно: если строка не похожа на число, будет ошибка:

    5) Ввод: input()

    input() читает строку из клавиатуры и всегда возвращает str.

    Если нужно число — преобразуйте:

    Несколько значений в одной строке

    Частый прием: пользователь вводит, например, два числа через пробел.

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

    6) Вывод: print() удобнее, чем кажется

    Про print(...) вы уже писали в первой программе, теперь — несколько полезных возможностей.

    Несколько аргументов

    print сам добавляет пробелы между аргументами:

    Параметры sep и end

    f-строки (самый удобный формат)

    Внутри {} можно писать выражения:

    7) Мини-практика: небольшая программа

    ---

    Задания для закрепления

  • Создайте переменные a = 7 и b = 3. Выведите их сумму, разность и произведение.
  • Спросите у пользователя имя и город. Выведите строку вида: Имя: ..., город: ... (используйте f-строку).
  • Пользователь вводит два целых числа в одной строке через пробел. Выведите их среднее арифметическое как число с точкой.
  • Пользователь вводит число. Выведите True, если оно чётное, иначе False.
  • <details> <summary> Ответы </summary>

    1)

    2)

    3) Среднее арифметическое: сумма делится на количество чисел (2).

    4) Чётность: число чётное, если остаток от деления на 2 равен 0.

    </details>

    3. Операторы и работа со строками

    Операторы и работа со строками

    Операторы — это «действия» в коде: сложить, сравнить, проверить условие. Строки (str) — один из самых частых типов данных, и с ними есть набор удобных операций и методов.

    1) Арифметические операторы

    Помимо привычных +, -, * есть важные операторы деления:

  • / — обычное деление (результат обычно float)
  • // — целочисленное деление (берёт только целую часть)
  • % — остаток от деления
  • ** — возведение в степень
  • Приоритет операций

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

    Сокращённые присваивания

    Удобно «обновлять» переменную:

    2) Операторы сравнения

    Сравнения возвращают bool (True/False).

  • == равно, != не равно
  • <, <=, >, >=
  • Сравнение строк

    Строки сравниваются лексикографически (по «порядку символов»), что может неожиданно работать при разном регистре:

    Если сравниваете слова без учёта регистра, приводите к одному регистру:

    3) Логические операторы: and, or, not

  • A and B — истинно, если истинны оба
  • A or B — истинно, если истинно хотя бы одно
  • not A — отрицание
  • Частая ошибка: путать and/or

    Например, «число вне диапазона 0..100» пишется так:

    4) Операторы принадлежности и тождественности

    in / not in

    Проверяет, содержится ли элемент в строке (и не только):

    is / is not

    Проверяет, один и тот же ли это объект в памяти. Для начинающих правило простое:

  • Для сравнения значений почти всегда используйте ==.
  • is используйте в основном для сравнения с None.
  • 5) Строки: индексация, срезы, длина

    Индексация

    У строки можно взять символ по индексу (нумерация с 0):

    Срезы

    Срез: s[start:stop:step]. stop не включается.

    len()

    Длина строки:

    > Строки неизменяемы (immutable): нельзя сделать s[0] = 'p'. Вместо этого создают новую строку.

    6) Полезные методы строк (самые частые)

    Приведение регистра

    Удаление пробелов по краям: strip()

    Замена: replace()

    Поиск: find()

    find возвращает индекс первого вхождения или -1, если не найдено.

    Разбиение и склейка: split() и join()

    split() превращает строку в список частей, join() склеивает список строк.

    Проверки начала/конца

    7) Экранирование кавычек и переносы строк

    Если внутри строки нужны кавычки, используйте разные типы кавычек или экранирование \.

    Для многострочного текста:

    ---

    Задания для закрепления

    1) Даны a = 17, b = 5. Выведите: a / b, a // b, a % b.

    2) Пользователь вводит строку. Выведите True, если в строке есть подстрока "python" в любом регистре (например, "PyThOn" подходит).

    3) Дана строка s = "abracadabra". Выведите: 1. первый символ 2. последние 3 символа 3. строку без первого и последнего символа

    4) Пользователь вводит имя и фамилию через пробел. Выведите их в формате Фамилия, Имя (используйте split).

    5) Дана строка с лишними пробелами: " hello world ". Сделайте так, чтобы получилось ровно "hello world" (один пробел между словами, без пробелов по краям).

    <details> <summary> Ответы </summary>

    1)

    2)

    3)

    4)

    5) Вариант через split + join (убирает лишние пробелы и нормализует один пробел между словами):

    </details>

    4. Условия и циклы: управление выполнением

    Условия и циклы: управление выполнением

    Управление выполнением — это способность программы принимать решения и повторять действия. В Python это делается через условия (if) и циклы (while, for).

    > Логические выражения и операторы сравнения (==, <, and, or, not) уже были в статье про операторы — здесь используем их на практике.

    1) Условный оператор if / elif / else

    Базовая форма:

    Важное про отступы

    В Python блок кода задаётся отступами (обычно 4 пробела). Строки внутри if/elif/else должны быть на одинаковом уровне отступа.

    Вложенные условия

    Условия можно вкладывать друг в друга:

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

    Короткая запись (тернарный оператор)

    Когда нужно выбрать одно из двух значений:

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

    2) Цикл while: повторяем, пока условие истинно

    while выполняет блок кода, пока условие True.

    Пример: считаем сумму введённых чисел до 0

    Здесь использованы:

  • while True — «бесконечный» цикл (управляем выходом сами).
  • break — досрочно завершает цикл.
  • Типичная ошибка: бесконечный цикл

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

    Правильно — изменять состояние:

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

    3) Цикл for: перебор значений

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

    range() — самый частый источник чисел

    range(5) даёт числа 0, 1, 2, 3, 4.

    Полезные формы:

    Пример:

    Перебор строки

    Строка — это последовательность символов:

    Счётчики и накопители

    Очень частый шаблон: считаем количество или сумму.

    4) break, continue и else у циклов

    break и continue

  • break — выйти из цикла полностью.
  • continue — пропустить остаток тела и перейти к следующей итерации.
  • else у цикла

    else у цикла выполняется, если цикл завершился без break.

    Это полезно для задач «найти что-то, иначе сообщить, что не найдено».

    5) Практические шаблоны

    1) Валидация ввода

    Пока пользователь не введёт корректные данные:

    2) «Флаг» найдено/не найдено

    Иногда удобнее флаг, чем else у цикла:

    ---

    Задания для закрепления

    1) Пользователь вводит целое число. Выведите: 1. "positive", если число > 0 2. "negative", если число < 0 3. "zero", если число равно 0

    2) Пользователь вводит строку. Выведите True, если строка пустая, иначе False.

    3) Выведите числа от 10 до 1 (включительно) в столбик, используя while.

    4) Пользователь вводит целые числа по одному. Программа суммирует их, пока не встретит отрицательное число. После этого выводит сумму (отрицательное число не включать).

    5) Дано число n (ввод). Выведите сумму квадратов чисел от 1 до n включительно, используя for и range.

    6) Пользователь вводит строку. Найдите и выведите первую букву "p" или "P". Если такой буквы нет — выведите "no". (Сделайте через цикл и break/else.)

    <details> <summary> Ответы </summary>

    1)

    2)

    3)

    4)

    5)

    6)

    </details>

    5. Коллекции: списки, кортежи, множества, словари

    Коллекции: списки, кортежи, множества, словари

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

    1) Список (list) — упорядоченная изменяемая коллекция

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

    Срезы работают так же, как у строк (смотрите статью про строки):

    Изменение списка

    Частые методы списка

    > remove бросит ошибку, если значения нет. Частый приём: сначала проверить if value in items: (оператор in уже встречался в статье про операторы).

    Перебор списка

    Если нужен индекс:

    Полезные функции: len, sum, min, max

    2) Кортеж (tuple) — упорядоченная неизменяемая коллекция

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

    Частый случай — распаковка:

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

    3) Множество (set) — неупорядоченная коллекция уникальных элементов

    Главные свойства:

  • Элементы не повторяются.
  • Нет индексов: нельзя написать s[0].
  • Очень удобно для проверки принадлежности и удаления дублей.
  • Создание

    Добавление, удаление, проверка

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

    4) Словарь (dict) — ключ → значение

    Словарь хранит пары: ключ и значение. Ключи должны быть уникальными.

    Создание и доступ

    Если ключа нет, обращение user["city"] вызовет ошибку KeyError. Более безопасно — get:

    Изменение и добавление

    Удаление:

    Перебор словаря

    Частый шаблон: подсчёт

    5) Когда что выбирать

  • list — порядок важен, элементы могут повторяться, нужно менять/добавлять.
  • tuple — порядок важен, менять нельзя (фиксированные наборы значений).
  • set — нужна уникальность и быстрые проверки in.
  • dict — данные «по ключу»: настройки, свойства объекта, счётчики, таблицы соответствий.
  • ---

    Задания для закрепления

    1) Дан список nums = [5, 2, 9, 2]. Выведите: 1. количество элементов 2. сумму 3. список без повторов (порядок не важен)

    2) Пользователь вводит числа через пробел. Сформируйте список nums (целые числа) и выведите максимум.

    3) Дан кортеж t = ("red", "green", "blue"). Выведите строку вида: green, blue (через запятую и пробел).

    4) Пользователь вводит строку. Выведите количество уникальных символов в ней.

    5) Пользователь вводит строку. Постройте словарь частот символов (как в примере) и выведите частоту для символа 'a' (если 'a' нет — выведите 0).

    <details> <summary> Ответы </summary>

    1)

    2)

    3)

    4)

    5)

    </details>

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

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

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

    1) Функции: «упаковываем» повторяющийся код

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

    Объявление функции: def

    Важно:

  • Код внутри функции выполняется только при вызове.
  • Переменные внутри функции обычно «живут» только внутри неё (про область видимости — ниже).
  • Возврат результата: return

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

    Если return не указан, функция возвращает None.

    «Печать» и «возврат» — разные вещи

  • print(...) — показывает что-то пользователю.
  • return ... — отдаёт результат в программу.
  • Частая ошибка новичков: ожидать, что print “вернёт” значение.

    2) Аргументы функций: как передавать данные

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

    Значения по умолчанию

    Если аргумент часто один и тот же — задайте значение по умолчанию.

    Практический приём: «необязательный параметр» через None.

    > Не используйте изменяемые значения (например, []) как значения по умолчанию — это частый источник багов.

    args и *kwargs (когда нужно «сколько угодно»)

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

    **kwargs собирает именованные аргументы в словарь:

    3) Область видимости: где «видны» переменные

    Переменные, созданные внутри функции, — локальные. Снаружи их не видно.

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

  • Данные передавайте в функцию аргументами.
  • Результаты возвращайте через return.
  • Так код проще тестировать и переиспользовать.

    4) Докстроки: короткая документация прямо в коде

    Докстрока — строка в начале функции, описывающая её назначение.

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

    5) Модули: переиспользование между файлами

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

    Импорт готовых модулей

    Можно импортировать только нужное:

    Можно задавать псевдоним (удобно при длинных именах):

    Свой модуль: пример структуры

    Файлы:

    utils.py:

    main.py:

    Совет по именам: не называйте свои файлы как модули стандартной библиотеки (math.py, random.py), иначе импорт может «подхватить» ваш файл.

    6) «Скрипт или библиотека»: __name__ == "__main__"

    Если файл можно и импортировать, и запускать напрямую, полезно отделять «демо-запуск» от функций.

    При импорте этого файла main() не выполнится автоматически.

    ---

    Задания для закрепления

    1) Напишите функцию clamp(x, low, high), которая возвращает:

  • low, если x < low
  • high, если x > high
  • иначе x
  • 2) Напишите функцию count_words(text), которая считает количество слов в строке. Считайте, что слова разделены пробелами, и лишние пробелы возможны.

    3) Создайте модуль conversions.py с функциями:

  • to_celsius(f)
  • to_fahrenheit(c)
  • В main.py импортируйте модуль и выведите перевод 32F в C и 100C в F.

    4) Напишите функцию area_circle(r), которая возвращает площадь круга. Используйте math.pi. (Проверка: при r = 1 результат должен быть около 3.14159.)

    <details> <summary> Ответы </summary>

    1)

    2)

    3) conversions.py

    main.py

    4)

    </details>

    7. Файлы, ошибки и мини-проект

    Файлы, ошибки и мини-проект

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

    1) Файлы: открытие и режимы

    Файл открывается функцией open(path, mode, encoding=...). Для текстовых файлов почти всегда указывайте encoding="utf-8".

    Самые полезные режимы:

  • "r" — чтение (ошибка, если файла нет)
  • "w" — запись (перезапишет файл целиком)
  • "a" — добавление в конец
  • "x" — создать новый файл (ошибка, если уже существует)
  • Пути:

  • "data.txt" — относительный путь (рядом с запущенной программой)
  • "folder/data.txt" — файл в папке
  • 2) Контекстный менеджер with: безопасное закрытие

    Файл нужно закрывать. Проще всего — через with: файл закроется автоматически даже при ошибке.

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

    Частые способы:

    Прочитать весь файл

    Читать построчно (лучше для больших файлов)

    rstrip("\n") убирает только перенос строки в конце. Если нужно убрать пробелы по краям — используйте strip() (про строки см. статью про методы строк).

    4) Запись в файл

    Перезаписать файл целиком (w)

    Важно: перевод строки \n вы добавляете сами.

    Дописать в конец (a)

    Писать через print

    5) Ошибки (исключения): как не “ронять” программу

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

    Минимальный шаблон:

    Частые исключения в задачах новичка

  • ValueError — неверный формат (например, int("abc"))
  • FileNotFoundError — файла нет, а вы открыли в "r"
  • PermissionError — нет прав на чтение/запись
  • UnicodeDecodeError — файл в другой кодировке (если забыли encoding или файл не UTF‑8)
  • else и finally

    На практике вместо ручного close() чаще используйте with — тогда finally обычно не нужен.

    6) Мини-проект: консольный список дел с сохранением

    Сделаем программу todo.py, которая хранит дела в файле todos.txt. Формат строки:

    0 — не сделано, 1 — сделано.

    Реализация

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

  • Данные читаются/пишутся через load_todos() и save_todos().
  • Отсутствие файла — нормальная ситуация, ловим FileNotFoundError.
  • Неверный ввод номера ловим через ValueError и IndexError.
  • ---

    Задания для закрепления

    1) Создайте файл hello_file.txt и запишите в него 3 строки с любым текстом.

    2) Прочитайте файл hello_file.txt и выведите количество строк в нём.

    3) Пользователь вводит имя файла. Попробуйте прочитать его и вывести первые 100 символов. Если файла нет — выведите no file.

    4) Пользователь вводит числа по одному (ввод строкой). Если введено stop — завершить. Если введено не число — вывести bad и продолжить. В конце сохранить сумму в файл sum.txt.

    <details> <summary> Ответы </summary>

    1)

    2)

    3)

    4)

    </details>