Что можно полезного написать на python

Что можно полезного написать на python

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

Один из действенных подходов – реализовать калькулятор выражений с приоритетами операций. Это позволяет закрепить работу со стеком, парсингом и регулярными выражениями. Добавив поддержку скобок, пользовательских функций и обработку ошибок, можно создать мини-интерпретатор, похожий на модуль ast.

Хорошая идея – написать мини-аналитическую систему, которая парсит CSV-файлы с реальными данными (например, о погоде или курсах валют) и строит сводки: среднее значение, медиану, выбросы. Это развивает навыки работы с модулями csv, statistics и matplotlib, а также укрепляет понимание структуры данных.

Еще один полезный проект – создание API-клиента для публичного сервиса, например, OpenWeatherMap или GitHub. Такая практика включает работу с библиотекой requests, обработку JSON-ответов и организацию кода по принципам модульности. Добавление кэширования запросов (например, с помощью shelve) – полезное усложнение.

Не стоит избегать тестирования: написание собственных модульных тестов на unittest или pytest помогает обнаруживать логические ошибки и выстраивать дисциплину в разработке. Это также необходимый навык для командной работы и сопровождения кода.

Реализация парсера HTML-страниц с использованием библиотеки BeautifulSoup

Для извлечения данных из HTML-документов удобнее всего использовать библиотеку BeautifulSoup совместно с requests. Это позволяет обойтись без громоздких регулярных выражений и вручную обрабатываемых тегов.

  1. Установите необходимые библиотеки:
    pip install beautifulsoup4 requests
  2. Импортируйте модули и выполните HTTP-запрос:
    import requests
    from bs4 import BeautifulSoup
    url = "https://example.com"
    response = requests.get(url)
    soup = BeautifulSoup(response.text, "html.parser")
  3. Поиск элементов выполняется с помощью методов find, find_all, select:
    • soup.find("h1") – первый заголовок первого уровня
    • soup.find_all("a") – список всех ссылок
    • soup.select(".news-item a") – ссылки внутри элементов с классом news-item
  4. Извлечение текста и атрибутов:
    • element.text.strip() – текст без пробелов и тегов
    • element["href"] – значение атрибута href
  5. Пример: парсинг заголовков новостей с сайта:
    news = soup.select(".news-item h2")
    for item in news:
    title = item.text.strip()
    print(title)
  6. Работа с вложенными структурами:
    block = soup.find("div", class_="article")
    title = block.find("h1").text.strip()
    date = block.find("span", class_="date").text.strip()
  7. Обработка исключений и нестабильной разметки:
    • Проверяйте наличие элементов перед обращением к ним
    • Используйте конструкцию .get("href", "") для безопасного доступа к атрибутам

Избегайте избыточного использования find_all в циклах: это замедляет парсинг. Старайтесь максимально использовать CSS-селекторы с select – это быстрее и точнее. Для сложных сайтов используйте инструменты анализа DOM-структуры, например, DevTools в браузере.

Создание телеграм-бота для автоматизации рутинных задач

Создание телеграм-бота для автоматизации рутинных задач

Для создания телеграм-бота потребуется зарегистрировать его через BotFather и получить токен. Далее используется библиотека python-telegram-bot, устанавливаемая командой pip install python-telegram-bot.

Минимальный рабочий пример:

from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler, ContextTypes
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.message.reply_text("Готов к работе.")
app = ApplicationBuilder().token("ВАШ_ТОКЕН").build()
app.add_handler(CommandHandler("start", start))
app.run_polling()

Для автоматизации можно реализовать следующие функции:

1. Отправка ежедневных отчётов. Используется планировщик задач, например, APScheduler. Добавляется фоновый job, вызывающий отправку сообщения в нужное время.

from apscheduler.schedulers.background import BackgroundScheduler
def send_daily_report():
app.bot.send_message(chat_id="ВАШ_CHAT_ID", text="Ваш ежедневный отчёт")
scheduler = BackgroundScheduler()
scheduler.add_job(send_daily_report, 'cron', hour=9, minute=0)
scheduler.start()

2. Обработка входящих файлов. Бот может сохранять документы, автоматически переименовывать и пересылать их:

async def handle_document(update: Update, context: ContextTypes.DEFAULT_TYPE):
file = await update.message.document.get_file()
await file.download_to_drive(f"загрузки/{update.message.document.file_name}")
await update.message.reply_text("Файл получен и сохранён.")

3. Парсинг и отправка информации с сайтов. Совмещая с библиотекой requests и BeautifulSoup, бот может ежедневно присылать актуальные данные, например, курс валют или погоду.

import requests
from bs4 import BeautifulSoup
def get_currency_rate():
page = requests.get("https://www.cbr.ru/")
soup = BeautifulSoup(page.content, "html.parser")
rate = soup.find("div", class_="currency__rate").text
return rate

Используйте хранилище (например, SQLite или Google Sheets API) для логирования и анализа данных, собранных ботом. Это повысит ценность автоматизации и обеспечит прозрачность выполнения задач.

Боты особенно полезны для напоминаний, мониторинга систем, сбора отчётов, уведомлений о событиях и интеграции с CRM. Главное – избегать перегрузки логики в одном файле. Используйте модульную структуру проекта, обрабатывайте исключения и логируйте действия бота через logging.

Обработка CSV и Excel-файлов: чтение, фильтрация и экспорт данных

Обработка CSV и Excel-файлов: чтение, фильтрация и экспорт данных

Чтение CSV-файлов

Для чтения CSV-файлов используется стандартная библиотека `csv` или более мощная библиотека `pandas`. `pandas` позволяет загружать данные в DataFrame, что упрощает работу с большими объемами информации. Пример чтения CSV-файла с использованием `pandas`:

import pandas as pd
df = pd.read_csv('data.csv')

При использовании библиотеки `csv` код будет выглядеть так:

import csv
with open('data.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
print(row)

Фильтрация данных

После загрузки данных можно применить фильтрацию. Например, с помощью `pandas` можно фильтровать строки, удовлетворяющие определенным условиям. Это позволяет извлекать нужную информацию без предварительной ручной обработки.

filtered_data = df[df['column_name'] > 10]

В данном примере выбираются строки, где значение в столбце `column_name` больше 10. Для более сложных условий можно комбинировать фильтрацию с операторами `&` (и) и `|` (или).

Для библиотеки `csv` фильтрация выполняется вручную, проходя через каждую строку и проверяя условия:

with open('data.csv', newline='') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if int(row[2]) > 10:
print(row)

Запись данных в новый CSV-файл

После фильтрации данных их можно записать обратно в CSV-файл. В `pandas` для этого используется метод `to_csv`:

filtered_data.to_csv('filtered_data.csv', index=False)

Для записи в CSV с использованием библиотеки `csv` необходимо воспользоваться объектом `csv.writer`:

with open('filtered_data.csv', mode='w', newline='') as csvfile:
writer = csv.writer(csvfile)
writer.writerows(filtered_data)

Чтение и запись Excel-файлов

Для работы с Excel-файлами удобно использовать библиотеку `openpyxl` (для формата `.xlsx`) или `pandas`. С помощью `pandas` можно легко читать и записывать данные из Excel:

df = pd.read_excel('data.xlsx')
df.to_excel('filtered_data.xlsx', index=False)

Если необходимо работать с несколькими листами в файле, можно указать их через параметр `sheet_name`:

df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

Фильтрация и экспорт с несколькими листами

Для более сложных операций с Excel, например, с несколькими листами, можно читать каждый лист по отдельности и проводить фильтрацию для каждого из них:

xls = pd.ExcelFile('data.xlsx')
sheet1 = pd.read_excel(xls, 'Sheet1')
filtered_sheet1 = sheet1[sheet1['column_name'] > 10]
filtered_sheet1.to_excel('filtered_sheet1.xlsx', index=False)

Для записи нескольких листов в одном Excel-файле используется метод `ExcelWriter`:

with pd.ExcelWriter('output.xlsx') as writer:
sheet1.to_excel(writer, sheet_name='Sheet1', index=False)
sheet2.to_excel(writer, sheet_name='Sheet2', index=False)

Заключение

Обработка CSV и Excel-файлов в Python с помощью библиотек `pandas`, `csv` и `openpyxl` позволяет эффективно решать задачи по чтению, фильтрации и экспорту данных. Эти инструменты подходят как для небольших, так и для больших объемов данных, предоставляя разработчикам мощные средства для манипуляций с данными.

Разработка мини-игры на Pygame с простым управлением

Разработка мини-игры на Pygame с простым управлением

Pygame – это библиотека для создания игр, которая предоставляет все необходимые инструменты для работы с графикой, звуком и вводом с клавиатуры. Начнем с разработки игры, в которой игрок управляет персонажем, двигаясь по экрану, избегая препятствий или собирая предметы.

Первым шагом будет установка библиотеки Pygame, если она еще не установлена. Для этого используем команду:

pip install pygame

После установки импортируем необходимые модули:

import pygame
import random
import sys

Далее создадим окно игры. Для этого инициализируем Pygame и задаем размеры экрана. Важно, чтобы окно было достаточно большим для того, чтобы игрок мог комфортно управлять персонажем:

pygame.init()
screen_width = 800
screen_height = 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Мини-игра на Pygame")

Теперь разработаем простого персонажа. Пусть это будет квадрат, который будет двигаться по экрану с помощью стрелок на клавиатуре. Задаем начальные параметры персонажа:

player_size = 50
player_color = (255, 0, 0)  # Красный цвет
player_x = screen_width // 2
player_y = screen_height // 2
player_speed = 5

Для того чтобы игрок мог управлять персонажем, добавим обработку ввода с клавиатуры в игровом цикле. В этом примере игрок будет использовать стрелки для перемещения персонажа по экрану:

running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player_x -= player_speed
if keys[pygame.K_RIGHT]:
player_x += player_speed
if keys[pygame.K_UP]:
player_y -= player_speed
if keys[pygame.K_DOWN]:
player_y += player_speed
screen.fill((0, 0, 0))  # Черный фон
pygame.draw.rect(screen, player_color, (player_x, player_y, player_size, player_size))
pygame.display.flip()
pygame.time.Clock().tick(60)  # Ограничение частоты кадров
pygame.quit()
sys.exit()

Игровой процесс на данном этапе прост – игрок может перемещать квадрат по экрану с помощью стрелок. Однако для добавления сложности в игру, можно добавить движущиеся препятствия или цели, которые необходимо собирать. Например, создадим препятствие, которое будет двигаться случайным образом по экрану:

obstacle_size = 50
obstacle_color = (0, 255, 0)  # Зеленый цвет
obstacle_x = random.randint(0, screen_width - obstacle_size)
obstacle_y = random.randint(0, screen_height - obstacle_size)
obstacle_speed = 3

В игровом цикле будем обновлять положение препятствия, двигая его по экрану, и проверим, не столкнулся ли игрок с ним:

obstacle_x += obstacle_speed
if obstacle_x > screen_width:
obstacle_x = 0 - obstacle_size
# Проверка на столкновение
if player_x < obstacle_x + obstacle_size and player_x + player_size > obstacle_x and player_y < obstacle_y + obstacle_size and player_y + player_size > obstacle_y:
running = False  # Игра заканчивается при столкновении
pygame.draw.rect(screen, obstacle_color, (obstacle_x, obstacle_y, obstacle_size, obstacle_size))

Это основа игры с простым управлением. Дальше можно добавить дополнительные элементы, такие как счетчик очков, улучшение графики, а также различные уровни сложности. Главное – сосредоточиться на разработке простого, но функционального механизма управления, который позволит игроку легко взаимодействовать с игрой.

При разработке мини-игры в Pygame важно соблюдать баланс между простотой игры и увлекательностью игрового процесса. Постепенно можно добавлять новые функции, такие как звуковые эффекты, анимации или более сложные механизмы взаимодействия, но на первом этапе основное внимание стоит уделить грамотной и понятной реализации управления и логики игры.

Построение REST API с помощью Flask и тестирование запросов

Для начала установим Flask, если он еще не установлен, с помощью команды:

pip install flask

Теперь создадим файл app.py, где будем строить наше API. Начнем с базовой настройки Flask-приложения:

from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/api/greet', methods=['GET'])
def greet():
return jsonify(message="Hello, world!")
if __name__ == '__main__':
app.run(debug=True)

Здесь мы создали простой API-метод, который обрабатывает GET-запросы на путь /api/greet. При обращении к этому маршруту сервер вернет JSON-ответ с сообщением «Hello, world!».

Для тестирования API можно использовать модуль unittest или сторонние инструменты, такие как Postman. Рассмотрим, как написать тесты для нашего API с использованием Flask's test client:

import unittest
from app import app
class APITestCase(unittest.TestCase):
def setUp(self):
self.app = app.test_client()
self.app.testing = True
def test_greet(self):
response = self.app.get('/api/greet')
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json, {"message": "Hello, world!"})
if __name__ == '__main__':
unittest.main()

Здесь мы использовали метод test_client() для симуляции HTTP-запросов к нашему API. Метод test_greet() проверяет, что при отправке GET-запроса на путь /api/greet сервер возвращает статус 200 и правильный JSON-ответ.

Когда тесты написаны, можно запустить их командой:

python -m unittest test_file.py

Этот подход позволяет автоматически проверять корректность работы API на разных этапах разработки. С помощью Flask тестирования можно эффективно отлавливать ошибки в логике обработки запросов и структурировании ответов.

Кроме того, для более сложных сценариев тестирования можно расширить API, добавив поддержку других HTTP-методов (POST, PUT, DELETE), а также учитывать авторизацию и валидацию данных. Однако на этом примере вы видите основные принципы создания и тестирования REST API с использованием Flask.

Использование регулярных выражений для извлечения данных из текста

Использование регулярных выражений для извлечения данных из текста

Для работы с регулярными выражениями в Python используется модуль re. Основные функции модуля позволяют искать шаблоны, заменять части текста и разбивать строку по заданным регулярным выражениям. Важно понимать, что регулярные выражения работают на основе паттернов, которые могут быть настроены под специфические задачи.

Пример базового использования: извлечение всех email-адресов из текста.


import re
text = "Контакты: example@example.com, test@test.com, info@domain.org"
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b', text)
print(emails)

Здесь используется регулярное выражение \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b, которое находит все email-адреса в строке. Функция findall возвращает все совпадения в виде списка.

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


dates = re.findall(r'\b\d{2}\.\d{2}\.\d{4}\b', text)
print(dates)

Здесь \b\d{2}\.\d{2}\.\d{4}\b находит все даты в указанном формате. Важно использовать границы слова \b, чтобы избежать лишних совпадений, например, из частей других чисел.

Регулярные выражения позволяют работать не только с фиксированными шаблонами, но и с динамичными данными. Для извлечения различных значений можно использовать группы захвата. Пример: извлечение имени и фамилии из строки «Иван Иванов».


text = "Иван Иванов"
match = re.match(r'(\w+)\s(\w+)', text)
if match:
print(match.groups())

Здесь (\w+) захватывает имя, а (\w+) – фамилию. Метод match проверяет строку с начала, и, если шаблон совпадает, возвращает объект, из которого можно извлечь значения через groups().

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


modified_text = re.sub(r'\s+', '_', text)
print(modified_text)

Здесь \s+ находит все пробелы, а функция sub заменяет их на подчеркивания. Это полезно для очистки или форматирования данных перед их обработкой.

При работе с регулярными выражениями важно избегать излишней сложности паттернов. Чем сложнее регулярное выражение, тем выше вероятность возникновения ошибок. Старайтесь использовать простые и понятные шаблоны, комбинируя их в зависимости от ситуации.

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

Вопрос-ответ:

Какие идеи могут помочь улучшить навыки программирования на Python для начинающих?

Для начинающих полезно начать с решения простых задач на платформах, таких как Codewars или LeetCode. Практика на таких сайтах помогает развить логическое мышление и лучше понимать синтаксис языка. Также стоит читать исходный код других программ и пытаться понять, как работают различные библиотеки. Регулярная работа с небольшими проектами позволит закрепить полученные знания и осваивать новые функции Python.

Как научиться эффективно использовать библиотеки Python для решения реальных задач?

Чтобы освоить библиотеки Python, лучше всего работать с реальными проектами, в которых они могут быть полезны. Например, если вы хотите работать с данными, начните изучать библиотеки, такие как Pandas и NumPy. Если задача связана с веб-разработкой, стоит изучить Flask или Django. Практика с конкретными библиотеками через проекты даст понимание их возможностей и ограничений, а также научит искать документацию и примеры на форумах.

Как можно улучшить свой подход к тестированию кода на Python?

Хорошая практика — писать тесты еще до написания основной логики программы. Использование фреймворков для тестирования, таких как unittest или pytest, помогает автоматизировать проверку работы кода. Рекомендуется писать как юнит-тесты, так и интеграционные, чтобы проверять работу различных частей программы в связке. Регулярный запуск тестов в процессе разработки помогает избежать ошибок и улучшить качество кода.

Какие инструменты Python помогут ускорить разработку программ?

Одним из инструментов, который значительно ускоряет разработку, является использование виртуальных окружений с помощью venv или conda. Это позволяет изолировать зависимости для каждого проекта, не создавая конфликтов между библиотеками. Также можно использовать различные автоматизаторы задач, такие как Makefile или Fabric, для выполнения повторяющихся операций. Для упрощения работы с базами данных часто используют ORM библиотеки, например, SQLAlchemy. Эти инструменты значительно ускоряют процесс разработки и делают его более удобным.

Как выбрать проект для практики программирования на Python, чтобы он был полезным для развития?

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

Какие основные практики могут помочь улучшить навыки программирования на Python?

Для улучшения навыков программирования на Python важно регулярно практиковать и решать задачи разной сложности. Например, можно начать с выполнения задач на онлайн-платформах, таких как LeetCode или Codewars, которые помогут развить логическое мышление и понимание алгоритмов. Также полезно работать над реальными проектами, будь то веб-разработка, анализ данных или автоматизация задач. Работая с реальными проектами, можно улучшить навыки работы с библиотеками и инструментами, такими как Flask, Django или Pandas. Не менее важно изучать код других разработчиков, чтобы лучше понимать стиль и подходы, используемые в разных проектах. Это поможет развить критическое мышление и позволит находить более элегантные решения задач.

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