
Python стабильно входит в тройку самых популярных языков программирования по данным TIOBE Index и Stack Overflow Developer Survey. Он используется в автоматизации, анализе данных, веб-разработке, машинном обучении. Вместо теории – практика: грамотный выбор проекта помогает быстрее освоить синтаксис, разобраться в логике языка и познакомиться с ключевыми библиотеками.
Новичкам стоит начинать с задач, в которых результат очевиден. Это, например, конвертер валют с использованием API ЦБ РФ, калькулятор с графическим интерфейсом на Tkinter, текстовый анализатор частотности слов или бот для Telegram с библиотекой python-telegram-bot. Такие проекты учат работе с пользовательским вводом, внешними библиотеками, условиями и циклами.
Опытным пользователям можно рекомендовать более комплексные проекты: веб-приложение на FastAPI с JWT-авторизацией, система обработки CSV-отчётов с Pandas и визуализацией на Plotly, парсинг данных с сайтов через asyncio и aiohttp, а также модель машинного обучения на scikit-learn с REST API для развёртывания. Такие задачи требуют знания архитектуры проекта, работы с асинхронностью, контейнеризацией и тестированием.
Реализация хотя бы трёх-четырёх проектов разного уровня – это уже полноценное портфолио, которое можно показать работодателю или использовать для фриланса. Главное – фиксировать исходный код на GitHub, писать README с описанием зависимостей и сохранять примеры использования.
Создание консольного менеджера задач с сохранением данных в JSON

Для хранения задач используется обычный JSON-файл. Это упрощает структуру данных и исключает зависимость от сторонних библиотек. Каждая задача представлена словарём с ключами: «id», «title», «completed».
Пример структуры файла tasks.json:
[
{
"id": 1,
"title": "Купить продукты",
"completed": false
},
{
"id": 2,
"title": "Позвонить заказчику",
"completed": true
}
]
Основные функции:
Загрузка и сохранение данных: использовать json.load() и json.dump(). Загружать данные при старте, сохранять – после каждого изменения.
Добавление задачи: запросить название, сгенерировать уникальный id (например, по максимальному существующему значению + 1), установить completed в False.
Отметка как выполненной: по номеру задачи найти нужный объект и установить «completed»: true. При необходимости реализовать повторное снятие отметки.
Удаление задачи: фильтровать список по id и сохранить результат без удалённой записи.
Дополнительно можно реализовать сортировку, фильтрацию по статусу, поиск по подстроке. Интерфейс – через простое текстовое меню: выбор действия, ввод параметров. Исключения обрабатывать явно: отсутствие файла, ошибка чтения, ввод недопустимого значения.
Пример команды запуска: python todo.py. Все функции помещаются в один файл. Для крупных проектов – логичное разделение по модулям: работа с файлами, логика задач, интерфейс.
Разработка парсера новостей с использованием библиотеки BeautifulSoup

Для создания парсера потребуется библиотека requests для загрузки HTML-кода и BeautifulSoup из пакета bs4 для извлечения данных. Установка выполняется командой: pip install requests bs4.
Пример целевой страницы: https://example.com/news. Перед запуском убедитесь, что сайт не запрещает парсинг в robots.txt. Используйте заголовки HTTP-запросов, чтобы имитировать поведение браузера: {'User-Agent': 'Mozilla/5.0'}.
Для начала загрузите HTML-код:
import requests
from bs4 import BeautifulSoup
url = "https://example.com/news"
headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")
Поиск блоков с новостями зависит от структуры сайта. Например, если каждый блок обернут в <article> с классом news-item:
articles = soup.find_all("article", class_="news-item")
for article in articles:
title = article.find("h2").get_text(strip=True)
link = article.find("a")["href"]
summary = article.find("p").get_text(strip=True)
print(title, link, summary)
Если ссылки относительные, преобразуйте их через urljoin из модуля urllib.parse:
from urllib.parse import urljoin
full_link = urljoin(url, link)
Для обработки нескольких страниц реализуйте цикл с обновлением URL. Используйте time.sleep() между запросами, чтобы не перегружать сервер. Добавьте логирование и обработку ошибок: проверку кода ответа и наличие нужных элементов на странице.
Сохраняйте данные в CSV-файл через модуль csv:
import csv
with open("news.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["Заголовок", "Ссылка", "Описание"])
for article in articles:
...
writer.writerow([title, full_link, summary])
Проверяйте изменения DOM при обновлении сайта. Автоматизируйте запуск через планировщик задач или cron, если требуется регулярный сбор данных.
Построение телеграм-бота для напоминаний с использованием aiogram
Для создания бота потребуется Python 3.8+, библиотека aiogram версии 3.x и PostgreSQL или SQLite для хранения данных. Начать стоит с установки зависимостей:
pip install aiogram[fast] aiosqlite
Создайте файл bot.py. Импортируйте необходимые модули и настройте объект Bot и Dispatcher:
from aiogram import Bot, Dispatcher, F
from aiogram.types import Message
from aiogram.enums import ParseMode
from aiogram.fsm.storage.memory import MemoryStorage
import asyncio
bot = Bot(token="ВАШ_ТОКЕН", parse_mode=ParseMode.HTML)
dp = Dispatcher(storage=MemoryStorage())
Добавьте состояние для FSM, чтобы обрабатывать ввод времени и текста напоминания:
from aiogram.fsm.state import State, StatesGroup
class Reminder(StatesGroup):
text = State()
time = State()
Создайте хендлеры для ввода текста напоминания и времени в формате HH:MM:
@dp.message(F.text == "/start")
async def cmd_start(message: Message):
await message.answer("Введите текст напоминания:")
await Reminder.text.set()
@dp.message(Reminder.text)
async def get_text(message: Message, state):
await state.update_data(text=message.text)
await message.answer("Когда напомнить? (в формате ЧЧ:ММ)")
await Reminder.time.set()
@dp.message(Reminder.time)
async def set_time(message: Message, state):
from datetime import datetime, timedelta
data = await state.get_data()
text = data["text"]
try:
hour, minute = map(int, message.text.strip().split(":"))
now = datetime.now()
remind_at = now.replace(hour=hour, minute=minute, second=0, microsecond=0)
if remind_at < now:
remind_at += timedelta(days=1)
delay = (remind_at - now).total_seconds()
await message.answer(f"Напоминание установлено на {remind_at.strftime('%H:%M')}")
await asyncio.sleep(delay)
await bot.send_message(chat_id=message.chat.id, text=f"🔔 Напоминание: {text}")
except ValueError:
await message.answer("Некорректный формат времени. Попробуйте снова.")
return
await state.clear()
Для запуска используйте:
if __name__ == "__main__":
async def main():
await dp.start_polling(bot)
asyncio.run(main())
Хранение напоминаний в памяти подходит для начальной версии. Для полноценной работы с множеством пользователей стоит подключить базу данных и планировщик задач (например, APScheduler или Celery).
Автоматизация работы с Excel-файлами через openpyxl
Библиотека openpyxl позволяет создавать, читать и изменять файлы Excel формата .xlsx. Она поддерживает работу с ячейками, стилями, формулами и диаграммами. Установка: pip install openpyxl.
Создание нового файла:
from openpyxl import Workbook
wb = Workbook()
ws = wb.active
ws.title = "Отчёт"
ws['A1'] = "Дата"
ws['B1'] = "Продажи"
wb.save("отчёт.xlsx")
Чтение существующего файла:
from openpyxl import load_workbook
wb = load_workbook("отчёт.xlsx")
ws = wb["Отчёт"]
for row in ws.iter_rows(min_row=2, values_only=True):
print(row)
Изменение значений и сохранение изменений:
ws['B2'] = 12500
wb.save("отчёт_обновлён.xlsx")
Добавление строк:
ws.append(["2025-05-01", 13200])
wb.save("отчёт_обновлён.xlsx")
Форматирование ячеек:
from openpyxl.styles import Font, Alignment
ws['A1'].font = Font(bold=True)
ws['B1'].alignment = Alignment(horizontal="center")
Добавление формулы:
ws['C1'] = "Итого"
ws['C2'] = "=SUM(B2:B10)"
wb.save("отчёт_с_формулой.xlsx")
Фильтрация и автофильтр:
ws.auto_filter.ref = "A1:B100"
wb.save("отчёт_с_фильтром.xlsx")
Скрытие листа:
ws.sheet_state = 'hidden'
wb.save("отчёт_скрыт.xlsx")
Рекомендуется избегать загрузки больших файлов целиком в память. Для чтения только значений используйте read_only=True:
wb = load_workbook("отчёт.xlsx", read_only=True)
ws = wb.active
Для защиты данных можно задать пароль на лист:
ws.protection.sheet = True
ws.protection.set_password("1234")
wb.save("отчёт_защищён.xlsx")
Простейший веб-сервер на Flask с формами и обработкой данных
Установите Flask с помощью команды pip install flask. Создайте файл app.py со следующим содержимым:
from flask import Flask, request, render_template_string
app = Flask(__name__)
HTML_FORM = '''
<form method="post">
Имя: <input type="text" name="username"><br>
Сообщение: <textarea name="message"></textarea><br>
<input type="submit" value="Отправить">
</form>
{% if username and message %}
<p>Получено: {{ username }} написал: "{{ message }}"</p>
{% endif %}
'''
@app.route("/", methods=["GET", "POST"])
def index():
username = message = None
if request.method == "POST":
username = request.form.get("username", "").strip()
message = request.form.get("message", "").strip()
return render_template_string(HTML_FORM, username=username, message=message)
if __name__ == "__main__":
app.run(debug=True)
Для запуска сервера выполните python app.py и откройте http://127.0.0.1:5000/ в браузере. Форма передаёт данные методом POST. Обработка значений осуществляется через request.form. В шаблоне используется render_template_string для генерации HTML без отдельных файлов.
Для обработки ошибок используйте try/except внутри блока if request.method == "POST". Для валидации вводов добавьте регулярные выражения или библиотеки, такие как WTForms. При размещении на сервере отключите режим debug.
Генерация PDF-документов с пользовательским содержимым через ReportLab
Для создания PDF-документов на Python используется библиотека ReportLab. Этот инструмент позволяет программно генерировать документы с текстом, изображениями и графикой. Ниже приведены основные шаги для работы с ReportLab и создания PDF-документов с динамическим содержимым.
Установка ReportLab:
pip install reportlab
После установки ReportLab можно начать работу с его функциями. Для начала создадим простой PDF-документ с текстом, который будет изменяться в зависимости от пользовательского ввода.
Пример кода:
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
def generate_pdf(filename, user_content):
c = canvas.Canvas(filename, pagesize=letter)
c.drawString(100, 750, "Пользовательский контент:")
c.drawString(100, 730, user_content)
c.save()
content = "Это тестовый текст, введенный пользователем."
generate_pdf("output.pdf", content)
Динамическое добавление текста
Можно создавать более сложные структуры, например, добавлять несколько строк текста, что важно для более длинных документов:
def generate_dynamic_pdf(filename, lines):
c = canvas.Canvas(filename, pagesize=letter)
y_position = 750
for line in lines:
c.drawString(100, y_position, line)
y_position -= 20
c.save()
lines = [
"Первая строка текста.",
"Вторая строка текста.",
"Третья строка текста."
]
generate_dynamic_pdf("dynamic_output.pdf", lines)
Добавление изображений
Для добавления изображений используйте метод drawImage. Это полезно при создании отчетов с графиками или логотипами:
def add_image_to_pdf(filename, image_path):
c = canvas.Canvas(filename, pagesize=letter)
c.drawImage(image_path, 100, 500, width=200, height=200)
c.save()
add_image_to_pdf("image_output.pdf", "logo.png")
Здесь drawImage принимает путь к изображению и его размеры на странице.
Работа с шрифтами
ReportLab позволяет изменять шрифты и их размеры. Для этого можно использовать метод setFont, который задает стиль шрифта:
def custom_font_pdf(filename):
c = canvas.Canvas(filename, pagesize=letter)
c.setFont("Helvetica-Bold", 14)
c.drawString(100, 750, "Текст с настраиваемым шрифтом")
c.save()
custom_font_pdf("font_output.pdf")
Создание многостраничных PDF
Для создания многостраничных документов используется метод showPage, который инициирует переход на новую страницу:
def multi_page_pdf(filename, content):
c = canvas.Canvas(filename, pagesize=letter)
y_position = 750
for line in content:
c.drawString(100, y_position, line)
y_position -= 20
if y_position < 100:
c.showPage()
y_position = 750
c.save()
content = ["Страница 1"] * 50 + ["Страница 2"] * 50
multi_page_pdf("multi_page_output.pdf", content)
В этом примере создается документ с несколькими страницами, когда текст не помещается на текущей.
Заключение
ReportLab – мощный инструмент для генерации PDF-документов с пользовательским содержимым. Используя простые методы для добавления текста, изображений и изменения шрифтов, можно создавать динамичные и адаптированные под нужды документы. Основные моменты, на которые стоит обратить внимание при работе с ReportLab, это правильное позиционирование элементов на странице и управление многостраничными документами.
Реализация простого чата с использованием сокетов
Для создания чата с использованием сокетов необходимо понимать основы работы с сетевыми соединениями и передачи данных. В Python для этих целей отлично подходит модуль socket, который предоставляет функции для работы с сокетами и передачи данных между сервером и клиентом.
Создание сервера

Сервер будет слушать подключения от клиентов, принимать сообщения и передавать их обратно. Для этого создадим сервер, который будет работать на определенном порту.
import socket
# Настройки сервера
host = '127.0.0.1' # Локальный хост
port = 12345 # Порт для соединений
# Создаем сокет
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((host, port)) # Привязываем к порту
server_socket.listen(5) # Максимальное количество подключений
print("Ожидание подключений...")
while True:
# Принятие подключения
client_socket, addr = server_socket.accept()
print(f"Подключен клиент: {addr}")
# Обработка сообщений
while True:
message = client_socket.recv(1024).decode('utf-8')
if message == 'exit':
print("Отключение клиента...")
break
print(f"Сообщение от клиента: {message}")
client_socket.send(f"Ответ от сервера: {message}".encode('utf-8'))
client_socket.close()Создание клиента
Клиент будет отправлять сообщения на сервер и получать ответы. Для этого используется тот же модуль
socket, но в роли клиента.import socket
# Настройки клиента
host = '127.0.0.1'
port = 12345
# Создаем сокет
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((host, port))
while True:
message = input("Введите сообщение: ")
client_socket.send(message.encode('utf-8'))
if message == 'exit':
print("Отключение от сервера...")
break
response = client_socket.recv(1024).decode('utf-8')
print(f"Ответ от сервера: {response}")
client_socket.close()Подключение и обмен сообщениями
- Сервер ожидает подключений, и как только клиент подключается, устанавливается соединение.
- Клиент отправляет сообщение на сервер, которое сервер принимает и отправляет обратно с добавленным текстом.
- Чтобы завершить чат, нужно отправить сообщение
'exit', после чего сервер закроет соединение.
Советы
- Не забывайте обрабатывать ошибки соединений, например, если сервер не доступен или произошел сбой в передаче данных.
- Для многопользовательского чата сервер можно модифицировать так, чтобы он поддерживал несколько клиентов одновременно, используя потоки или асинхронные операции.
- Использование библиотеки
threadingпоможет реализовать параллельную обработку нескольких клиентов на сервере.
Дальнейшее улучшение

- Добавьте логирование сообщений и хранение истории чатов в файл или базу данных.
- Реализуйте клиентский интерфейс с использованием библиотеки
tkinter, чтобы сделать приложение более удобным для пользователя.
Вопрос-ответ:
Какие проекты на Python подойдут для новичков?
Для начинающих Python-разработчиков стоит начать с небольших и простых проектов. Например, можно создать калькулятор, который выполняет базовые арифметические операции. Также интересным проектом будет "Угадай число", где программа загадывает число, а пользователь должен его угадать. Программу "Чат-бот", который отвечает на простые вопросы, также можно сделать в рамках начального уровня. Все эти проекты помогут разобраться в синтаксисе языка и понять основные концепции программирования.
Какой проект на Python может быть интересен более опытным разработчикам?
Для опытных разработчиков стоит попробовать проекты, которые требуют более глубоких знаний Python и его библиотек. Один из таких проектов — веб-приложение с использованием Flask или Django. Например, можно создать блог с возможностью добавления, редактирования и удаления постов. Ещё интересный вариант — анализ данных с использованием Pandas, где нужно обработать и визуализировать данные из CSV-файлов. Разработка таких проектов поможет укрепить знания фреймворков и работы с данными.
Можно ли создавать игры на Python? Если да, то с чего начать?
Да, на Python можно создавать игры, и это отличный способ изучать язык. Для начала можно попробовать создать простую 2D-игру, например, "Змейку" или "Крестики-нолики". Использование библиотеки Pygame для графики и звуков значительно облегчает этот процесс. Если ты уже имеешь опыт работы с Python, можно попробовать более сложные игры с использованием фреймворков для разработки игр, например, Panda3D или Godot, которые также поддерживают Python.
Какие проекты на Python могут помочь развить навыки работы с базами данных?
Для развития навыков работы с базами данных стоит попробовать проекты, которые требуют взаимодействия с SQL. Например, можно создать систему для учета книг в библиотеке, где необходимо сохранять, редактировать и удалять записи о книгах в базе данных. Также интересным проектом будет создание приложения для управления задачами с использованием базы данных для хранения информации о задачах. В этих проектах важно научиться работать с запросами и интеграцией Python с различными СУБД, такими как SQLite или PostgreSQL.
