Python: с нуля до Junior

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

0/14 пройдено
01

Первые шаги: синтаксис и вычисления

  • Установка Python и IDE (например VS Code), REPL и запуск .py-файлов
  • Переменные, правила именования, комментарии
  • Типы данных: int, float, str, bool; приведение типов
  • print() и input()
  • Арифметические, сравнения и логические операторы, приоритет операций
  • Встроенные функции round(), len(), type()

Задание

Напишите скрипт-калькулятор ИМТ: он спрашивает рост (в метрах) и вес (в кг), считает индекс массы тела и выводит результат, округлённый до одного знака после запятой.

02

Ветвление и циклы

  • Условия if / elif / else, вложенные условия
  • Логические операторы and, or, not
  • Циклы for и while, range()
  • break, continue, конструкция else у циклов
  • Модуль random: randint(), choice()

Задание

Игра «Угадай число»: программа загадывает число от 1 до 100, пользователь вводит варианты, после каждой попытки программа подсказывает «больше» или «меньше», а в конце сообщает число попыток.

03

Строки

  • Индексация и срезы (slicing)
  • Методы строк: split, join, strip, replace, find, lower/upper, isdigit/isalpha
  • f-строки и форматирование чисел
  • Оператор in, функция len()

Задание

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

04

Списки и кортежи

  • Создание, индексация и срезы списков
  • Методы списков: append, insert, remove, pop, sort, reverse
  • sorted() и сортировка по ключу (key=)
  • Кортежи и их отличие от списков, когда что использовать
  • List comprehension
  • Вложенные списки

Задание

Учёт покупок: список товаров хранится как список кортежей (название, цена). Посчитайте общую сумму покупки, найдите самый дорогой товар и выведите список, отсортированный по цене.

05

Словари и множества

  • dict: создание, доступ по ключу, get(), update(), keys()/values()/items()
  • Dict comprehension
  • set: уникальность элементов, объединение и пересечение множеств
  • Когда выбирать list, dict или set

Задание

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

06

Функции

  • def, параметры, аргументы по умолчанию, *args и **kwargs
  • return и множественный возврат значений
  • Область видимости переменных (local/global)
  • Лямбда-функции
  • Рекурсия
  • Docstring и принцип «одна функция — одна задача»

Задание

Разбейте программу подсчёта частоты слов (этап 5) на отдельные функции — чтение текста, очистка, подсчёт, вывод результата. Дополнительно напишите функцию is_palindrome(word), проверяющую, является ли слово палиндромом.

07

Ошибки и файлы

  • try / except / else / finally, конкретные типы исключений
  • raise и создание собственных исключений
  • Чтение и запись файлов: open(), режимы доступа, конструкция with
  • Модуль json: dump/load
  • Модуль csv (базово)

Задание

Консольное приложение «Заметки»: хранит заметки в JSON-файле, умеет добавлять, удалять, показывать список и искать заметку по слову. Некорректные ситуации (нет файла, пустой ввод) не должны приводить к падению программы.

08

Модули и окружение проекта

  • import, from ... import, псевдонимы (as)
  • Структура проекта из нескольких файлов, if __name__ == "__main__"
  • Виртуальные окружения: venv, активация
  • pip, requirements.txt, PyPI
  • Полезные модули стандартной библиотеки: os, datetime, math

Задание

Разделите «Заметки» на несколько файлов (например main.py и storage.py), настройте виртуальное окружение и подключите одну внешнюю библиотеку (например colorama) для цветного вывода в терминале.

09

ООП: основы

  • Классы и объекты, атрибуты и методы
  • __init__ и self
  • Инкапсуляция: приватные атрибуты по соглашению (_ и __)
  • Методы класса (classmethod) и статические методы (staticmethod)
  • property, геттеры и сеттеры

Задание

Перепишите «Заметки» в объектно-ориентированном стиле: класс Note для отдельной заметки и класс NotesManager, который отвечает за хранение, поиск и сохранение заметок в файл.

10

ООП: наследование и полиморфизм

  • Наследование, super()
  • Полиморфизм и переопределение методов
  • Магические методы: __str__, __repr__, __eq__, __len__
  • Абстрактные базовые классы (модуль abc)
  • Композиция как альтернатива наследованию

Задание

Добавьте в «Заметки» разные типы заметок — TextNote и TodoNote, — унаследованные от базового класса Note, каждый со своим форматом отображения при выводе.

11

Тестирование и отладка

  • pytest (или unittest): структура тестов, assert
  • Тестовые случаи и граничные значения (edge cases)
  • Логирование (модуль logging) вместо print для отладки
  • Базовая отладка: точки останова, чтение traceback

Задание

Напишите не менее пяти тестов для функций «Заметок» (включая пустые и некорректные входные данные) и замените служебные print на логирование через logging.

12

Работа с внешними данными

  • HTTP-запросы: библиотека requests, методы GET/POST
  • Работа с REST API и разбор JSON-ответа
  • SQLite: модуль sqlite3, создание таблиц, INSERT/SELECT/UPDATE/DELETE

Задание

Переведите хранение заметок с JSON-файла на SQLite. Отдельным скриптом получите случайную цитату с открытого API и сохраните её как новую заметку в базе.

13

Инструменты Junior-разработчика

  • Git: init, add, commit, push, ветки, merge, .gitignore
  • GitHub: репозиторий, README
  • Аннотации типов (type hints) и их польза
  • Форматтеры и линтеры (например black, flake8), зачем нужен код-ревью

Задание

Выложите «Заметки» на GitHub с понятным README, файлом .gitignore, requirements.txt и типизацией хотя бы у половины функций проекта.

14

Финальный проект и подготовка к поиску работы

  • Базовые алгоритмы: сложность O(), простые сортировки и поиск
  • Проектирование и декомпозиция своей идеи на модули и классы
  • Чтение чужого кода и документации
  • Резюме, портфолио и типичные вопросы на собеседовании junior

Задание

Реализуйте собственный pet-проект «с нуля» — консольное приложение, решающее реальную бытовую задачу, — и выложите его на GitHub. Дополнительно решите три классические задачи: разворот строки без встроенных функций реверса, поиск дубликатов в списке и FizzBuzz.