Перейти к содержимому
Главная страница

Python для начинающих: первые шаги в программировании

Логотип языка программирования Python на синем фоне с надписью «PYTHON»

Заголовки:

Введение

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

Кому подойдёт

Начинающим без опыта; студентам и аналитикам; тестировщикам, администраторам и DevOps-инженерам; разработчикам с другим стеком для задач автоматизации, интеграций и прототипирования.

Что такое Python

Высокоуровневый интерпретируемый язык с динамической типизацией и обширной стандартной библиотекой. Де-факто стандарт — реализация CPython. Есть альтернативы: PyPy с JIT, MicroPython, а также Jython/IronPython для JVM/.NET. В материале фокус на CPython.

Почему Python

  • Низкий порог входа. Читаемый синтаксис и мало «шаблонного шума».
  • Широкая экосистема. Веб, данные, ML/AI, скрипты и автоматизация.
  • Кроссплатформенность. Windows, macOS, Linux, контейнеры.
  • Сильное сообщество. Множество примеров и библиотек на PyPI.

Что вы получите

  • Корректно установленный Python и рабочее окружение.
  • Первые команды в 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
.venvScriptsactivate      # Windows

# проверить активную версию

python -c "import sys; print(sys.version)" 

Экосистема: три элемента

  • Интерпретатор. Исполняет ваш код.
  • 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
.venvScriptsactivate      # 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) 

Условные операторы

Блоки определяются отступами. Пустые строки/коллекции и ноль трактуются как ложь. Для кратких присваиваний используйте тернарный оператор. В 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; используйте шрифт с кириллицей в терминале.

Пакеты и виртуальные окружения

Зачем это нужно

venv изолирует зависимости каждого проекта, а pip устанавливает и обновляет библиотеки. Это предотвращает конфликты версий и делает окружение воспроизводимым ✅

Создание и активация venv

# создать окружение в папке проекта
python -m venv .venv

# активировать окружение

source .venv/bin/activate   # macOS/Linux
.venvScriptsactivate      # 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/ или 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 
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 

Так пользователь получает понятное сообщение, а разработчик — сохранённый контекст 🛠️

Мини-проект

Соберём небольшой консольный инструмент «Список дел» с сохранением в файл. Цель — пройти весь цикл: постановка задачи → структура проекта → реализация → запуск и простые тесты ✅

Постановка задачи

  • Хранить задачи в текстовом файле (JSON или CSV), у каждой — 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  | 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 недели и закрепляйте их мини-проектами. Ниже четыре проверенные траектории c первыми шагами и микро-примером кода 🚀

Веб-разработка (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, y должны быть подготовлены заранее

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.
  • Контроль качества. Линтер/форматер и хотя бы один авто-тест на ключевую функцию.
  • Трекер прогресса. Список задач и «демо-результат» к каждому этапу.

Куда смотреть дальше

  • Документация. Учебник и стандартная библиотека (collections, itertools, pathlib).
  • Практика. Katas/задачники, пет-проекты с друзьями.
  • Инфраструктура. Виртуальные окружения, packaging, базовый Docker.

Итог: выберите один трек, распланируйте две недели задач, закрепите мини-проектом и переходите к следующему направлению. Малые шаги и частые релизы 🧭

FAQ

Ответы на частые вопросы. В примерах используем код-блоки; вопросы свёрнуты в details для компактности.

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

Ставьте актуальную стабильную 3.x под вашу ОС. Если проект требует конкретной версии, держите её в отдельном venv. Проверка версии:

python --version
python3 --version 
Команда «python» не находится — что делать?

В Linux/macOS попробуйте python3. В Windows используйте лаунчер py или переустановите Python с опцией «Add Python to PATH». Диагностика пути:

which python   # macOS/Linux
where python   # Windows 
Где лучше писать код новичку — VS Code, PyCharm или Jupyter?

VS Code — лёгкий и универсальный, PyCharm — мощная навигация и тесты из коробки, Jupyter — удобен для экспериментов с данными. Начните с VS Code или PyCharm Community и подключите свой venv.

Как изолировать зависимости и избежать конфликтов версий?

Создавайте виртуальные окружения на проект и фиксируйте версии.

python -m venv .venv
source .venv/bin/activate   # macOS/Linux
.venvScriptsactivate      # Windows
pip freeze > requirements.txt 
Почему возникает IndentationError и как его исправить?

Смешаны табы и пробелы или неверное количество отступов. Используйте 4 пробела и автоформатирование редактора. Проверьте, чтобы все блоки имели согласованные отступы.

Чем отличается / и // при делении?

/ всегда возвращает float, // — целую часть.

5 / 2   # 2.5
5 // 2  # 2 
Как читать traceback и быстро понять причину ошибки?

Смотрите на последнюю строку: тип исключения и сообщение. Затем откройте указанный файл и номер строки. Пример:

TypeError: can only concatenate str (not "NoneType") to str 

Значит одна из переменных — None. Добавьте проверку входных данных.

Как правильно устанавливать пакеты «в проект», а не глобально?

Активируйте venv и запускайте pip через интерпретатор.

python -m pip install requests 
Как работать с кириллицей в файлах, чтобы не ловить Unicode-ошибки?

Явно указывайте кодировку UTF-8 при чтении/записи и сохраните исходник в UTF-8.

with open("notes.txt", "w", encoding="utf-8") as f:
f.write("Привет") 
Можно ли быстро проверить идею без создания файла?

Да. Запустите REPL и введите выражения либо используйте «однострочник».

python
2 + 2
exit()

python -c "print(2 + 2)" 

Полезные ссылки и материалы

Подборка, с которой удобно стартовать и к которой полезно возвращаться по мере роста 📚

  • Официальный сайт 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 проекта и складывайте рабочие сниппеты в личный «кукбук» — база знаний будет расти вместе с практикой 🧠

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest

Достигнут лимит времени. Пожалуйста, введите CAPTCHA снова.

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии