PythonTalk
4.85K subscribers
1.52K photos
49 videos
6 files
1.34K links
Привет, меня зовут Олег Булыгин 👋

🐍 Здесь я делюсь полезной информацией для тех, кто пишет код на Python: от разработки до Data Science.

По вопросам: @obulygin91
Download Telegram
🐍 from exercise import "Самый богатый"

Представьте, что у вас есть "таблица" accounts, где: accounts[i][j] — это сумма, которую некий j-й клиент имеет на счете в i-м банке.

Ваша задача — найти самый "богатого" клиента, то есть "столбец" с максимальной суммой всех счетов.

🎯 Задача:
Напишите функцию find_richest(accounts: list[list[int]]) -> int, которая принимает таблицу accounts и возвращает максимальную сумму по столбцам.

Пример:
accounts = [[1, 2, 5], [3, 6, 1]]

Разберем этот случай:
* Сумма accounts[0][0] + accounts[1][0] = 1 + 3 = 4.
* Сумма accounts[0][1] + accounts[1][1] = 2 + 6 = 8.
* Сумма accounts[0][2] + accounts[1][2] = 5 + 1 = 6.

Самый богатый клиент имеет состояние 8.
➡️ Ваша функция для [[1,2,5],[3,6,1]] должна вернуть 8.

Еще пример:
accounts = [[10, 5, 100], [20, 15, 0]]
* Портфель 0: 10 + 20 = 30
* Портфель 1: 5 + 15 = 20
* Портфель 2: 100 + 0 = 100
Результат: 100

#задача | 🍩 Поддержать канал 🫶
👍41🔥1
Сравниваем три gamedev-библиотеки на Python 🎮

Часто, когда речь заходит про разработку игр на Python, на ум приходит одно название — PyGame. Это, конечно, нестареющая классика, которой уже больше 20 лет, но мир не стоит на месте.

Вот вам небольшая подборка-сравнение трёх популярных библиотек: старого-доброго PyGame, портированного с C++ монстра Cocos2d и относительно свежего Ursina Engine.
🔥5🙏21
НОВАЯ ОТКРЫТАЯ SOTA LLM ДЛЯ ПРОГРАММИРОВАНИЯ 🤖

Недавно появился новый персонаж среди LLM для написания кода — Kimi-Dev-72B от Moonshot AI.

Что в неё интересного:
▫️Это новая SOTA (state-of-the-art) среди open-source моделей на бенчмарке SWE-bench Verified (60.4%). Подвинули всех старичков.
▫️Главная фишка — обучение. Модель получала награду, только если проходили все тесты в её Docker-окружении.
▫️Работает в два этапа: сначала находит нужные файлы для правки (File Localization), а потом уже редактирует код (Code Editing).
▫️Сделана на базе Qwen 2.5-72B, обучена на гигатоннах кода с GitHub. Лицензия — MIT, можно брать и ковырять.

Потыкать можно тут:
👉🏻 GitHub
👉🏻 Hugging Face
👉🏻 Демка-чат
👍42🙏1
✍️ Решения вчерашней задачи

Я провафлил, поэтому по факту позавчерашней 😬

🏆 Лучшее решение по Big O

def find_richest(accounts: list[list[int]]) -> int:
if not accounts or not accounts[0]:
return 0

num_clients = len(accounts[0])
max_wealth = 0

for client_index in range(num_clients):
current_client_wealth = 0
for bank_account in accounts:
current_client_wealth += bank_account[client_index]

if current_client_wealth > max_wealth:
max_wealth = current_client_wealth

return max_wealth


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

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

1. Проходим по клиентам: Внешний цикл for client_index in range(num_clients) итерируется по каждому "столбцу" (каждому клиенту).
2. Считаем накопления: Внутренний цикл for bank_account in accounts проходит по всем банкам (строкам) и суммирует деньги на счетах только текущего клиента.
3. Ищем максимум: После подсчета суммы для очередного клиента, мы сравниваем ее с уже найденным максимумом max_wealth и обновляем его, если нужно.

Сложность по времени: O(N * M), где N - количество банков (строк), M - количество клиентов (столбцов). Нам нужно проверить каждую ячейку.
Сложность по памяти: O(1). Мы используем всего несколько переменных для хранения промежуточных сумм и итогового максимума, не создавая новых больших структур данных.


🐍 Самое "питоничное" решение

Это как раз предложенный вариант, он самый красивый и идиоматичным для данной задачи.

def find_richest(accounts: list[list[int]]) -> int:
return max(map(sum, zip(*accounts)))


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

Разберем эту строку по частям, изнутри наружу:

1. *accounts — Оператор * "распаковывает" внешний список. Если accounts = [[1, 2], [3, 4]], то для функции zip это будет выглядеть как zip([1, 2], [3, 4]).

2. zip(*accounts) — Функция zip принимает несколько итерируемых объектов и "склеивает" их элементы с одинаковыми индексами. В нашем случае она "транспонирует" матрицу: из [[1, 2, 5], [3, 6, 1]] она создает итератор, который последовательно вернет кортежи-столбцы: (1, 3), затем (2, 6), и наконец (5, 1).

3. map(sum, ...) — Функция map применяет функцию sum к каждому элементу, который ей отдает zip. То есть, она вычисляет sum((1, 3)), sum((2, 6)) и sum((5, 1)), получая поток сумм: 4, 8, 6.

4. max(...) — Наконец, max просто находит наибольшее значение в этом потоке сумм. Результат — 8.

Сложность по времени: O(N * M). Хотя код и короткий, он всё так же проходит по каждому элементу для вычисления сумм.
Сложность по памяти: O(M). zip и map создают ленивые итераторы и не хранят всю транспонированную матрицу в памяти. Однако для работы zip требуется передать в функцию все строки как отдельные аргументы, что временно занимает память, пропорциональную количеству строк (N). В каждой итерации в памяти создается кортеж размером N (количество банков).

💡 Вариант с Numpy

Тоже отличный 👍🏻
import numpy as np
np.array(accounts).sum(axis=0).max()
👍9🔥2🙏1
This media is not supported in your browser
VIEW IN TELEGRAM
Консольный помощник "The Fuck"🤬

Опечатались в консольной команде? Написали git comit вместо git commit или puthon вместо python? Есть гениальная Python-утилита, которая позволяет просто написать fuck после ошибочной команды, и она предложит исправленный вариант!

Например:
➜ puthon run_my_super_script.py
No command 'puthon' found...
➜ fuck
python run_my_super_script.py [enter/↑/↓/ctrl+c]

Или:
➜ apt-get install vim
E: Could not open lock file... are you root?
➜ fuck
sudo apt-get install vim [enter/↑/↓/ctrl+c]


▫️ Как это работает? У The Fuck куча правил для распознавания типовых ошибок (опечатки, забытый sudo, неправильные флаги git и т.д.).
▫️ Установка: Проще простого – pip3 install thefuck --user (или через brew / apt / pacman для вашей системы) и не забудьте добавить eval $(thefuck --alias) в ваш .bashrc или .zshrc. Можно даже eval $(thefuck --alias FUCK), чтобы ругаться ГРОМКО.

И есть "мгновенный режим" без подтверждений перед изменениями (fuck --yeah).
🔥12👍4😁2
Возвращаем значение из lambda-функции 🙃

#квиз | 🍩 Поддержать канал 🫶
🙏2🔥1
Что получим при запуске кода?
Anonymous Quiz
25%
SyntaxError
7%
None
15%
<function <lambda> at …>
53%
42
👍9🔥2🙏2
This media is not supported in your browser
VIEW IN TELEGRAM
⚡️ Google снова уронили на нас ИИ-помощника. Прямо в терминал.

Знакомьтесь, Gemini CLI — бесплатный и, судя по всему, довольно мощный AI-агент, который живёт прямо в командной строке.

Что тут интересного:
1️⃣ Это бесплатно. Доступно 1000 запросов в день (и 60 в минуту). Ни OpenAI, ни Claude такой щедрости не показывают.
2️⃣ Под капотом Gemini. То есть в код умеет, можно сказать, лучше всех, а контекст — 1 млн токенов. Влезет почти любой ваш проектик.
3️⃣ Умеет в файлы и поиск. Может проанализировать код в директории, сгенерить приложение по PDF или наброску, да и просто в Google сходить за свежей инфой.
4️⃣ Интеграция с внешними тулами. Через MCP-серверы можно прикрутить генерацию картинок (Imagen), видео (Veo) и вообще что угодно.

Конечно, как и всё модное в этом мире, написано на Node.js 🌚. Так что для запуска сначала убедитесь, что он у вас стоит.

Запускается одной командой:
npx https://github.com/google-gemini/gemini-cli


Все! Помощник запустится и попросит вас войти в ваш Google-аккаунт. Пробуем 🐸
👍18🙏1
Всё, ребята, допрограммировались 😔

Тут сервис знакомств Mamba подвёз исследование с такими результатами: IT-специалисты больше не самые завидные женихи в России. Хайп прошёл, пора возвращаться в реальный мир.

Сухие цифры:
▫️ В 2023 году 72% россиянок хотели замуж за айтишника.
▫️ Сегодня таких осталось всего 27%.
▫️ 45% женщин уже не верят в стереотип об «идеальном муже-программисте».
▫️ Аргумент против: «доход хороший, но слишком уж привязан к своему компьютеру».

А кто теперь в топе? Врачи (43%) и стоматологи (38%). Потому что «ответственность» и «золотые руки»🤘🏻

А по одобрению родителей айтишники оказались где-то между спасателями и музыкантами, почти на дне. Лишь 3% девушек уверены, что мама будет гордиться зятем, «который работает с компьютерами».

Во врачи через курсы уже не попасть 🌝
😁22🔥3😢32🌚111
Google обновили модель, которая влезет даже в ваш смартфон 📱

Gemma 3n — компактная мультимодальная модель, созданная для работы прямо на устройствах.

Версия E4B стала первой моделью в категории "до 10 млрд параметров", которая набрала больше 1300 на LMArena. Неплохо для малютки.

Что в ней интересного👇🏻

▫️Работает на вашем железе. Модели требуют всего 2-3 ГБ памяти. Это значит — никаких облаков, API-ключей и платных подписок. Можно пилить фичи, которые будут работать оффлайн и не будут сливать код пользователя на сторонние сервера. Приватность, все дела.

▫️Гибкая архитектура "Матрёшка" (MatFormer). Из одной большой модели (E4B) можно достать модель поменьше (E2B), которая будет работать в 2 раза быстрее. Или даже нарезать кастомный размер под свои нужды.

▫️Улучшения в программировании и логике. Заявляют, что прокачали модель в математике, рассуждениях и в написании кода.

▫️Готовые интеграции. Модель уже поддерживается в Hugging Face Transformers, llama.cpp, Ollama, MLX и куче других инструментов.

Я уже вижу, как это можно вкрутить в IDE для локального автокомплита или в какой-нибудь мобильный клиент для анализа скриншотов с кодом 😏

Где пощупать:
👉🏻 Модели на Hugging Face
👉🏻 Поиграться в Google AI Studio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7321🔥1🙏1
Есть такие тестовые, которые дочитать до конца – уже подвиг 🌚 А сделают его только самые упоротные 👇🏻

💳В Авито предлагали реализовать микросервис для работы с балансом пользователей (зачисление средств, списание средств, перевод средств от пользователя к пользователю, а также метод получения баланса пользователя). Сервис должен предоставлять HTTP API и принимать/отдавать запросы/ответы в формате JSON.

✍🏻Сценарии использования
Далее описаны несколько упрощенных кейсов приближенных к реальности.
1️⃣ Сервис биллинга с помощью внешних мерчантов (аля через visa/mastercard) обработал зачисление денег на наш счет. Теперь биллингу нужно добавить эти деньги на баланс пользователя.
2️⃣ Пользователь хочет купить у нас какую-то услугу. Для этого у нас есть специальный сервис управления услугами, который перед применением услуги проверяет баланс и потом списывает необходимую сумму.
3️⃣ В ближайшем будущем планируется дать пользователям возможность перечислять деньги друг-другу внутри нашей платформы. Мы решили заранее предусмотреть такую возможность и заложить ее в архитектуру нашего сервиса.

Требования к коду
🔸Фреймворки и библиотеки можно использовать любые
🔸Реляционная СУБД: MySQL или PostgreSQL
🔸Весь код должен быть выложен на Github с Readme файлом с инструкцией по запуску и примерами запросов/ответов (можно просто описать в Readme методы, можно через Postman, можно в Readme curl запросы скопировать, вы поняли идею...)
🔸Если есть потребность, можно подключить кеши (Redis) и/или очереди (RabbitMQ, Kafka)
🔸При возникновении вопросов по ТЗ оставляем принятие решения за кандидатом (в таком случае Readme файле к проекту должен быть указан список вопросов с которыми кандидат столкнулся и каким образом он их решил)
🔸Разработка интерфейса в браузере НЕ ТРЕБУЕТСЯ.
🔸Взаимодействие с API предполагается посредством запросов из кода другого сервиса. Для тестирования можно использовать любой удобный инструмент. Например: в терминале через curl или Postman.

Будет плюсом
▫️Использование docker и docker-compose для поднятия и развертывания dev-среды.
▫️Методы АПИ возвращают человеко-читабельные описания ошибок и соответствующие статус коды при их возникновении.
▫️Написаны unit/интеграционные тесты.

✔️Основное задание (минимум)
🔹Метод начисления средств на баланс. Принимает id пользователя и сколько средств зачислить.
🔹Метод списания средств с баланса. Принимает id пользователя и сколько средств списать.
🔹Метод перевода средств от пользователя к пользователю. Принимает id пользователя с которого нужно списать средства, id пользователя которому должны зачислить средства, а также сумму.
🔹Метод получения текущего баланса пользователя. Принимает id пользователя. Баланс всегда в рублях.

Думаете это всё? Продолжение ниже 👇🏻

#тестовое | 🍩 Поддержать канал 🫶
532😱1🙈11
☝🏻Детали по основному заданию
Методы начисления и списания можно объединить в один, если это позволяет общая архитектура.
По умолчанию сервис не содержит в себе никаких данных о балансах (пустая табличка в БД). Данные о балансе появляются при первом зачислении денег.
Валидацию данных и обработку ошибок оставляем на усмотрение кандидата.
Список полей к методам не фиксированный.
Перечислен лишь необходимый минимум. В рамках выполнения доп. заданий возможны дополнительные поля.
Механизм миграции не нужен. Достаточно предоставить конечный SQL файл с созданием всех необходимых таблиц в БД.
Баланс пользователя - очень важные данные в которых недопустимы ошибки (фактически мы работаем тут с реальными деньгами). Необходимо всегда держать баланс в актуальном состоянии и не допускать ситуаций когда баланс может уйти в минус.
Валюта баланса по умолчанию всегда рубли.

🏅Дополнительные задания
Они не являются обязательными, но их выполнение даст существенный плюс перед другими кандидатами.

Доп. задание 1
Эффективные менеджеры захотели добавить в наши приложения товары и услуги в различных от рубля валютах. Необходима возможность вывода баланса пользователя в отличной от рубля валюте.
Задача: добавить к методу получения баланса доп. параметр. Пример: ?currency=USD. Если этот параметр присутствует, то мы должны конвертировать баланс пользователя с рубля на указанную валюту. Данные по текущему курсу валют можно взять отсюда https://exchangeratesapi.io/ или из любого другого открытого источника.
Примечание: напоминаем, что базовая валюта которая хранится на балансе у нас всегда рубль. В рамках этой задачи конвертация всегда происходит с базовой валюты.

Доп. задание 2
Пользователи жалуются, что не понимают за что были списаны (или зачислены) средства.
Задача: необходимо предоставить метод получения списка транзакций с комментариями откуда и зачем были начислены/списаны средства с баланса. Необходимо предусмотреть пагинацию и сортировку по сумме и дате.

Дочитали? 😏

#тестовое |⚡️ Забустить канал 🚀
93🔥1😱1🙊11
ХВАТИТ ТУПИТЬ В JOINАХ: БЕСПЛАТНЫЕ SQL-ТРЕНАЖЁРЫ

SQL — это тот самый навык, про который многие думают «да я его знаю», а на первом же собесе на GROUP BY с HAVING начинают плавать. И неважно, бэкендер ты, аналитик или начинающий дата-сайентист — это очень нужно всем.

Актуализировал для вас подборочку, где можно и нужно набивать руку 👇🏻

На русском 🇷🇺
▫️SQL Academy — Интерактивный учебник с кучей задач. Есть песочница, чтобы ковыряться с кодом без последствий.
▫️SQL-EX — Настоящий олдскул, где ещё деды учились (и я в том числе). Задач — вагон, до сих пор актуально. Можно даже платную сертификацию пройти, если вам такое надо.
▫️Тренажёр на Stepik — Классический тренажёр на Stepik. Сложность растёт постепенно, от табличек в вакууме до баз данных условного «Интернет-магазина».

Изучаем базу (на английском 🇬🇧)
▫️SQLBolt — Всего 20 интерактивных уроков. Для тех, кому надо быстро въехать в основы, не читая талмуды.
▫️PGExercises — Чисто под PostgreSQL. Для тех, кто работает с Постгресом и не хочет распыляться.
▫️SQL Practice — Практика на базе данных больницы. Лечим пациентов SQL-запросами.

Готовимся к собесам (🇬🇧) ⚔️
▫️Leetcode — Ну это база для подготовки к собесам. Можно подсмотреть чужие решения 🌚
▫️HackerRank — Похож на Leetcode, но со своей атмосферой. Тоже задачи, рейтинги и возможность получить бесполезную, но приятную ачивку-сертификат.
▫️DataLemur — Задачи прямиком с собесов в Microsoft, Tesla и прочих галер. Есть даже игра в Кальмара 🦑

Игровые тренажёры 🕵️‍♂️
▫️SQL Murder Mystery — Расследуем убийство, отправляя SQL-запросы к базе с уликами. Классная разминка.
▫️SQL Noir — То же самое, но в стиле нуар. Для ценителей.
▫️Lost at SQL — Спасаем команду с тонущей подлодки с помощью SQL. Есть сюжетка и таблица лидеров.

В общем, инструментов валом. Если до сих пор не умеете в SQL, то это не потому, что нет возможности, а потому что вы ленивая жопа 🌝

А где вы учились/практиковались? Кидайте в комменты свои находки, если чего-то в списке не хватает.
❤‍🔥105🔥41🙏11
Ждём от Маска что-то хорошее для программирования 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔4👀21👍1🔥1👨‍💻1🆒11