Что написать на python для практики

Что написать на python для практики

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

Для хранения задач используется обычный 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

Разработка парсера новостей с использованием библиотеки 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.

Ссылка на основную публикацию