
Python для начинающих: быстрый старт в программировании

Введение
Этот материал — практичный старт по Python: что это за язык, зачем он нужен новичку и инженеру, как установить интерпретатор, где запускать команды и как читать ошибки без паники. После введения вы пройдёте установку, напишете первый скрипт и поймёте, куда двигаться дальше 🚀
Кому подойдёт
Новичкам без опыта; студентам и аналитикам; тестировщикам, администраторам и DevOps; разработчикам с другим стеком для скриптов, интеграций и прототипов.
Что такое Python
Высокоуровневый интерпретируемый язык с динамической типизацией и богатой стандартной библиотекой. Де-факто стандарт — реализация CPython. Есть альтернативы: PyPy с JIT, MicroPython, Jython/IronPython для JVM/.NET. В курсе фокус на CPython.
Почему Python
- Низкий порог входа. Читаемый синтаксис, минимум шаблонов.
 - Широкая экосистема. Веб, данные, ML/AI, автоматизация.
 - Кроссплатформенность. Windows, macOS, Linux, контейнеры.
 - Сообщество. Много примеров и библиотек на PyPI.
 
Что вы получите
- Проверенную установку и рабочее окружение.
 - Первые команды в REPL и запуск скриптов.
 - Алгоритм чтения ошибок и короткий цикл отладки.
 - Маршрут следующего шага без лишней теории.
 
Как работать с материалом
Двигайтесь по цепочке: установка → REPL → первый скрипт → основы синтаксиса → практика. Команды выполняйте сразу после чтения раздела, результат проверяйте тут же. Если появилась ошибка — смотрите последнюю строку и действуйте по подсказке.
Минимальные требования
- ПК с правами установки ПО и интернетом.
 - Базовые навыки терминала: открыть консоль, перейти в папку, запустить команду.
 
Быстрая проверка окружения
# показать версию интерпретатора
python --version
# если команда не найдена
python3 --version
Ответ вида «Python 3.x.y» означает, что интерпретатор установлен и PATH настроен 🙂
Первый контакт: REPL
# запуск интерактивной оболочки
python
# попробуйте выражения
2 + 2
"Hello, " + "world!"
len([1, 2, 3])
# выход из REPL
exit()
Первый скрипт и запуск
# файл hello_world.py
print("Привет, мир!")
# запуск из папки проекта
python hello_world.py
Версии и изоляция
Рекомендуется актуальная ветка 3.x. Для разных проектов используйте отдельные виртуальные окружения venv.
# создать окружение
python -m venv .venv
# активировать
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # Windows
# проверить активную версию
python -c "import sys; print(sys.version)"
Экосистема: 3 элемента
- Интерпретатор. Выполняет ваш код.
 - pip. Устанавливает сторонние библиотеки.
 - venv. Изолирует зависимости по проектам.
 
# базовый цикл с пакетами
pip install requests
pip list
pip freeze > requirements.txt
Как читать ошибки
# типовой случай
NameError: name 'messege' is not defined
Смотрите на тип исключения и строку, где оно возникло. Здесь опечатка в имени переменной. Исправьте и перезапустите ⚙️
Практики с первого дня
- Говорящие имена и форматирование по PEP 8.
 - Отдельная папка на проект, зависимости в requirements.txt.
 - Частые короткие запуски и малые итерации правок.
 
Что дальше
Далее — установка и настройка, основы синтаксиса, управление потоком, работа с файлами и мини-проект для закрепления. После него проще перейти к вебу, данным или автоматизации 💡
Установка и подготовка окружения
Скачивание дистрибутива
Перейдите на официальный сайт Python и скачайте актуальную версию 3.x для своей ОС: Windows, macOS или Linux. Для стабильности берите рекомендованный релиз и архитектуру системы (x64).
Установка и PATH
- Windows. Запустите установщик, отметьте пункт Add Python to PATH, выберите Install Now.
 - macOS. Установите .pkg, при необходимости поставьте инструменты разработчика Xcode Command Line Tools; альтернативно используйте Homebrew.
 - Linux. Используйте менеджер пакетов дистрибутива или официальный tar/ppa; часто Python 3 уже предустановлен.
 
Проверка установки
# версия интерпретатора
python --version
python3 --version # если первая команда не сработала
py -V # Windows-лаунчер, если доступен
# расположение исполняемого файла
which python # macOS/Linux
where python # Windows
Ожидаете строку вида «Python 3.x.y». Если интерпретатор не найден, переустановите с корректным PATH или используйте полное имя python3.
pip и обновление
# версия pip
pip --version
python -m pip --version
# обновление pip
python -m pip install --upgrade pip
Если команда pip не найдена, используйте форму python -m pip.
Быстрый тест REPL
# запуск интерактивной оболочки
python
# проверка базовых выражений
2 + 2
print("Привет, Python!")
exit()
Минимальный venv для изоляции
# создание окружения в папке проекта
python -m venv .venv
# активация
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # Windows
# проверка, что используете venv
python -c "import sys; print(sys.prefix)"
После активации команды python и pip работают внутри проекта и не конфликтуют с глобальными пакетами.
Выбор IDE
- VS Code. Лёгкий редактор с расширением Python, встроенный терминал и дебаг.
 - PyCharm. Полноценная IDE с умной навигацией и инструментами тестирования.
 - Jupyter. Ячейки для экспериментов с данными и визуализацией.
 
На старте хватит VS Code или PyCharm Community. Проверьте запуск скриптов и интеграцию с venv ✅
Типичные сбои и быстрые решения
- Команда «python» не найдена. Используйте python3 или переустановите с опцией PATH; на Windows проверьте «App Execution Aliases» и отключите дубликаты.
 - pip ставит пакеты «не туда». Активируйте venv и используйте python -m pip.
 - Путаница версий 3.10/3.11/3.12. Создайте отдельные venv под каждый проект и фиксируйте зависимости в requirements.txt.
 
Основы синтаксиса
Ключевые правила: отступы четырьмя пробелами формируют блоки; регистр важен; строки берутся в одинарные или двойные кавычки; комментарии начинаются с #; инструкция завершается переводом строки, но логическую строку можно переносить в скобках. Код ниже оформлен в блоках для наглядности ✍️
Переменные и типы данных
Имена в snake_case. Тип объявлять не нужно — он определяется при присваивании. Базовые типы: int, float, bool, str, list, tuple, dict, set, NoneType. Проверка: type() и isinstance(). Преобразования: int(), float(), str(), bool(). Изменяемость: list/dict/set — изменяемые; str/tuple/int/float/bool — неизменяемые.
# примеры значений
x = 10
pi = 3.14
is_ok = True
name = "Алиса"
items = [1, 2, 3]
point = (10, 20)
user = {"id": 1, "name": "Bob"}
tags = {"py", "ml"}
nothing = None
# динамическая типизация
x = 10
x = "десять" # теперь str
# копирование списка (поверхностное)
a = [1, 2]
b = a[:] # новый объект
Операторы и выражения
Арифметика: + − * / // % **. Сравнение: == != < <= > >=. Логика: and, or, not. Принадлежность: in, not in. Идентичность: is, is not. Сокращённые присваивания: +=, -=, *= и т.д. Строки форматируются через f-строки, format() или конкатенацию.
a = 7; b = 3
s = a + b # 10
d = a - b # 4
m = a * b # 21
q = a / b # 2.333... (float)
f = a // b # 2 (целая часть)
r = a % b # 1
p = a ** b # 343
# цепочка сравнений
0 <= a < 10
# короткое замыкание логики
name = input() or "Гость"
# форматирование строк
user = "Ada"
msg1 = "Hi, " + user
msg2 = f"Hi, {user}"
msg3 = "{}: {}".format("score", 10)
Условные операторы
Блоки определяются отступами. Пустые строки/коллекции и 0 считаются ложью. Для кратких присваиваний используйте тернарный оператор. В Python 3.10+ есть match/case.
age = 18
if age >= 18:
status = "взрослый"
elif age >= 14:
status = "подросток"
else:
status = "ребёнок"
# тернарная форма
msg = "OK" if age >= 18 else "FAIL"
# сопоставление с образцом
code = 404
match code:
case 200: text = "OK"
case 404: text = "Not Found"
case _: text = "Other"
Циклы for и while
for итерирует по коллекциям; while повторяет, пока условие истинно. break прерывает цикл, continue пропускает итерацию. Блок else у циклов выполняется, если цикл завершился без break.
# for по строке и диапазону
for ch in "abc":
print(ch)
for i in range(3):
print(i) # 0, 1, 2
# enumerate и обход словаря
for i, v in enumerate(["a", "b", "c"], start=1):
print(i, v)
for k, v in {"a": 1, "b": 2}.items():
print(k, v)
# while с else
n = 3
while n > 0:
print(n)
n -= 1
else:
print("старт")
Генераторы-«comprehensions» дают компактные записи.
squares = [x * x for x in range(5)]
evens = {x for x in range(10) if x % 2 == 0}
index = {c: i for i, c in enumerate("abc")}
Ловушки: смешивание табов и пробелов, лишние отступы вне блока, изменение списка во время итерации, забытое двоеточие после if/for/while. Держите автоформатирование включённым и тестируйте маленькими шагами ✅
Первая программа
Hello, world
Создайте файл hello_world.py в рабочей папке и добавьте одну строку кода. Это проверит, что интерпретатор и вывод работают корректно 🙂
# файл hello_world.py
print("Привет, мир!")
Запуск из терминала
# перейдите в папку с файлом
python hello_world.py
# альтернативы, если команда не срабатывает
python3 hello_world.py
py hello_world.py # Windows-лаунчер
В консоли должна появиться строка «Привет, мир!». Если видите сообщение об ошибке — внимательно прочитайте последнюю строку traceback и действуйте по подсказке.
Запуск из IDE
- VS Code. Откройте папку проекта, создайте файл, установите расширение Python, нажмите ▶ в правом верхнем углу или выполните команду Run Python File.
 - PyCharm. Создайте проект, файл hello_world.py, щёлкните правой кнопкой и выберите Run.
 - Jupyter. Создайте ноутбук, добавьте ячейку с 
print("Привет, мир!")и выполните её. 
Мини-экскурсия по вводу/выводу
# чтение строки из ввода
name = input("Введите имя: ")
print("Привет,", name)
Функция input() всегда возвращает строку; при необходимости приводите типы вручную: int(input()), float(input()).
Структура мини-проекта
project/
hello_world.py
README.md # краткое описание
.venv/ # виртуальное окружение (необязательно, но рекомендуется)
Храните один проект в одной папке, не смешивайте учебные файлы с системными. Если используете venv, активируйте его перед запуском скриптов.
Типичные ошибки и быстрые решения
- Indentationerror. Используйте 4 пробела на уровень, не смешивайте табы и пробелы.
 - NameError. Проверьте имена переменных и регистр букв.
 - UnicodeEncodeError. Сохраните файл в UTF-8; в терминале используйте шрифт с поддержкой кириллицы.
 
Пакеты и виртуальные окружения
Зачем это нужно
Виртуальное окружение изолирует зависимости каждого проекта, а менеджер пакетов pip ставит и обновляет библиотеки. Так вы избегаете конфликтов версий и делитесь воспроизводимыми настройками ✅
Создание и активация venv
# создать окружение в папке проекта
python -m venv .venv
# активировать окружение
source .venv/bin/activate # macOS/Linux
.venv\Scripts\activate # Windows
# деактивировать
deactivate
После активации приглашение терминала обычно показывает имя окружения, а команды python и pip работают внутри него.
Базовые команды pip
# установить пакет
pip install requests
# установить конкретную версию
pip install "pandas==2.2.2"
# обновить пакет
pip install --upgrade numpy
# удалить пакет
pip uninstall requests
# список установленных
pip list
Если pip не находится или ставит «мимо» окружения, используйте форму python -m pip внутри активированного venv.
Фиксация зависимостей
# зафиксировать версии в файл
pip freeze > requirements.txt
# установка из файла
pip install -r requirements.txt
Файл requirements.txt храните в корне проекта и обновляйте при изменениях зависимостей.
Работа с несколькими версиями Python
# создать venv конкретной версии (если установлена)
python3.11 -m venv .venv311
python3.12 -m venv .venv312
Держите отдельное окружение под каждый проект или под разные мажорные версии интерпретатора.
Проверки и диагностика
# где лежит активный интерпретатор
which python # macOS/Linux
where python # Windows
# путь окружения
python -c "import sys; print(sys.prefix)"
- Пакет не устанавливается. Проверьте интернет/прокси и версию Python, некоторые колёса недоступны для старых версий.
 - Команда «pip» не найдена. Выполните python -m ensurepip --upgrade или переустановите Python с включённым pip.
 - Конфликт версий. Удалите проблемный пакет (pip uninstall) и поставьте совместимые версии, ориентируясь на документацию библиотек.
 
Рекомендуемая структура проекта
project/
src/ or package_name/
tests/
requirements.txt
README.md
.venv/ # не коммитить
Добавьте .venv и кэш-папки в .gitignore. Для воспроизводимости фиксируйте версии и используйте одно окружение на один проект 🔒
Работа с файлами и путями
Чтение/запись делайте в кодировке UTF-8, пути формируйте через pathlib, ошибки оборачивайте в try/except. Это надёжнее, кроссплатформенно и читаемо ✅
Быстрое чтение и запись текста
# запись
with open("notes.txt", "w", encoding="utf-8") as f:
f.write("Привет, файл!")
# добавление в конец
with open("notes.txt", "a", encoding="utf-8") as f:
f.write("\nЕщё одна строка")
# чтение всего файла
with open("notes.txt", "r", encoding="utf-8") as f:
text = f.read()
print(text)
# построчно, без лишней памяти
with open("notes.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.strip())
pathlib: удобные и безопасные пути
pathlib.Path упрощает склейку путей, проверку существования и создание директорий на Windows, macOS и Linux.
from pathlib import Path
base = Path.cwd() # текущая папка проекта
data = base / "data" / "raw" # безопасная склейка
data.mkdir(parents=True, exist_ok=True)
file = data / "input.txt"
file.write_text("пример", encoding="utf-8")
print(file.read_text(encoding="utf-8"))
print(file.exists(), file.is_file(), file.parent.is_dir())
Чтение CSV без pandas
import csv, pathlib
path = pathlib.Path("scores.csv")
with path.open("r", encoding="utf-8", newline="") as f:
reader = csv.DictReader(f)
for row in reader:
print(row["name"], int(row["score"]))
Безопасная работа и обработка ошибок
from pathlib import Path
p = Path("maybe_missing.txt")
try:
text = p.read_text(encoding="utf-8")
except FileNotFoundError:
print("Файл не найден")
except UnicodeDecodeError:
print("Неверная кодировка, попробуйте encoding='utf-8'")
else:
print(text)
Бинарные файлы и буферы
# копирование бинарника по блокам
from pathlib import Path
src = Path("logo.png"); dst = Path("backup/logo.png")
dst.parent.mkdir(parents=True, exist_ok=True)
with src.open("rb") as r, dst.open("wb") as w:
while chunk := r.read(1024 * 64):
w.write(chunk)
Частые кейсы
- Гарантировать, что папка есть. 
Path(...).mkdir(parents=True, exist_ok=True) - Получить список файлов по маске. 
for p in Path("images").glob("*.png"): - Нормализовать относительный путь. 
(Path.cwd() / "data/../data/file.txt").resolve() 
Типичные ошибки и решения
- UnicodeDecodeError. Укажите encoding="utf-8" при чтении и записи.
 - Permissionerror. Закройте файл в другой программе, проверьте права, используйте with для автозакрытия.
 - Неверные разделители путей. Никогда не склеивайте строками, используйте pathlib (
base / "sub" / "file.txt"). 
Отладка и ошибки
Цель раздела — быстро распознавать типы ошибок, читать traceback, использовать простые приёмы отладки и оформлять обработку исключений так, чтобы программа вела себя предсказуемо ⚙️
Как читать traceback
Traceback показывает стек вызовов снизу вверх. Последняя строка содержит тип и текст исключения — начните с неё, затем посмотрите на строку файла, где произошёл сбой.
Traceback (most recent call last):
File "app.py", line 8, in <module>
greet(user)
File "app.py", line 3, in greet
print("Привет, " + name.upper())
TypeError: can only concatenate str (not "NoneType") to str
Здесь name оказался None. Исправление — проверить входные данные и добавить защиту.
Быстрая диагностика: print, logging, assert
# минимальный вывод состояния
print("DEBUG:", user, type(user))
# логирование вместо print (лучше в проектах)
import logging
logging.basicConfig(level=logging.INFO)
logging.info("Загружено %s записей", len(rows))
# утверждения для инвариантов
assert isinstance(user, str), "user должен быть строкой"
print() удобен на старте, но заменяйте его на logging для уровней, форматов и маршрутизации сообщений.
Пошаговая отладка
- Встроенный pdb. Точечно остановить выполнение и исследовать переменные.
 - IDE-дебаггер. Точки останова, шаги, watch-выражения и просмотр стека.
 
# точка останова (Python 3.7+)
breakpoint()
# эквивалентно
import pdb; pdb.set_trace()
В VS Code и PyCharm поставьте breakpoint на нужной строке и запустите в режиме Debug ▶
Обработка исключений правильно
Перехватывайте только ожидаемые типы. В блоке except добавляйте контекст и не скрывайте ошибки бесследно.
from pathlib import Path
def load_text(path: str) -> str:
try:
return Path(path).read_text(encoding="utf-8")
except FileNotFoundError as e:
raise FileNotFoundError(f"Нет файла: {path}") from e
except UnicodeDecodeError as e:
raise ValueError(f"Кодировка не UTF-8 у {path}") from e
Создание своих исключений
class ConfigError(Exception):
pass
def read_port(cfg: dict) -> int:
port = cfg.get("port")
if not isinstance(port, int) or not (1 <= port <= 65535):
raise ConfigError(f"Некорректный порт: {port}")
return port
Типовые ошибки и быстрые фиксы
- Indentationerror. Используйте 4 пробела. Включите автоформатирование.
 - NameError. Опечатка или неправильная область видимости. Проверьте написание и порядок объявлений.
 - TypeError/ValueError. Неверные типы или значения. Валидируйте входные данные и приводите типы явно.
 - AttributeError. Объект не имеет атрибута. Проверьте тип и возможное None.
 - KeyError/IndexError. Нет ключа или индекс вне диапазона. Используйте dict.get(), проверки границ и try/except там, где ожидаемо.
 
Малкий чек-лист перед баг-хантом
- Воспроизведите ошибку стабильно и запишите входные данные.
 - Сократите кейс до минимального примера.
 - Посмотрите последнюю строку traceback и место в коде.
 - Выведите ключевые переменные или поставьте breakpoint.
 - Напишите авто-тест, чтобы ошибка не вернулась.
 
Пример комплексной диагностики
def div(a, b):
# ожидания
assert isinstance(a, (int, float)) and isinstance(b, (int, float))
try:
return a / b
except ZeroDivisionerror as e:
raise ValueError("b не должен быть 0") from e
Так вы получаете понятное сообщение для пользователя и сохранённый контекст для разработчика 🛠️
Мини-проект
Соберём небольшой консольный инструмент «Список дел» с сохранением в файл. Цель — пройти полный цикл: постановка задачи → структура проекта → реализация → запуск и простые тесты ✅
Постановка задачи
- Хранить задачи в текстовом файле (CSV/JSON — на выбор), каждая задача имеет id, текст и статус done.
 - Команды CLI: add (добавить), list (показать), done (пометить выполненной), clear (очистить выполненные).
 - Никаких внешних зависимостей, только стандартная библиотека.
 
Структура проекта
todo/
todo.py # точка входа CLI
storage.py # работа с файлом
models.py # типы и валидация
data.json # база задач (создастся автоматически)
README.md
Формат хранения (JSON)
[
{"id": 1, "text": "Купить молоко", "done": false},
{"id": 2, "text": "Позвонить Анне", "done": true}
]
Модель и простая валидация
# models.py
def make_task(idx: int, text: str) -> dict:
text = text.strip()
if not text:
raise ValueError("Текст задачи пуст")
return {"id": idx, "text": text, "done": False}
Хранилище
# storage.py
import json, pathlib
DB = pathlib.Path("data.json")
def load() -> list[dict]:
if not DB.exists():
DB.write_text("[]", encoding="utf-8")
return json.loads(DB.read_text(encoding="utf-8"))
def save(items: list[dict]) -> None:
DB.write_text(json.dumps(items, ensure_ascii=False, indent=2), encoding="utf-8")
CLI и команды
# todo.py
import sys
from models import make_task
from storage import load, save
def add(text: str):
items = load()
new_id = (max((t["id"] for t in items), default=0) + 1)
items.append(make_task(new_id, text))
save(items)
print(f"Добавлено: #{new_id}")
def list_():
items = load()
for t in items:
mark = "✅" if t["done"] else "⬜"
print(f'{mark} #{t["id"]}: {t["text"]}')
def done(idx: int):
items = load()
for t in items:
if t["id"] == idx:
t["done"] = True
save(items); print(f"Готово: #{idx}"); return
print("Задача не найдена")
def clear():
items = [t for t in load() if not t["done"]]
save(items); print("Очищено выполненное")
def main():
args = sys.argv[1:]
if not args:
print("Команды: add <текст> | list | done <id> | clear"); return
cmd, *rest = args
match cmd:
case "add": add(" ".join(rest))
case "list": list_()
case "done": done(int(rest[0]))
case "clear": clear()
case _: print("Неизвестная команда")
if __name__ == "__main__":
main()
Запуск и проверка
# добавить задачи
python todo.py add Купить молоко
python todo.py add Позвонить Анне
# показать список
python todo.py list
# отметить выполненной
python todo.py done 1
# очистить выполненные
python todo.py clear
Мини-тест ручной
# ожидаемый вывод list после двух add
⬜ #1: Купить молоко
⬜ #2: Позвонить Анне
# после done 1
✅ #1: Купить молоко
⬜ #2: Позвонить Анне
Расширения по желанию
- Перейти на argparse для дружелюбной справки и валидации аргументов.
 - Сменить формат хранения на CSV или SQLite.
 - Добавить даты создания/выполнения и фильтры по статусу.
 
Итог: у вас есть рабочий CLI-инструмент, структура проекта и базовые практики сохранения данных и обработки ошибок 🎯
Полезные инструменты
Три модуля стандартной библиотеки, которые сразу повышают качество кода: logging для управляемых сообщений, argparse для CLI-интерфейсов и datetime для работы со временем. Все без внешних зависимостей ✅
logging: управляемые сообщения и уровни
Заменяет случайные print() структурированным логом с уровнями, временем и форматами. Можно писать в файл или консоль, разделять уровни INFO/DEBUG/ERROR и быстро искать проблемы.
# базовая настройка
import logging
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
logging.info("Старт приложения")
logging.debug("Отладочные данные: %s", {"x": 42})
logging.error("Ошибка загрузки файла: %s", "data.csv")
Советы: используйте плейсхолдеры %s вместо f-строк в логах, чтобы не вычислять строки зря; для модулей задавайте logger = logging.getLogger(__name__).
argparse: удобный CLI
Строит интерфейс командной строки с автогенерацией справки -h, валидацией типов и значений. Идеален для учебных и рабочих утилит ⚙️
import argparse
parser = argparse.ArgumentParser(prog="resize", description="Масштабирование изображений")
parser.add_argument("src", help="путь к папке с изображениями")
parser.add_argument("--width", type=int, required=True, help="новая ширина")
parser.add_argument("--height", type=int, help="новая высота (по умолчанию авто)")
parser.add_argument("-q", "--quality", type=int, default=85, choices=range(1,101), help="JPEG-качество 1..100")
args = parser.parse_args()
# использование
print(args.src, args.width, args.height, args.quality)
Паттерны: подкоманды через subparsers для «tool add / tool list», обязательные флаги required=True, списки через nargs="+".
datetime: дата и время без боли
Работайте с «наивными» и «осознанными» датами, форматируйте ISO 8601, считайте интервалы. Для часовых поясов используйте zoneinfo (Python 3.9+).
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo
# текущее UTC и локальное время
now_utc = datetime.now(tz=ZoneInfo("UTC"))
now_riga = now_utc.astimezone(ZoneInfo("Europe/Riga"))
# формат ISO 8601
print(now_riga.isoformat())
# разница во времени
deadline = now_riga + timedelta(days=3, hours=4)
delta = deadline - now_riga
print(delta.total_seconds())
Форматы: dt.strftime("%Y-%m-%d %H:%M:%S"), обратное преобразование: datetime.strptime("2025-01-15 12:30", "%Y-%m-%d %H:%M").
Комбо-паттерн: лог + время + CLI
import logging, argparse
from datetime import datetime, timedelta
logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
p = argparse.ArgumentParser(description="Таймер напоминания")
p.add_argument("--in-min", type=int, required=True, help="через сколько минут напомнить")
args = p.parse_args()
when = datetime.now() + timedelta(minutes=args.in_min)
logging.info("Напомню в %s", when.strftime("%H:%M"))
Следующие шаги
Вы прошли базу. Теперь выберите направление, поставьте учебные цели на 2–4 недели и закрепляйте их мини-проектами. Ниже четыре проверенных трека с первыми шагами и микро-примером кода 🚀
Веб-разработка (Flask/Django)
- Цель 1: поднять локальный сервер, отдать HTML-страницу, обработать форму.
 - Цель 2: подключить БД (SQLite/PostgreSQL), сделать CRUD.
 - Проект: «Заметки» или «Трекер расходов» с авторизацией.
 
# Flask «Hello, web»
pip install flask
from flask import Flask
app = Flask(__name__)
@app.get("/")
def index():
return "Привет, веб!"
app.run(debug=True)
Данные и автоматизация (NumPy/pandas)
- Цель 1: читать CSV/Excel, чистить данные, строить сводки.
 - Цель 2: сохранять отчёты в CSV/Excel/PNG и отправлять по расписанию.
 - Проект: отчёт по продажам или парсер цен с выгрузкой.
 
# pandas: быстрое агрегирование
pip install pandas
import pandas as pd
df = pd.read_csv("sales.csv")
rep = df.groupby("manager")["amount"].sum().sort_values(ascending=False)
print(rep.head())
Машинное обучение (scikit-learn/PyTorch)
- Цель 1: классическая модель (логрег, деревья), метрики и валидация.
 - Цель 2: пайплайн предобработки + модель + сохранение артефактов.
 - Проект: предсказание оттока клиентов или цены квартиры.
 
# scikit-learn: базовая модель
pip install scikit-learn pandas
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
clf = LogisticRegression(max_iter=1000).fit(X_train, y_train)
print(accuracy_score(y_test, clf.predict(X_test)))
Скрипты и DevOps
- Цель 1: писать CLI-утилиты на argparse, логировать и упаковывать в пакет.
 - Цель 2: запускать по расписанию (cron/Task Scheduler), работать с API.
 - Проект: «Резервное копирование», «Синхронизация отчётов», «Нотификатор статусов».
 
# cron (Linux/macOS): раз в час
# открыть редактор: crontab -e
# пример строки
0 * * * * /usr/bin/python /home/user/jobs/report.py > /tmp/report.log 2>&1
Как организовать обучение
- Фокус-спринты. 30–60 минут в день: 20 мин теория → 40 мин практика.
 - Проекты вместо конспектов. Каждая тема = мини-репозиторий с README.
 - Контроль качества. Линтер/форматер, авто-тест хотя бы на ключевую функцию.
 - Трекер прогресса. Список задач и «демо-результат» к каждому этапу.
 
Куда смотреть дальше
- Документация. tutorial + стандартная библиотека (collections, itertools, pathlib).
 - Практика. katas/задачники, участие в пет-проектах с друзьями.
 - Инфраструктура. виртуальные окружения, packaging, базовый Docker.
 
Итог: выберите один трек, запланируйте две недели задач, закрепите мини-проектом и переходите к следующему направлению. Малые шаги и частые релизы 🧭
FAQ
Ответы на частые вопросы. В кодовых примерах используем блоки цитирования, а для компактности вопросы свёрнуты под спойлеры 🙂
Полезные ссылки и материалы
Подборка ресурсов, с которых стоит начать и к которым удобно возвращаться по мере роста навыков 📚
- Официальный сайт Python — python.org: релизы, скачивания, новости.
 - Документация — docs.python.org: учебник, стандартная библиотека, примеры.
 - PEP 8 — стиль кода: правила форматирования и именования.
 - PyPI — pypi.org: поиск и установка сторонних библиотек.
 - Real Python — разборы практических тем и гайдов.
 - Learn X in Y minutes: Python — концентрат синтаксиса на одной странице.
 - TutorialsPoint / W3Schools — справочные статьи и быстрые примеры.
 - Stack Overflow — ответы на точечные вопросы по ошибкам и API.
 - LeetCode / HackerRank / Codewars — тренировка задач и алгоритмов.
 - Книги — «Изучаем Python» (Марк Лутц), «Автоматизация рутинных задач с Python» (Ал Свейгарт), «Fluent Python» (Лусиано Рамальо) для продвинутого уровня.
 
Совет по использованию: фиксируйте полезные ссылки в README проекта и складывайте рабочие сниппеты в личный «кукбук» — так база знаний растёт вместе с практикой 🧠