Django-Admin.ru

Проекты на Python для начинающих: 15 идей от простых к сложным

15 идей проектов на Python для начинающих: от генератора паролей до REST API. Навыки, библиотеки, усложнения и два мини-проекта с полным кодом.

Редакция Django-Admin.ru
· обновлено · 12 мин чтения

Содержание · 10 разделов
  1. Чем проект отличается от задачи
  2. 15 идей: сводная таблица
  3. Простые проекты
  4. Генератор паролей
  5. Игра «Виселица»
  6. Викторина из JSON
  7. Учёт расходов
  8. Сортировщик файлов
  9. Проекты среднего уровня
  10. Информер погоды или курсов валют
  11. Парсер сайта в CSV
  12. Приложение с графическим интерфейсом
  13. Игра «Змейка» на Pygame
  14. Телеграм-бот
  15. Анализ данных с графиками
  16. Обработка изображений
  17. Сложные проекты
  18. Сокращатель ссылок на Flask
  19. Блог на Django
  20. REST API с авторизацией на FastAPI
  21. Игра «Виселица»: полный код
  22. Учёт расходов в командной строке: полный код
  23. Как довести проект до конца
  24. Частые вопросы
  25. Какой проект выбрать первым?
  26. Можно ли брать готовый код из интернета?
  27. Сколько проектов нужно для портфолио?
  28. Что делать, если застрял?
  29. Куда выложить проект, чтобы его увидели?
  30. Нужны ли тесты в учебном проекте?
  31. Итог

Проекты на Python для начинающих — лучший способ перейти от решения отдельных задач к написанию настоящих программ. Ниже 15 идей пет-проектов, выстроенных от простых к сложным: для каждой — что делает программа, какие навыки она тренирует, какие библиотеки понадобятся и как её усложнить. Два мини-проекта, игру «Виселица» и консольный учёт расходов, мы разобрали с полным рабочим кодом.

Если вы ещё не уверены в синтаксисе, сначала порешайте задачи по Python с решениями: задачи учат отдельным приёмам, а проект — собирать их в программу, которой можно пользоваться.

Чем проект отличается от задачи

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

Хороший первый проект:

  • маленький — первая рабочая версия пишется за один-два вечера;
  • полезный вам — тогда хватит мотивации довести его до конца;
  • расширяемый — после первой версии есть что добавить: сохранение, интерфейс, тесты.

15 идей: сводная таблица

№ПроектУровеньГлавные навыкиБиблиотеки
1Генератор паролейПростойстроки, функции, аргументыsecrets, string
2Игра «Виселица»Простойциклы, множества, вводrandom
3Викторина из JSONПростойсловари, файлы, подсчёт очковjson, random
4Учёт расходовПростойCSV, командная строка, отчётыcsv, argparse
5Сортировщик файловПростойфайловая системаpathlib, shutil
6Информер погоды или курсовСреднийHTTP, JSON, обработка ошибокrequests
7Парсер сайта в CSVСреднийHTML, селекторы, сохранение данныхrequests, beautifulsoup4
8Приложение с окномСреднийсобытия, интерфейсtkinter
9Игра «Змейка»Среднийигровой цикл, классыpygame
10Телеграм-ботСреднийAPI, асинхронность, обработчикиaiogram или аналоги
11Анализ данных с графикамиСреднийтаблицы, агрегация, визуализацияpandas, matplotlib
12Обработка изображенийСредниймассивы, работа с камеройopencv-python
13Сокращатель ссылокСложныйвеб, маршруты, база данныхflask, sqlite3
14Блог на DjangoСложныймодели, шаблоны, админка, формыdjango
15REST API с авторизациейСложныйAPI, ORM, JWT, тестыfastapi, sqlalchemy

Простые проекты

Генератор паролей

Программа спрашивает длину и набор символов и выдаёт надёжный пароль. Тренирует работу со строками и функциями. Используйте модуль secrets, а не random: он предназначен для криптографически стойкой случайности.

import secrets
import string

alphabet = string.ascii_letters + string.digits + "!@#$%"
password = "".join(secrets.choice(alphabet) for _ in range(16))
print(password)  # → случайная строка из 16 символов

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

Игра «Виселица»

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

Викторина из JSON

Вопросы, варианты ответов и правильный ответ хранятся в файле questions.json. Программа задаёт вопросы в случайном порядке, считает очки и сохраняет таблицу рекордов. Тренирует словари, чтение и запись файлов — см. статью о модуле json и модуле random.

Усложнение: категории вопросов, таймер на ответ, режим «работа над ошибками».

Учёт расходов

Консольная программа, которая записывает траты в CSV и строит отчёт по категориям. Учит хранить данные между запусками и делать настоящий интерфейс командной строки — полный код ниже.

Сортировщик файлов

Скрипт раскладывает файлы из «Загрузок» по папкам «Документы», «Изображения», «Архивы». Первый шаг в автоматизацию: pathlib, shutil, обработка конфликтов имён. Готовый скрипт и ещё шесть примеров — в статье «Автоматизация рутинных задач с помощью Python».

Усложнение: правила в отдельном конфигурационном файле, журнал перемещений и отмена последнего запуска.

Проекты среднего уровня

Информер погоды или курсов валют

Программа запрашивает данные у открытого API и выводит их в удобном виде: погоду на завтра, курс нужных валют, изменение за день. Главные навыки — HTTP-запросы, разбор JSON, обработка сетевых ошибок и тайм-аутов. Основной инструмент — библиотека requests.

Усложнение: кэшировать ответ в файл, чтобы не дёргать API при каждом запуске; присылать уведомление, если курс изменился сильнее порога.

Парсер сайта в CSV

Собирает с сайта список товаров, вакансий или статей и сохраняет в таблицу. Учит разбирать HTML через CSS-селекторы, проходить по страницам пагинации и аккуратно обращаться с чужим сервером (паузы между запросами). Для сайтов, где контент строит JavaScript, понадобится Selenium.

Усложнение: запуск по расписанию и сравнение с прошлой выгрузкой — «что появилось нового».

Приложение с графическим интерфейсом

Таймер помидоро, заметки, конвертер единиц — с окном, кнопками и полями ввода. Модуль tkinter входит в стандартную библиотеку, ставить ничего не нужно. Главное новое понятие — событийная модель: программа не выполняется сверху вниз, а реагирует на действия пользователя. Подробнее — в статье о Tkinter.

Игра «Змейка» на Pygame

Классический проект для знакомства с игровым циклом: обработка клавиш, движение, столкновения, счёт. Хорошо ложится на классы — змейка, еда, игровое поле. С чего начать, описано в статье о Pygame.

Усложнение: уровни сложности, таблица рекордов, звуки.

Телеграм-бот

Бот-напоминалка, бот-викторина или бот, который присылает курс валют по команде. Тренирует работу с внешним API, обработчики команд и асинхронный код. Популярные библиотеки — aiogram и python-telegram-bot; токен бота выдаёт служебный бот @BotFather. Токен храните в переменной окружения, а не в коде.

Анализ данных с графиками

Возьмите открытый датасет или выгрузку своих данных (расходы из учёта расходов, история тренировок, статистика из игры) и ответьте на несколько вопросов: что растёт, что падает, где выбросы. Инструменты — pandas для таблиц и matplotlib для графиков; работать удобно в Jupyter Notebook.

Обработка изображений

Пакетное изменение размера фотографий, наложение водяного знака, поиск лиц на снимке или видео с веб-камеры. Библиотека OpenCV представляет изображение как массив NumPy, так что заодно вы познакомитесь с ним.

Сложные проекты

Сокращатель ссылок на Flask

Пользователь вводит длинный URL, сервис выдаёт короткий и ведёт статистику переходов. Минимальный веб-проект с маршрутами, формой, шаблоном и базой данных SQLite. Flask не навязывает структуру, поэтому хорошо подходит, чтобы понять, как устроено веб-приложение изнутри.

Блог на Django

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

Усложнение: поиск, пагинация, деплой на сервер с Gunicorn и Nginx.

REST API с авторизацией на FastAPI

API для списка задач или каталога книг: создание, чтение, изменение и удаление записей, хранение в базе через SQLAlchemy, вход по JWT-токену и автоматическая документация. Проект показывает, как пишут современный бэкенд. Начните со статьи о FastAPI, затем подключите авторизацию через JWT.

Усложнение: тесты на pytest, запуск в Docker, фронтенд или телеграм-бот как клиент к этому API.

Игра «Виселица»: полный код

Что тренирует: цикл while, проверку ввода, множества и генератор строк.

import random

WORDS = ["питон", "функция", "словарь", "кортеж", "переменная", "исключение"]
MAX_MISTAKES = 6


def show(word: str, guessed: set[str]) -> str:
    return " ".join(letter if letter in guessed else "_" for letter in word)


def play() -> None:
    word = random.choice(WORDS)
    guessed: set[str] = set()
    mistakes = 0

    while mistakes < MAX_MISTAKES:
        print(f"\n{show(word, guessed)}   ошибок: {mistakes}/{MAX_MISTAKES}")
        letter = input("Буква: ").strip().lower()

        if len(letter) != 1 or not letter.isalpha():
            print("Введите одну букву")
            continue
        if letter in guessed:
            print("Эта буква уже была")
            continue

        guessed.add(letter)
        if letter in word:
            print("Есть такая буква!")
            if set(word) <= guessed:
                print(f"\nПобеда! Слово: {word}")
                return
        else:
            mistakes += 1
            print("Нет такой буквы")

    print(f"\nВы проиграли. Слово было: {word}")


if __name__ == "__main__":
    play()

Фрагмент игры:

_ _ _ _ _ _ _   ошибок: 0/6
Буква: а
Нет такой буквы

_ _ _ _ _ _ _   ошибок: 1/6
Буква: и
Есть такая буква!

_ _ _ _ _ и _   ошибок: 1/6
Буква: н
Есть такая буква!
...
ф у н к ц и _   ошибок: 1/6
Буква: я
Есть такая буква!

Победа! Слово: функция

Ключевая строка — set(word) <= guessed: оператор <= для множеств проверяет, что все буквы слова уже угаданы. Подробнее о таких операциях — в статье о множествах в Python.

Что добавить: загрузку слов из файла, подсказку-категорию, рисунок виселицы псевдографикой, подсчёт побед.

Учёт расходов в командной строке: полный код

Что тренирует: работу с CSV, модуль argparse для подкоманд, группировку данных и форматированный вывод. Данные хранятся в expenses.csv рядом со скриптом.

import argparse
import csv
from collections import defaultdict
from datetime import date
from pathlib import Path

DATA_FILE = Path(__file__).parent / "expenses.csv"
FIELDS = ["date", "category", "amount", "comment"]


def load() -> list[dict]:
    if not DATA_FILE.exists():
        return []
    with open(DATA_FILE, encoding="utf-8", newline="") as f:
        return list(csv.DictReader(f))


def add(category: str, amount: float, comment: str) -> None:
    is_new = not DATA_FILE.exists()
    with open(DATA_FILE, "a", encoding="utf-8", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=FIELDS)
        if is_new:
            writer.writeheader()
        writer.writerow({
            "date": date.today().isoformat(),
            "category": category,
            "amount": f"{amount:.2f}",
            "comment": comment,
        })
    print(f"Добавлено: {category} — {amount:.2f} ₽")


def report(month: str | None) -> None:
    rows = [r for r in load() if month is None or r["date"].startswith(month)]
    if not rows:
        print("Расходов нет")
        return
    by_category = defaultdict(float)
    for row in rows:
        by_category[row["category"]] += float(row["amount"])
    total = sum(by_category.values())
    for category, amount in sorted(by_category.items(), key=lambda x: -x[1]):
        share = amount / total * 100
        print(f"{category:<12} {amount:>10.2f} ₽  {share:5.1f}%")
    print(f"{'Итого':<12} {total:>10.2f} ₽")


def main() -> None:
    parser = argparse.ArgumentParser(description="Учёт расходов")
    commands = parser.add_subparsers(dest="command", required=True)

    add_cmd = commands.add_parser("add", help="добавить расход")
    add_cmd.add_argument("category")
    add_cmd.add_argument("amount", type=float)
    add_cmd.add_argument("comment", nargs="?", default="")

    report_cmd = commands.add_parser("report", help="отчёт по категориям")
    report_cmd.add_argument("--month", help="месяц в формате ГГГГ-ММ")

    args = parser.parse_args()
    if args.command == "add":
        add(args.category, args.amount, args.comment)
    else:
        report(args.month)


if __name__ == "__main__":
    main()

Использование (в macOS и Linux — python3):

python expenses.py add продукты 2350.50 "магазин у дома"
python expenses.py add транспорт 640
python expenses.py add продукты 1200
python expenses.py add кафе 890 обед
python expenses.py report --month 2026-10
Добавлено: продукты — 2350.50 ₽
Добавлено: транспорт — 640.00 ₽
Добавлено: продукты — 1200.00 ₽
Добавлено: кафе — 890.00 ₽
продукты        3550.50 ₽   69.9%
кафе             890.00 ₽   17.5%
транспорт        640.00 ₽   12.6%
Итого           5080.50 ₽

argparse бесплатно даёт справку (python expenses.py --help) и проверку типов: команда add еда abc завершится понятной ошибкой invalid float value: 'abc', без вашего кода обработки. Аннотация str | None требует Python 3.10 или новее.

Что добавить: бюджет по категориям с предупреждением о превышении, экспорт в Excel, график по месяцам (это уже проект «Анализ данных с графиками»), хранение в SQLite вместо CSV.

Как довести проект до конца

  1. Сформулируйте первую версию одной фразой: «программа добавляет расход и показывает сумму по категориям». Всё остальное — в список «потом».
  2. Создайте папку проекта и виртуальное окружение, зависимости зафиксируйте в requirements.txt.
  3. Сразу заведите Git-репозиторий и делайте коммит после каждого работающего шага.
  4. Разбейте код на функции, а когда файл вырастет — на модули. Если данные и действия над ними связаны, оформите их классом.
  5. Напишите README: что делает программа, как установить, как запустить, пример вывода. Без него проект в портфолио почти бесполезен.

Частые вопросы

Какой проект выбрать первым?

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

Можно ли брать готовый код из интернета?

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

Сколько проектов нужно для портфолио?

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

Что делать, если застрял?

Уменьшите шаг: вместо «сделать бота» — «бот отвечает на /start». Прочитайте traceback, напечатайте промежуточные значения через print(), сформулируйте вопрос в поиске на английском — так находится больше ответов.

Куда выложить проект, чтобы его увидели?

Код — в публичный репозиторий на GitHub или GitLab: с README, файлом зависимостей и понятной структурой папок. Веб-проект или бота стоит ещё и запустить на сервере, чтобы по ссылке можно было открыть работающую версию. Пример развёртывания Django-проекта — в статье о деплое с Gunicorn и Nginx.

Нужны ли тесты в учебном проекте?

Да, хотя бы несколько. Тесты на pytest для ключевых функций показывают, что вы умеете проверять свой код, и защищают от поломок при доработках. Начните с функций без ввода-вывода: подсчёта отчёта, проверки пароля, разбора команды.

Итог

Начните с одного из простых проектов, доведите его до рабочей версии с README и только потом переходите к API, ботам и веб-фреймворкам. Для разминки подойдут задачи по Python с решениями, готовые скрипты для повседневных дел — в статье об автоматизации на Python, а общий план обучения — в дорожной карте Python.

  • #Python
  • #Проекты
  • #Пет-проекты
  • #Для начинающих
  • #Практика
↑ ↓ выборEnter открытьEsc закрыть