Python для начинающих
1.24K subscribers
546 photos
3 videos
232 files
74 links
Python для начинающих
Download Telegram
Как использовать OpenAI GPT для создания интеллектуальных приложений.
Как использовать OpenAI GPT для создания интеллектуальных приложений

Искусственный интеллект перестал быть чем-то из области фантастики. Сегодня у вас есть возможность использовать мощь OpenAI GPT для создания приложений, которые понимают текст, генерируют осмысленные ответы, пишут статьи и даже помогают с кодированием. В этой статье я расскажу, как подключить GPT к своему приложению на Python и шаг за шагом разберу основные аспекты работы с ним.

### Начнем с подключения к API OpenAI

Первым делом необходимо зарегистрироваться на платформе OpenAI и получить API-ключ. Этот ключ понадобится для взаимодействия с моделью GPT. Ниже пример минимального кода для работы с их API:

import openai

# Укажите ваш API-ключ
openai.api_key = 'your-api-key-here'

# Пример запроса к модели GPT
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Что такое Python?"}
]
)

print(response['choices'][0]['message']['content'])


Этот код отправляет запрос к модели ChatGPT и возвращает ответ. А теперь разберемся, какие интересные функции можно на этом построить.

---

### Идея 1: Chatbot — помощник для ваших нужд

Создание интеллектуального помощника — это классическая идея. GPT позволяет адаптировать свои ответы под конкретные задачи. Например, можно сделать бота, который рассказывает анекдоты, объясняет научные термины простым языком или даже консультирует по программированию.

Пример: бот для упрощенного объяснения сложных концепций.

def explain_concept(query):
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{"role": "system", "content": "Объясняй сложные концепции понятным языком."},
{"role": "user", "content": query}
]
)
return response['choices'][0]['message']['content']

# Использование
print(explain_concept("Что такое рекурсия?"))


---

### Идея 2: Генерация текстов и идей

GPT может быть вашим личным копирайтером. Например, если вам нужно сгенерировать описание продукта или написать маркетинговый текст, вы можете написать простой скрипт:

def generate_description(product_name, audience):
prompt = f"Напиши описание для продукта '{product_name}', ориентированное на аудиторию: {audience}."
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return response['choices'][0]['message']['content']

# Пример использования
print(generate_description("умные часы", "люди старшего возраста"))


---

### Идея 3: Улучшение пользовательского опыта

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

def reply_to_feedback(feedback):
prompt = f"На отзыв клиента сформулируй вежливый и информативный ответ: {feedback}"
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
return response['choices'][0]['message']['content']

# Пример использования
print(reply_to_feedback("Ваш сервис слишком медленный. Можно что-то сделать?"))


---

### Важные заметки при работе с OpenAI GPT

1. Ограничения модели. GPT хорош в понимании текста, но он не знает всего и может иногда придумывать факты. Если вы строите на его базе продукт, убедитесь в наличии дополнительной проверки данных.
2. Стоимость запросов. Использование API не бесплатное, поэтому оптимизируйте запросы. Например, передавайте только необходимую информацию.
3. Контроль тона и стиля. Модель чувствительна к инструкциям, которые вы задаете.
Тщательно продумывайте роль ассистента (например, "Будь забавным", "Рассказывай нейтрально").

---

### Перспективы использования

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

Попробуйте интегрировать GPT в свои идеи, и вы, возможно, будете удивлены, как быстро это вытянет ваш проект на новый уровень!
Разработка приложений реального времени на Python с использованием WebSocket.
---
# Разработка приложений реального времени на Python с использованием WebSocket

Когда дело доходит до разработки приложений реального времени, Python становится настоящим спасителем. Чат-боты, онлайн-игры, биржевые терминалы, системы уведомлений и многое другое — все это требует мгновенного обмена данными между клиентом и сервером. И вот тут в дело вступает WebSocket — мощный протокол, позволяющий передавать данные в режиме реального времени.

Сегодня я расскажу, как настроить и использовать WebSocket в Python, объясняя все на живых примерах. Также познакомлю вас с замечательной библиотекой — websockets, которая делает работу с этим протоколом не только легкой, но и по-настоящему приятной.

---

### Что такое WebSocket и зачем он нужен?

По умолчанию, для передачи данных между клиентом и сервером HTTP использует парадигму "запрос-ответ". Клиент отправляет запрос — сервер отвечает. Однако для приложений реального времени такой подход неэффективен: наличие задержки между запросом клиента и ответом сервера, постоянное создание новых подключений — все это создает избыточную нагрузку.

WebSocket решает эту проблему, устанавливая одно соединение, которое остается открытым на протяжении всей сессии. Клиент и сервер могут свободно общаться друг с другом "на равных", что позволяет мгновенно отправлять данные.

---

### Основы работы с WebSocket на Python

Для начала, давайте настроим простой сервер на websockets. Эта библиотека позволяет создавать легковесные серверы, идеально подходящие для приложений реального времени.

1. Установка библиотеки
Для начала установим модуль:
  
pip install websockets


2. Пример сервера WebSocket
Вот простой сервер, который отвечает клиенту "Hello, Client!" на каждое принимаемое сообщение:

  
import asyncio
import websockets

async def echo_server(websocket, path):
async for message in websocket:
print(f"Received: {message}")
await websocket.send("Hello, Client!")

start_server = websockets.serve(echo_server, "localhost", 12345)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()


Этот код делает следующее:
- Создает сервер по адресу localhost:12345.
- Обрабатывает входящие сообщения, отправляя ответ обратно клиенту.
- Сервер всегда находится в состоянии ожидания новых подключений.

3. Пример клиента WebSocket
Теперь напишем клиент, который соединяется с сервером и отправляет сообщение:

  
import asyncio
import websockets

async def echo_client():
uri = "ws://localhost:12345"
async with websockets.connect(uri) as websocket:
await websocket.send("Hello, Server!")
response = await websocket.recv()
print(f"Server says: {response}")

asyncio.run(echo_client())


Этот код подключается к серверу, отправляет сообщение и выводит его ответ.

---

### Расширяем функциональность

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

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

  
connected_clients = set()

async def chat_server(websocket, path):
connected_clients.add(websocket)
try:
async for message in websocket:
for client in connected_clients:
if client != websocket:
await client.send(message)
finally:
connected_clients.remove(websocket)


Этот сервер:
- Хранит активные подключения в connected_clients.
- Отправляет сообщение всем клиентам, кроме отправителя.

2.
👍2
Клиент для чата
Клиенты будут отправлять сообщения на сервер и отображать сообщения других пользователей:

  
async def chat_client():
uri = "ws://localhost:12345"
async with websockets.connect(uri) as websocket:
while True:
user_input = input("You: ")
await websocket.send(user_input)
response = await websocket.recv()
print(f"Friend: {response}")

asyncio.run(chat_client())


Теперь у нас есть полноценное приложение для общения в реальном времени!

---

### Преимущества и ограничения

Почему стоит использовать WebSocket?
- Постоянное соединение.
- Двусторонняя передача данных.
- Низкая задержка.

Однако, несмотря на преимущества, стоит помнить о некоторых ограничениях:
- WebSocket может быть избыточным для приложений, где нет строгих требований к мгновенной передаче данных.
- Управление соединениями требует ресурсов сервера.

---

WebSocket — это невероятный инструмент для создания интерактивных приложений. С помощью Python и библиотеки websockets вы можете буквально за несколько строк кода создавать мощные приложения реального времени. Хотите онлайн-игры, уведомления или системы мониторинга? Все это всего в нескольких строчках кода. Главное — начать экспериментировать!
👍3
Создание приложений виртуальной реальности с использованием Python и Unity.
### Создание приложений виртуальной реальности с использованием Python и Unity

Привет, друзья! Виртуальная реальность (VR) уже давно перестала быть чем-то далеким и фантастическим — сегодня создание своих VR-приложений доступно каждому, кто готов немного углубиться в программирование. Сегодня я расскажу, как Python, любимый многими, удивительно гармонично сочетается с Unity, одним из самых популярных инструментов для разработки игр и VR, несмотря на то, что Unity изначально работает с C#. Готовы? Тогда погружаемся в этот технологический мир!

#### Python и Unity: как они работают вместе?

Unity базируется на своем встроенном языке — C#. Python вроде не из их компании, но благодаря специальным библиотекам и подходам они могут подружиться. Одним из самых частых способов интеграции Python и Unity является использование пакета Pythonnet, который позволяет запускать код Python внутри приложений на .NET.

Еще один популярный инструмент — Unity-Python Integration (например, с использованием IronPython или внешних скриптов Python для дополнительной логики). Это помогает Python выступать в роли "мозга" для вашего VR-приложения: он может обрабатывать данные, управлять взаимодействиями и даже использовать мощные библиотеки вроде NumPy для расчётов или OpenCV для обработки изображений.

#### Что может Python в VR?

Python замечательно справляется с такими задачами, как:
- Прототипирование приложений. Хотите быстро обработать данные пользовательского взаимодействия в своей VR-среде? Python спасет.
- Анализ данных: извлечь данные отслеживания движения, распознавание жестов или сбор статистики о взаимодействиях пользователя.
- Генерация контента: например, использовать алгоритмическую генерацию ландшафтов на основе математических моделей в Python.
- Построение систем искусственного интеллекта (AI): подключите машинное обучение с помощью TensorFlow или PyTorch.

#### Как все это воплотить?

Рассмотрим пример интеграции Python и Unity на практике. Пусть мы хотим создать простой VR-прототип, где Python обрабатывает ввод данных, а Unity отображает их в трехмерной среде.

##### 1. Установка Pythonnet
Сначала поставим Pythonnet:
pip install pythonnet


##### 2. Настройка проекта Unity
В Unity создайте проект с 3D-шаблоном и добавьте базовые объекты: например, VR-камеру и пару UI-объектов для отображения данных.

##### 3. Интеграция Python кода
Здесь небольшой скрипт на Python для обработки событий:
import random

def generate_random_coordinates():
x = random.uniform(-5, 5)
y = random.uniform(-5, 5)
z = random.uniform(-5, 5)
return x, y, z


##### 4. Использование Python-классов в Unity
Далее потребуется написать скрипт C# в Unity для работы с Python-кодом через Pythonnet:
using Python.Runtime;
using UnityEngine;

public class PythonIntegration : MonoBehaviour
{
void Start()
{
using (Py.GIL())
{
dynamic pyScript = Py.Import("your_python_script_name");
var coords = pyScript.generate_random_coordinates();
Debug.Log($"Coordinates generated by Python: {coords}");
}
}
}

Не забудьте сохранить свой Python-скрипт рядом с исполняемым файлом Unity (`your_python_script_name.py`).

##### 5. Запуск в VR
После интеграции вышеописанного кода, добавьте генерацию объектов в Unity на основе координат и запустите всё в VR-среде. Например, можно привязать появление объектов к результатам из функции generate_random_coordinates.

#### Пару советов напоследок

1. Если ваш проект сложный или использует Python для интенсивных расчетов, рассмотрите создание отдельного Python-сервера, который будет взаимодействовать с Unity через API (например, через WebSocket или REST).
2. Unity уже включает в себя плагины для VR, такие как Oculus Integration или SteamVR Plugin, так что смело добавляйте их в проект.

#### Заключение

Python и Unity вместе открывают огромные возможности для творчества.
Используя Python для обработки данных, логики и автоматизации, можно сэкономить время и сосредоточиться на создании увлекательных опытов для пользователей VR. Конечно, потребуется немного усилий для интеграции языков, но результат стоит того. Экспериментируйте, пробуйте новое и заходите в мир VR с Python!
Основы создания чат-ботов на платформах Viber и Messenger.
Основы создания чат-ботов на платформах Viber и Messenger

Сегодня мир все больше переходит в формат общения через мессенджеры, и это открывает огромные возможности для разработчиков. Чат-боты стала неотъемлемой частью клиентского взаимодействия: они консультируют, принимают заказы, развлекают и экономят ресурсы компаний. В этом посте мы разберем ключевые этапы создания чат-ботов для двух популярных платформ — Viber и Messenger — с использованием языка Python. Вас ждут простые примеры и полезные инструменты, которые помогут начать буквально через несколько минут.

### Как это работает?

Чат-бот ведет общение с пользователем через платформу мессенджера. Вы предоставляете ему некий интеллект (например, через заранее заданные сценарии или даже через интеграцию с AI), подключаете его к API мессенджера, и — вуаля! — он готов отвечать на запросы пользователей.

Платформы Messenger и Viber предоставляют официальные API (и SDK), которые позволяют создавать таких ботов. Для работы с ними нужно зарегистрировать своего бота на платформе, получить ключи API и настроить взаимодействие через вебхуки.

---

### Шаг 1. Устанавливаем инструменты

Первое, что вам понадобится для начала разработки, — это Python и несколько популярных библиотек:

1. Flask для создания веб-сервера (хендлеров запросов от платформ).
2. requests для взаимодействия с API.
3. pyngrok для быстрого туннелирования запросов с платформы к вашему локальному серверу.

Установите их с помощью pip:
pip install flask requests pyngrok


Чтобы взаимодействовать с мессенджерами, вам также нужно зарегистрироваться на их платформах (Viber Developers или Facebook Developers), создать приложение и получить токен вашего бота.

---

### Шаг 2. Настройка вебхуков

Оба мессенджера используют вебхуки — это механизмы, которые позволяют платформе отправлять запросы на ваш сервер (например, когда пользователь отправляет сообщение, мессенджер уведомляет ваш сервер через вебхук).

Пример настройки вебхука для Viber:
import requests

viber_token = "YOUR_VIBER_TOKEN"
webhook_url = "https://your-ngrok-url/viber-webhook"

response = requests.post(
"https://chatapi.viber.com/pa/set_webhook",
json={"url": webhook_url},
headers={"X-Viber-Auth-Token": viber_token}
)
print(response.json())


---

### Шаг 3. Создаем бота

Теперь перейдем к коду.
Допустим, мы пишем простого бота, который отвечает на входящие текстовые сообщения "Hello" приветствием.

#### Пример для Viber:
from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/viber-webhook', methods=['POST'])
def viber_webhook():
data = request.json
message = data.get("message", {}).get("text", "").lower()

if message == "hello":
reply = {
"receiver": data["sender"]["id"],
"min_api_version": 1,
"sender": {"name": "YourBot"},
"tracking_data": "tracking_data",
"type": "text",
"text": "Hello, human!"
}
return jsonify(reply)
return 'ok', 200

if __name__ == '__main__':
app.run()


#### Пример для Messenger:
Для Messenger конфигурация чуть сложнее: вам нужно обработать сообщения через Messenger Graph API.

@app.route('/messenger-webhook', methods=['POST'])
def messenger_webhook():
data = request.json
for entry in data["entry"]:
for event in entry["messaging"]:
if "message" in event:
sender_id = event["sender"]["id"]
message_text = event["message"]["text"]

if message_text.lower() == "hello":
send_message(sender_id, "Hello, human!")
return 'ok', 200

def send_message(sender_id, text):
url = f"https://graph.facebook.com/v15.0/me/messages?access_token=YOUR_PAGE_TOKEN"
headers = {"Content-Type": "application/json"}
payload = {
"recipient": {"id": sender_id},
"message": {"text": text}
}
requests.post(url, json=payload, headers=headers)


---

### Шаг 4. Тестирование

Чтобы быстро протестировать вашего бота, можно использовать Ngrok — он позволяет запустить локальный сервер и предоставить ему публичный HTTPS-URL.

Установите Ngrok и запустите его:
ngrok http 5000


В ответ вы получите ссылку вида https://12345.ngrok.io. Используйте ее, чтобы настроить вебхуки на платформе мессенджера.

---

### Шаг 5. Расширение функционала

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

Например, на платформе Viber для создания кнопок достаточно модифицировать JSON-объект ответа:
reply = {
"receiver": data["sender"]["id"],
"type": "rich_media",
"rich_media": {
"ButtonsGroupColumns": 6,
"ButtonsGroupRows": 1,
"Buttons": [
{
"ActionType": "reply",
"ActionBody": "Yes",
"Columns": 3,
"Rows": 1,
"Text": "Yes"
},
{
"ActionType": "reply",
"ActionBody": "No",
"Columns": 3,
"Rows": 1,
"Text": "No"
},
]
}
}


---

На основе этих примеров вы можете создавать своих помощников, автоматизировать рутинные процессы и строить масштабные системы. Всё, что вам нужно, — это идея, настройка окружения и немного кода. Удачной разработки!
Как упаковать Python приложение в Docker-контейнер.
Как упаковать Python-приложение в Docker-контейнер

Привет, друзья! Сегодня мы с вами поговорим о том, как упаковать Python-приложение в Docker-контейнер. Что это даст? Конечную версию вашего приложения можно будет запускать на любом сервере (или компьютере) без необходимости устанавливать зависимости и настраивать окружение. Меньше проблем для вас, меньше головной боли для тех, кто будет это приложение деплоить. В общем, звучит прекрасно, правда?

Если вы новичок в Docker — не переживайте, все будет понятно. А самое главное — никакой магии, только четкие шаги и практический пример.

---

### Что такое Docker?

Docker — это инструмент для создания изолированных контейнеров, которые работают как миниатюрные виртуальные машины. В каждом контейнере можно упаковать свое приложение со всеми необходимыми зависимостями. Вы собираете контейнер, отправляете его куда угодно, и он гарантированно будет работать одинаково.

Теперь разберемся, как это применить на практике для Python-приложения.

---

### 1. Открываем проект

Допустим, у вас есть простой скрипт на Python. Создайте новый проект (или используйте существующий). Пусть структура выглядит примерно так:

my_app/
├── app.py
├── requirements.txt


В файле app.py напишем что-то совсем простое, например:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
return "Hello, Docker!"


А в requirements.txt добавим все зависимости. В нашем случае это только Flask:

Flask==2.2.5


---

### 2. Создаем Dockerfile

Dockerfile — это файл-инструкция для Docker, который говорит, как создать ваш контейнер. В корне проекта создайте файл Dockerfile и добавьте в него следующее:

# Берем базовый образ с Python 3.10
FROM python:3.10-slim

# Указываем рабочую директорию в контейнере
WORKDIR /app

# Копируем файлы проекта в контейнер
COPY requirements.txt requirements.txt
COPY app.py app.py

# Устанавливаем зависимости
RUN pip install --no-cache-dir -r requirements.txt

# Указываем команду для запуска приложения
CMD ["python", "app.py"]


Разберем, что тут происходит:
1. FROM — берем базовый образ с Python (облегченную версию slim).
2. WORKDIR — указываем директорию внутри контейнера, где будет жить наш код.
3. COPY — копируем наши файлы (requirements.txt и app.py) в контейнер.
4. RUN — устанавливаем зависимости.
5. CMD — определяем команду, которая запустит приложение при старте контейнера.

---

### 3. Сборка Docker-образа

Теперь мы готовы собрать Docker-образ (по сути, "шаблон" для контейнера). Откройте терминал, перейдите в папку с проектом и выполните:

docker build -t my_app:latest .


Здесь:
- -t my_app:latest — задаем имя и тег для нашего образа.
- . — указывает на то, что Dockerfile находится в текущей директории.

---

### 4. Запуск Docker-контейнера

Собрали образ? Отлично! Теперь запустим контейнер из него:

docker run -p 5000:5000 my_app:latest


- -p 5000:5000 — связывает порт 5000 на вашей машине с портом 5000 внутри контейнера (а Flask по умолчанию слушает именно 5000-й порт).

Теперь откройте браузер и зайдите на http://localhost:5000. Видите "Hello, Docker!"? Здорово, контейнер работает как часы.

---

### 5. Что дальше?

Упаковав приложение в Docker-контейнер, вы получаете универсальный способ его запуска. Хотите развернуть это на сервере? Просто скопируйте образ, запустите там контейнер — и готово. Установка Python и настройка окружения больше не проблема.

Вот и все, ваш первый контейнер готов! Поздравляю, теперь можете упаковывать даже сложные Python-приложения и не бояться, что у кого-то что-то "не заработает". Просто контейнеризация и никаких проблем.

---

Надеюсь, статья была полезной! До встречи в следующем посте, где мы разберем еще больше крутых возможностей Python и инструментов вокруг него! ;)
👍4
Использование библиотеки Pydantic для валидации данных в приложениях.
Pydantic для валидации данных: спасение для вашего кода

В мире программирования есть одна извечная проблема — данные. Нет, правда! Данные поступают из внешних API, пользовательских форм, файлов или куда хуже — от самих пользователей. А что мы, программисты, чаще всего получаем в итоге? Нет, не чистые и структурированные данные, а хаос. Тут-то на сцену и выходит библиотека Pydantic, вооруженная строгостью и элегантностью.

Если вы разрабатываете какие-либо приложения — от микросервисов до обычных скриптов — Pydantic станет вашим верным помощником в валидации и сериализации данных. Давайте разбираться, как это работает.

---

### Что такое Pydantic?

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

Вместо того чтобы писать километры условий для проверки входных данных, вам достаточно описать модель, а Pydantic позаботится о проверке их соответствия.

---

### Работа с Pydantic на практике

Давайте разберем простые примеры, чтобы вы могли оценить, насколько это полезный инструмент.

#### 1. Определение моделей

С помощью Pydantic можно описать данные, которые вы ожидаете. Например, информация о пользователе:

from pydantic import BaseModel
from datetime import date

class User(BaseModel):
username: str
email: str
birthdate: date
is_active: bool = True


Модель User содержит четыре поля с различными типами данных. Заметьте, что is_active имеет значение по умолчанию — валидация таких полей не требует дополнительных усилий.

#### 2. Проверка данных

Теперь попробуем создать объект User и посмотрим, как Pydantic работает с входными данными:

input_data = {
"username": "john_doe",
"email": "john@example.com",
"birthdate": "1990-05-15",
"is_active": "yes"
}

try:
user = User(**input_data)
print(user)
except Exception as e:
print(f"Validation error: {e}")


Что произойдет? Ну, предсказуемо — в поле is_active указана строка "yes", а не логическое значение. Pydantic тут же поднимет ошибку и объяснит, что ожидается значение типа bool.

#### 3. Конвертация данных

Но что, если данные верны, но указаны в "неудобном" формате? Pydantic умеет преобразовывать их автоматически:

input_data = {
"username": "jane_doe",
"email": "jane@example.com",
"birthdate": "1992-07-22",
"is_active": 1 # Да, это int, но Pydantic поймет!
}

user = User(**input_data)
print(user)


Результат? Поле is_active, несмотря на числовой вход, будет успешно приведено к типу bool. Это избавляет вас от лишней работы с привидениями (ну, в смысле, с преобразованием типов).

---

### Дополнительные возможности

Pydantic — это не просто инструмент для валидации. Вот еще несколько классных фич:

- Дефолтные значения: Установка стандартных значений для полей.
- Кастомная валидация: Если вам мало стандартных проверок, можно писать свои, используя декоратор @validator.
- Модели данных вложенного уровня: Pydantic поддерживает вложенность, что удобно для работы со сложными объектами.
- Работа с JSON: Легкая сериализация и десериализация данных.

Пример кастомной валидации:

from pydantic import BaseModel, validator

class Product(BaseModel):
name: str
price: float

@validator("price")
def validate_price(cls, value):
if value <= 0:
raise ValueError("Price must be greater than zero")
return value

product = Product(name="Laptop", price=999.99)
print(product)


Теперь, если кто-то попытается указать отрицательную или нулевую цену, он сразу же встретится с исключением.
Удобно, правда?

---

### Зачем это нужно?

Можно возразить: "Зачем Pydantic, если я и так могу проверять данные вручную?". Ответ прост: Pydantic экономит ваше время, код становится чище, а ошибки легче отлавливать. Вместо изобретения велосипеда вы получаете готовое решение — тестированное и надежное.

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

---

### Заключение

Pydantic — это тот инструмент, которому вы не забудете сказать "спасибо". С его помощью вы можете забыть о головной боли, связанной с валидацией данных, и сосредоточиться на разработке функциональности. Попробуйте Pydantic в своем следующем проекте, и вы заметите, насколько проще станет жизнь.
Как создавать графические анимации с помощью Manim.
Создаем графические анимации с помощью Manim

Привет! Сегодня я хочу рассказать вам о потрясающей библиотеке Python, которая позволяет создавать захватывающие графические анимации. Это Manim — инструмент, который изначально разработал Грант Сандерсон, автор популярного YouTube-канала 3Blue1Brown. Если вы когда-либо видели его образовательные видео с красивыми анимациями, то вам точно стоит узнать, как можно создать нечто подобное самостоятельно.

Manim (Mathematical Animation Engine) — это мощный инструмент для создания визуализаций, особенно полезный для объяснения математических или научных концепций. Несмотря на его сложность на первый взгляд, начать с ним работать совсем несложно. Самый большой плюс этой библиотеки заключается в том, что весь процесс состоит из написания кода. Хотите создать вращающийся куб? Пару строк в Python — и вы на коне!

---

### Установка Manim

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

pip install manim


После установки вы готовы к созданию своей первой анимации.

---

### Простая анимация с квадратом

Чтобы понять, как работает Manim, давайте создадим базовую анимацию, где квадрат появляется на экране и плавно передвигается вправо. Вот минимальный пример:

from manim import *

class MovingSquare(Scene):
def construct(self):
square = Square() # Создаем квадрат
self.play(Create(square)) # Анимация появления квадрата
self.play(square.animate.shift(RIGHT * 2)) # Перемещаем квадрат вправо


В этом коде:

- Мы импортируем manim и создаем класс MovingSquare, который наследуется от Scene.
- Метод construct, который мы переопределяем, определяет, что будет происходить в анимации.
- Функция Create отвечает за постепенное появление объекта на экране.
- Мы используем метод animate и функцию shift для перемещения объекта.

Чтобы создать итоговое видео, выполните команду в терминале:

manim -pql your_script.py MovingSquare


Опции -pql означают предварительный просмотр (p), высокую скорость рендеринга (q), анимацию с низким качеством (l).

---

### Добавляем стиль

Давайте немного украсим нашу анимацию. Например, добавим цветной текст, круг и вращения:

from manim import *

class StyledAnimation(Scene):
def construct(self):
text = Text("Hello, Manim!", color=BLUE)
circle = Circle(color=RED).shift(UP)
self.play(Write(text)) # Анимация написания текста
self.play(DrawBorderThenFill(circle)) # Рисуем круг
self.play(Rotate(circle, angle=PI)) # Вращаем круг на 180 градусов
self.wait(1)


Manim предоставляет гибкие возможности для стилизации объектов. Вы можете изменять их цвет, размер, прозрачность и даже анимировать весь процесс.

---

### Используем математику!

Если вы хотите визуализировать функции, Manim — идеальный инструмент. Например, вот как вы можете построить график синуса:

from manim import *

class PlotSin(Scene):
def construct(self):
axes = Axes(
x_range=[-PI, PI, PI/4],
y_range=[-1.5, 1.5, 0.5],
axis_config={"color": WHITE}
)
sin_graph = axes.plot(
lambda x: np.sin(x),
color=YELLOW,
stroke_width=4
)
self.play(Create(axes), Create(sin_graph))
self.wait(1)


Этот код создает координатные оси и рисует на них график функции синуса. Вы можете менять функцию в lambda x: np.sin(x) на любую другую — например, np.cos(x) или сложные уравнения.

---

### Особенности Manim, которые вдохновляют

Manim — это не только инструмент для создания красивых визуализаций, но и мощное средство обучения, которое учит вас мыслить структурно. Оно идеально укладывается в мировосприятие программистов, ведь каждое действие здесь — это код.
👍1
Что делает Manim уникальным:
- Гибкость. Все строится программно, нет неудобных графических интерфейсов.
- Четкость. Ваши визуализации будут выглядеть профессионально прямо "из коробки".
- Сообщество. Существует множество примеров, документации и готовых анимаций от других пользователей.

---

### Подводя итог

Manim отлично подходит не только для образовательных роликов, но и для творческого выражения. Если вы мечтали изучать математику или программирование через визуализацию, этот инструмент станет вашим лучшим другом. Возьмите пару примеров, поиграйте с параметрами, и через несколько часов вы сможете создавать свои первые серьезные работы. Только оштрафуйте себя за банальные квадратные примеры. 😉