Проекты на Python для начинающих: 15 идей от простых к сложным
15 идей проектов на Python для начинающих: от генератора паролей до REST API. Навыки, библиотеки, усложнения и два мини-проекта с полным кодом.
Содержание · 10 разделов
- Чем проект отличается от задачи
- 15 идей: сводная таблица
- Простые проекты
- Генератор паролей
- Игра «Виселица»
- Викторина из JSON
- Учёт расходов
- Сортировщик файлов
- Проекты среднего уровня
- Информер погоды или курсов валют
- Парсер сайта в CSV
- Приложение с графическим интерфейсом
- Игра «Змейка» на Pygame
- Телеграм-бот
- Анализ данных с графиками
- Обработка изображений
- Сложные проекты
- Сокращатель ссылок на Flask
- Блог на Django
- REST API с авторизацией на FastAPI
- Игра «Виселица»: полный код
- Учёт расходов в командной строке: полный код
- Как довести проект до конца
- Частые вопросы
- Какой проект выбрать первым?
- Можно ли брать готовый код из интернета?
- Сколько проектов нужно для портфолио?
- Что делать, если застрял?
- Куда выложить проект, чтобы его увидели?
- Нужны ли тесты в учебном проекте?
- Итог
Проекты на 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 |
| 15 | REST 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.
Как довести проект до конца
- Сформулируйте первую версию одной фразой: «программа добавляет расход и показывает сумму по категориям». Всё остальное — в список «потом».
- Создайте папку проекта и виртуальное окружение, зависимости зафиксируйте в
requirements.txt. - Сразу заведите Git-репозиторий и делайте коммит после каждого работающего шага.
- Разбейте код на функции, а когда файл вырастет — на модули. Если данные и действия над ними связаны, оформите их классом.
- Напишите README: что делает программа, как установить, как запустить, пример вывода. Без него проект в портфолио почти бесполезен.
Частые вопросы
Какой проект выбрать первым?
Тот, которым вы будете пользоваться сами. Если идей нет — учёт расходов или сортировщик файлов: они небольшие, полезные и хорошо расширяются.
Можно ли брать готовый код из интернета?
Читать чужие решения полезно, копировать целиком — нет. Посмотрите подход, закройте вкладку и напишите свою версию. То же касается кода от нейросетей: просите объяснения, а не готовый проект.
Сколько проектов нужно для портфолио?
Важнее качество, чем количество: два-три завершённых проекта с README, понятной структурой и историей коммитов говорят о вас больше, чем десять брошенных заготовок. Хотя бы один из них должен относиться к направлению, в котором вы ищете работу: веб, данные или автоматизация.
Что делать, если застрял?
Уменьшите шаг: вместо «сделать бота» — «бот отвечает на /start». Прочитайте traceback, напечатайте промежуточные значения через print(), сформулируйте вопрос в поиске на английском — так находится больше ответов.
Куда выложить проект, чтобы его увидели?
Код — в публичный репозиторий на GitHub или GitLab: с README, файлом зависимостей и понятной структурой папок. Веб-проект или бота стоит ещё и запустить на сервере, чтобы по ссылке можно было открыть работающую версию. Пример развёртывания Django-проекта — в статье о деплое с Gunicorn и Nginx.
Нужны ли тесты в учебном проекте?
Да, хотя бы несколько. Тесты на pytest для ключевых функций показывают, что вы умеете проверять свой код, и защищают от поломок при доработках. Начните с функций без ввода-вывода: подсчёта отчёта, проверки пароля, разбора команды.
Итог
Начните с одного из простых проектов, доведите его до рабочей версии с README и только потом переходите к API, ботам и веб-фреймворкам. Для разминки подойдут задачи по Python с решениями, готовые скрипты для повседневных дел — в статье об автоматизации на Python, а общий план обучения — в дорожной карте Python.
- #Python
- #Проекты
- #Пет-проекты
- #Для начинающих
- #Практика