Сайт ozon.ru защищён от обычного парсинга — там используется динамическая загрузка контента через JavaScript, и, к тому же, у них настроена защита от ботов (Cloudflare). Поэтому простой
🔧 Способ 1: Selenium (рекомендован для обхода JS и защиты)
Вот пример, как с помощью
### Установи зависимости:
### Код:
## 🧪 Способ 2: API через перехват трафика (сложнее, но стабильнее)
Можно открыть DevTools (F12 → вкладка Network → XHR) на Ozon, найти запрос к API типа:
и использовать
Но такой подход требует детальной настройки (передачи токенов, cookies, UA), и Ozon часто меняет структуру.
✅ Вывод
Если хочешь протестировать прямо сейчас — используй Selenium.
Если нужно собрать много данных — лучше использовать обход с API, но он сложнее.
⚠️ Код приведен для демонстрации подхода, промышленный парсер может быть сложнее ⚠️
Подпишись 👉🏻 @KodduuPython 🤖
requests или BeautifulSoup работать не будет. Но есть два способа:🔧 Способ 1: Selenium (рекомендован для обхода JS и защиты)
Вот пример, как с помощью
selenium получить цену товаров с Ozon:### Установи зависимости:
pip install selenium webdriver-manager
### Код:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
import time
def init_driver():
options = Options()
options.add_argument('--headless') # не отображать окно
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
options.add_argument('--disable-blink-features=AutomationControlled') # анти-бот
options.add_argument('user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)...')
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
return driver
def parse_ozon_prices(search_query="ноутбук"):
driver = init_driver()
try:
query = search_query.replace(" ", "+")
url = f"https://www.ozon.ru/search/?text={query}"
driver.get(url)
time.sleep(5) # подождать загрузку JS
products = driver.find_elements(By.CSS_SELECTOR, 'div[data-widget="searchResultsV2"] div[data-widget="searchResultsV2"]')
if not products:
print("Товары не найдены.")
return
cards = driver.find_elements(By.CSS_SELECTOR, 'div[data-widget="searchResultsV2"] div.b0e6a')
for card in cards[:10]: # первые 10 товаров
try:
name = card.find_element(By.CSS_SELECTOR, 'span.tsBody500').text
price = card.find_element(By.CSS_SELECTOR, 'span[style*="font-weight: 700"]').text
print(f"{name} — {price}")
except Exception as e:
continue
finally:
driver.quit()
if __name__ == "__main__":
parse_ozon_prices("смартфон")
## 🧪 Способ 2: API через перехват трафика (сложнее, но стабильнее)
Можно открыть DevTools (F12 → вкладка Network → XHR) на Ozon, найти запрос к API типа:
https://www.ozon.ru/api/composer-api.bx/page/json/v2?url=/search/?text=...
и использовать
requests с нужными headers и cookies.Но такой подход требует детальной настройки (передачи токенов, cookies, UA), и Ozon часто меняет структуру.
✅ Вывод
Если хочешь протестировать прямо сейчас — используй Selenium.
Если нужно собрать много данных — лучше использовать обход с API, но он сложнее.
⚠️ Код приведен для демонстрации подхода, промышленный парсер может быть сложнее ⚠️
Подпишись 👉🏻 @KodduuPython 🤖
OZON.ru
OZON маркетплейс – миллионы товаров по выгодным ценам
Миллионы товаров, быстрая доставка, бонусы, скидки и акции, рассрочка и кешбэк. Покупайте электронику и бытовую технику, детские товары и детское питание, игры, игрушки, канцтовары, книги, одежду и обувь, товары для дома и сада, продукты питания, лекарства…
👍4
Хочешь быстро освоить Python и сделать первые шаги в Data Science? Простой и понятный курс, с практикой и поддержкой.
Начни учиться учится сегодня 👉👉👉 Junior Python Data Scientist на Stepik 🔥🔥🔥
Подпишись 👉🏻 @KodduuPython 🤖
Начни учиться учится сегодня 👉👉👉 Junior Python Data Scientist на Stepik 🔥🔥🔥
Подпишись 👉🏻 @KodduuPython 🤖
Вышла статья на habr 👉 Сделать App одним промтом 👍 где мы пробуем сделать целый App одним промтом (вайб кодинг) 🤪
Подпишись 👉🏻 @KodduuPython 🤖
Подпишись 👉🏻 @KodduuPython 🤖
Хабр
Создать App одним промтом
Мы все уже слышали про сотни промтов , которые могут создать полноценный App, и что скоро разработчики будут не нужны. Но давайте попробуем сделать не то чтобы App, а просто интерактивную страничку....
❤3
Пример API-парсера для Ozon.ru, который симулирует запрос, аналогичный тому, что делает сайт при поиске товара. Мы будем:
1. Подставлять поисковый текст (`?text=...`)
2. Делать запрос к Ozon API (скрытый, но публичный)
3. Вытаскивать имена и цены товаров
---
⚙️ Установка зависимостей
---
🧩 Код API-парсера:
---
🔐 Примечания
- Запрос к
- Ozon сильно рандомизирует ID-шники в JSON. Поэтому мы ищем нужный ключ через префикс
- Можно обойтись без cookies — всё работает как обычный пользователь.
⚠️ Код приведен для демонстрации подхода, промышленный парсер может быть сложнее ⚠️
Подпишись 👉🏻 @KodduuPython 🤖
1. Подставлять поисковый текст (`?text=...`)
2. Делать запрос к Ozon API (скрытый, но публичный)
3. Вытаскивать имена и цены товаров
---
⚙️ Установка зависимостей
pip install requests
---
🧩 Код API-парсера:
import requests
import json
def get_ozon_products(search_query, page=1):
url = "https://www.ozon.ru/api/composer-api.bx/page/json/v2"
headers = {
"Content-Type": "application/json",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"Accept": "application/json",
}
payload = {
"url": f"/search/?text={search_query}&page={page}"
}
response = requests.post(url, headers=headers, json=payload)
if response.status_code != 200:
print(f"Ошибка запроса: {response.status_code}")
return []
try:
data = response.json()
items = []
widgets = data.get("widgetStates", {})
for k, v in widgets.items():
if k.startswith("searchResultsV2"):
items_json = json.loads(v).get("items", [])
for item in items_json:
title = item.get("cellTrackingInfo", {}).get("title", "")
price_raw = item.get("cellTrackingInfo", {}).get("price", {}).get("price", "")
price = f"{price_raw} ₽" if price_raw else "Цена не указана"
items.append((title, price))
break
return items
except Exception as e:
print("Ошибка при разборе JSON:", e)
return []
# Пример использования
if __name__ == "__main__":
products = get_ozon_products("ноутбук", page=1)
for name, price in products:
print(f"{name} — {price}")
---
🔐 Примечания
- Запрос к
https://www.ozon.ru/api/composer-api.bx/page/json/v2 работает без авторизации, но может сломаться, если Ozon поменяет API.- Ozon сильно рандомизирует ID-шники в JSON. Поэтому мы ищем нужный ключ через префикс
searchResultsV2.- Можно обойтись без cookies — всё работает как обычный пользователь.
⚠️ Код приведен для демонстрации подхода, промышленный парсер может быть сложнее ⚠️
Подпишись 👉🏻 @KodduuPython 🤖
👍3
Давай сделаем демо-защиту сайта от парсинга, как это делает Ozon, Wildberries, и др. Подходы можно условно разделить на несколько уровней:
🛡️ Пример демо-сайта с защитой от парсинга (на Flask)
📦 Установка:
🔐 Основные защиты:
1. Проверка
2. Проверка
3. Проверка на отсутствие JavaScript (через `JS challenge`)
4. Блокировка по IP при подозрительных действиях (anti-flood)
🧠 Код
🔍 Как работает защита:
| Защита | Объяснение |
|--------|------------|
| User-Agent | Отсекает
| JS cookie | Бот не выполнит JavaScript и не получит доступ |
| Flood-защита | Запросы чаще чем раз в 2 сек — блокируются |
| Referer check (не используется, но можно) | Можно блокировать прямой доступ без перехода с сайта |
⚔️ Как обойти эту защиту
Ты можешь протестировать защиту, написав парсер на
Чтобы обойти:
- использовать
- добавить cookie
- имитировать
Подпишись 👉🏻 @KodduuPython 🤖
🛡️ Пример демо-сайта с защитой от парсинга (на Flask)
📦 Установка:
pip install flask
🔐 Основные защиты:
1. Проверка
User-Agent (отсекаем ботов типа `python-requests`)2. Проверка
Referer3. Проверка на отсутствие JavaScript (через `JS challenge`)
4. Блокировка по IP при подозрительных действиях (anti-flood)
🧠 Код
server.py:
from flask import Flask, request, abort, render_template_string
import time
app = Flask(__name__)
# Простейший анти-flood: IP -> время последнего запроса
last_access = {}
HTML_PAGE = """
<!DOCTYPE html>
<html>
<head>
<title>Demo Page</title>
<script>
// JS Challenge: ставим куку
document.cookie = "js_enabled=1";
</script>
</head>
<body>
<h1>Добро пожаловать!</h1>
<p>Цены на товары: 199₽, 299₽, 399₽</p>
</body>
</html>
"""
@app.route('/')
def home():
ip = request.remote_addr
ua = request.headers.get('User-Agent', '')
referer = request.headers.get('Referer', '')
cookies = request.cookies
# 1. Блокируем подозрительные юзер-агенты
if 'python-requests' in ua.lower() or 'httpclient' in ua.lower():
abort(403, "Парсинг запрещен: подозрительный User-Agent")
# 2. Проверка на спам/флуд
now = time.time()
if ip in last_access and (now - last_access[ip] < 2):
abort(429, "Слишком много запросов. Подозрение на бота.")
last_access[ip] = now
# 3. Проверка на наличие JS (через куку)
if cookies.get('js_enabled') != '1':
return '''
<html>
<head><title>Подождите...</title>
<meta http-equiv="refresh" content="1">
<script>document.cookie = "js_enabled=1";</script>
</head>
<body>Проверка браузера...</body></html>
'''
return render_template_string(HTML_PAGE)
if __name__ == '__main__':
app.run(debug=True)
🔍 Как работает защита:
| Защита | Объяснение |
|--------|------------|
| User-Agent | Отсекает
requests, curl и пр. || JS cookie | Бот не выполнит JavaScript и не получит доступ |
| Flood-защита | Запросы чаще чем раз в 2 сек — блокируются |
| Referer check (не используется, но можно) | Можно блокировать прямой доступ без перехода с сайта |
⚔️ Как обойти эту защиту
Ты можешь протестировать защиту, написав парсер на
requests, и увидишь 403. Чтобы обойти:
- использовать
selenium или Playwright- добавить cookie
js_enabled=1- имитировать
User-Agent, Referer, DelayПодпишись 👉🏻 @KodduuPython 🤖
Пример промта для создания интернет-магазина с нуля. Этот промт можно использовать для генерации дизайна и функционала сайта.
---
Пример промта для создания интернет-магазина:
"Создать интернет-магазин с нуля для продажи различных товаров, таких как одежда, электроника и аксессуары. Дизайн должен быть современным, простым и интуитивно понятным, с фокусом на удобство пользователей. Необходимо включить следующие разделы и функциональность:
1. Главная страница:
- Привлекательный баннер с текущими скидками или акциями.
- Разделы для популярных товаров и новинок.
- Блок с отзывами покупателей.
- Меню с категориями товаров (Одежда, Электроника, Аксессуары и т.д.).
- Интерактивный поиск товаров по ключевым словам.
2. Каталог товаров:
- Фильтрация по категориям, брендам, цене и рейтингу.
- Возможность сортировки товаров по популярности, цене, новизне и скидке.
- Страница каждого товара с подробным описанием, изображениями, опциями (размер, цвет), кнопкой добавления в корзину.
3. Корзина покупок:
- Просмотр выбранных товаров, количества и общей суммы.
- Возможность редактировать количество или удалить товар.
- Опции для оформления заказа (доставка, оплата).
4. Оформление заказа:
- Ввод данных пользователя (имя, адрес, телефон).
- Выбор способа доставки и оплаты.
- Подтверждение заказа с деталями.
5. Аккаунт пользователя:
- Регистрация, вход и восстановление пароля.
- Личный кабинет с историей заказов, отслеживанием статуса.
- Возможность сохранения избранных товаров.
6. Интеграция с платежными системами:
- Подключение популярных способов оплаты (кредитные карты, PayPal, и т.д.).
7. Мобильная версия сайта:
- Оптимизация для мобильных устройств с адаптивным дизайном.
8. SEO-оптимизация:
- Основные страницы сайта должны быть оптимизированы для поисковых систем (заголовки, мета-теги, URL).
9. Безопасность:
- Внедрение HTTPS для защиты данных пользователей.
- Поддержка 2FA для входа в личный кабинет.
10. Дополнительно:
- Включить модуль для автоматической рассылки уведомлений о новых акциях и товарных поступлениях.
- Разработать систему отзывов и рейтингов для товаров.
- Внедрить чат с клиентской поддержкой.
Внешний вид должен быть минималистичным, с акцентом на яркие изображения товаров, четкие кнопки для навигации и легкий интерфейс для пользователей."
---
Этот промт покрывает ключевые функциональные и визуальные аспекты интернет-магазина. Конечно, если ты хочешь добавить дополнительные специфические элементы, их можно указать в промте.
Подпишись 👉🏻 @KodduuPython 🤖
---
Пример промта для создания интернет-магазина:
"Создать интернет-магазин с нуля для продажи различных товаров, таких как одежда, электроника и аксессуары. Дизайн должен быть современным, простым и интуитивно понятным, с фокусом на удобство пользователей. Необходимо включить следующие разделы и функциональность:
1. Главная страница:
- Привлекательный баннер с текущими скидками или акциями.
- Разделы для популярных товаров и новинок.
- Блок с отзывами покупателей.
- Меню с категориями товаров (Одежда, Электроника, Аксессуары и т.д.).
- Интерактивный поиск товаров по ключевым словам.
2. Каталог товаров:
- Фильтрация по категориям, брендам, цене и рейтингу.
- Возможность сортировки товаров по популярности, цене, новизне и скидке.
- Страница каждого товара с подробным описанием, изображениями, опциями (размер, цвет), кнопкой добавления в корзину.
3. Корзина покупок:
- Просмотр выбранных товаров, количества и общей суммы.
- Возможность редактировать количество или удалить товар.
- Опции для оформления заказа (доставка, оплата).
4. Оформление заказа:
- Ввод данных пользователя (имя, адрес, телефон).
- Выбор способа доставки и оплаты.
- Подтверждение заказа с деталями.
5. Аккаунт пользователя:
- Регистрация, вход и восстановление пароля.
- Личный кабинет с историей заказов, отслеживанием статуса.
- Возможность сохранения избранных товаров.
6. Интеграция с платежными системами:
- Подключение популярных способов оплаты (кредитные карты, PayPal, и т.д.).
7. Мобильная версия сайта:
- Оптимизация для мобильных устройств с адаптивным дизайном.
8. SEO-оптимизация:
- Основные страницы сайта должны быть оптимизированы для поисковых систем (заголовки, мета-теги, URL).
9. Безопасность:
- Внедрение HTTPS для защиты данных пользователей.
- Поддержка 2FA для входа в личный кабинет.
10. Дополнительно:
- Включить модуль для автоматической рассылки уведомлений о новых акциях и товарных поступлениях.
- Разработать систему отзывов и рейтингов для товаров.
- Внедрить чат с клиентской поддержкой.
Внешний вид должен быть минималистичным, с акцентом на яркие изображения товаров, четкие кнопки для навигации и легкий интерфейс для пользователей."
---
Этот промт покрывает ключевые функциональные и визуальные аспекты интернет-магазина. Конечно, если ты хочешь добавить дополнительные специфические элементы, их можно указать в промте.
Подпишись 👉🏻 @KodduuPython 🤖
❤4👍1
🐍 Как превратить текст в JSON за 5 строк кода
Хотите быстро извлекать структурированные данные (имя, email, интересы) из свободного текста? Например, когда пользователь пишет что-то вроде:
> *«Меня зовут Алекс, мой email — [email protected], интересуюсь ML и астрономией»*
Вот как это сделать с помощью LLM (например, OpenAI GPT) и Python:
Вывод:
Где пригодится?
- Чат-боты: парсим запросы пользователей.
- CRM: автоматически заполняем карточки клиентов.
- Формы: даже если человек ввёл данные в свободном формате, система их поймёт.
Подпишись 👉🏻 @KodduuPython 🤖
Хотите быстро извлекать структурированные данные (имя, email, интересы) из свободного текста? Например, когда пользователь пишет что-то вроде:
> *«Меня зовут Алекс, мой email — [email protected], интересуюсь ML и астрономией»*
Вот как это сделать с помощью LLM (например, OpenAI GPT) и Python:
import openai
import json
def extract_info(text: str) -> dict:
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "Извлеки имя, email и интересы из текста. Верни JSON."},
{"role": "user", "content": text}
]
)
return json.loads(response.choices[0].message.content)
# Пример использования
user_input = "Я Катя, пиши на [email protected], люблю Python и нейросети!"
print(extract_info(user_input))
Вывод:
{
"name": "Катя",
"email": "[email protected]",
"interests": ["Python", "нейросети"]
}
Где пригодится?
- Чат-боты: парсим запросы пользователей.
- CRM: автоматически заполняем карточки клиентов.
- Формы: даже если человек ввёл данные в свободном формате, система их поймёт.
Подпишись 👉🏻 @KodduuPython 🤖
👍3⚡1
Вышла новая статья "Как сделать RAG для своей компании" на HABR 👏
Больше данных по разработке нашей RAG и ИИ-агентам в канале @aigentto ⚡️
Больше данных по разработке нашей RAG и ИИ-агентам в канале @aigentto ⚡️
🐍 Python: Как работает `__slots__` и зачем он нужен
Когда вы создаёте класс в Python, по умолчанию каждый его экземпляр хранит атрибуты в словаре
📌 Что делает
- Ограничивает набор допустимых атрибутов.
- Убирает
- Ускоряет доступ к атрибутам.
📊 Сравнение:
⚠️ Важно:
-
- Нельзя добавлять новые атрибуты вне указанных в
Используйте
Подпишись 👉🏻 @KodduuPython 🤖
Когда вы создаёте класс в Python, по умолчанию каждый его экземпляр хранит атрибуты в словаре
__dict__. Это удобно, но не всегда эффективно по памяти. Если вы создаёте много однотипных объектов, можно оптимизировать их с помощью __slots__.
class Point:
__slots__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
📌 Что делает
__slots__?- Ограничивает набор допустимых атрибутов.
- Убирает
__dict__, экономя память.- Ускоряет доступ к атрибутам.
📊 Сравнение:
import sys
class Default:
def __init__(self):
self.a = 1
self.b = 2
class Slotted:
__slots__ = ('a', 'b')
def __init__(self):
self.a = 1
self.b = 2
print(sys.getsizeof(Default())) # Примерно 56 байт
print(sys.getsizeof(Slotted())) # Примерно 40 байт
⚠️ Важно:
-
__slots__ не наследуются автоматически.- Нельзя добавлять новые атрибуты вне указанных в
__slots__.Используйте
__slots__, когда нужно создать множество однотипных объектов и важно сэкономить память.Подпишись 👉🏻 @KodduuPython 🤖
👍1
Майские лучшее время начать курс с преподавателями Профессия Python-разработчик.
Реклама. Информация о рекламодателе по ссылкам в посте.
Реклама. Информация о рекламодателе по ссылкам в посте.
🐍 Магия дескрипторов в Python: кастомные валидаторы полей
Если ты когда-нибудь валидировал поля в классе, то, возможно, делал это вручную в
Создадим дескриптор, который будет валидировать возраст:
Теперь можно использовать его в классе:
✅ Работает:
🚫 Не работает:
📌 Что происходит:
-
- При установке значения вызывается
- Это даёт гибкий контроль: можно валидировать, логировать, кэшировать и т.д.
Подпишись 👉🏻 @KodduuPython 🤖
Если ты когда-нибудь валидировал поля в классе, то, возможно, делал это вручную в
__init__. Но Python даёт куда более мощный механизм — дескрипторы.Создадим дескриптор, который будет валидировать возраст:
class PositiveInteger:
def __init__(self, name):
self.name = name
def __get__(self, instance, owner):
return instance.__dict__[self.name]
def __set__(self, instance, value):
if not isinstance(value, int):
raise TypeError(f"{self.name} must be an integer")
if value < 0:
raise ValueError(f"{self.name} must be >= 0")
instance.__dict__[self.name] = value
Теперь можно использовать его в классе:
class User:
age = PositiveInteger("age")
def __init__(self, name, age):
self.name = name
self.age = age
✅ Работает:
u = User("Alice", 30)
print(u.age) # 30
🚫 Не работает:
u = User("Bob", -5) # ValueError
u = User("Charlie", "12") # TypeError
📌 Что происходит:
-
User.age — это не обычное поле, а объект-дескриптор.- При установке значения вызывается
__set__.- Это даёт гибкий контроль: можно валидировать, логировать, кэшировать и т.д.
Подпишись 👉🏻 @KodduuPython 🤖
👍2
Forwarded from AIGENTTO
Попробовал генерацию видео аватаров. С помощью Python библиотек SadTalker, Wav2Lip, и еще одной магической библиотеки.
Попробуйте определить где живой человек, а где генерация❔
Генерация на локальном MacBook M3, минут 20 занимает за 8 секунд видео. В облаке на GPU в сотни раз быстрее.
Очень увлекательно, но теперь думаю - а как это применить в бизнесе? С RAG, ИИ-агентами применение понятно, а тут? 🤔
Подпишись 👉🏻 @aigentto 🤖
Попробуйте определить где живой человек, а где генерация❔
Генерация на локальном MacBook M3, минут 20 занимает за 8 секунд видео. В облаке на GPU в сотни раз быстрее.
Очень увлекательно, но теперь думаю - а как это применить в бизнесе? С RAG, ИИ-агентами применение понятно, а тут? 🤔
Подпишись 👉🏻 @aigentto 🤖
Вот простой скрипт на Python, который удаляет скрытые/невидимые символы (включая неразрывные пробелы и прочие ватермарки в виде специальных символов Unicode) из текстов, сгенерированных ИИ:
### Что делает скрипт:
* Удаляет все основные невидимые символы (часто используемые как watermark).
* Можно расширить список
Для чего это нужно читайте здесь 👈👈👈
Подпишись 👉🏻 @aigentto 🤖
import re
import unicodedata
# Список подозрительных символов, часто используемых как "водяные знаки"
# Включает неразрывный пробел, zero width space, и другие невидимые символы
WATERMARK_CHARS = [
'\u00A0', # Неразрывный пробел (non-breaking space)
'\u200B', # Zero width space
'\u200C', # Zero width non-joiner
'\u200D', # Zero width joiner
'\u2060', # Word joiner
'\uFEFF', # Zero width no-break space (BOM)
]
def clean_ai_watermarks(text: str) -> str:
# Удаляем все подозрительные символы
for char in WATERMARK_CHARS:
text = text.replace(char, '')
# Дополнительно можно убрать все невидимые символы из категорий Cf, Cc
text = ''.join(
ch for ch in text if unicodedata.category(ch) not in ('Cf', 'Cc')
)
# Или можно воспользоваться регуляркой:
# text = re.sub(r'[\u200B\u200C\u200D\u2060\uFEFF\u00A0]', '', text)
return text
# Пример использования
if __name__ == "__main__":
original = "Это\u00A0пример\u200Bтекста\u2060с\uFEFFневидимыми\u200Dсимволами."
print("До очистки:")
print(repr(original))
cleaned = clean_ai_watermarks(original)
print("\nПосле очистки:")
print(repr(cleaned))
### Что делает скрипт:
* Удаляет все основные невидимые символы (часто используемые как watermark).
* Можно расширить список
WATERMARK_CHARS, если появятся новые подозрительные символы.Для чего это нужно читайте здесь 👈👈👈
Подпишись 👉🏻 @aigentto 🤖
Telegram
AIGENTTO
Если ваш ИИ-сгенерированный контент пессимизируется поисковиками, то проверьте его на ватермарки. ИИ-сгенерированный контент лучше чистить 🧹
Например, ИИ от OpenAI оставляет скрытые ловушки (ватермарки) в тексте - o4-mini и o3 прячут коды неразрывного пробела…
Например, ИИ от OpenAI оставляет скрытые ловушки (ватермарки) в тексте - o4-mini и o3 прячут коды неразрывного пробела…
🧠 Визуализация работы сортировки прямо в реальном времени!
Мини-скрипт на Python, который показывает, как пузырьковая сортировка двигает элементы.
📌 Этот код сортирует массив из случайных чисел пузырьком и в реальном времени показывает, как перемещаются элементы, используя «█» в консоли.
Без сторонних библиотек. Работает в любом терминале.
Подпишись 👉🏻 @KodduuPython 🤖
Мини-скрипт на Python, который показывает, как пузырьковая сортировка двигает элементы.
import random
import time
import os
def visualize(arr):
os.system('cls' if os.name == 'nt' else 'clear')
for num in arr:
print('█' * num)
time.sleep(0.05)
arr = [random.randint(1, 50) for _ in range(30)]
for i in range(len(arr)):
for j in range(len(arr) - i - 1):
if arr[j] > arr[j + 1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
visualize(arr)
📌 Этот код сортирует массив из случайных чисел пузырьком и в реальном времени показывает, как перемещаются элементы, используя «█» в консоли.
Без сторонних библиотек. Работает в любом терминале.
Подпишись 👉🏻 @KodduuPython 🤖
👍1