CodeShadow – Telegram
CodeShadow
76 subscribers
180 photos
11 videos
7 files
126 links
👋 Я Артемий — преподаватель Python и фрилансер.

💻 Показываю, как код и нейросети помогают зарабатывать и упрощать работу.

🚀 Делюсь проектами, опытом и лайфхаками из реальной практики.

✍🏻 Вопросы и идеи: @MifmanRu
Download Telegram
💎 Как я использовал библиотеку rich, чтобы вдохнуть жизнь в консольную RPG

Если ты делаешь консольный проект, ты наверняка сталкивался с тем, что он выглядит… скучно.
Текст выводится сухо, всё статично, атмосферы — ноль.

Когда я делал свою мини-RPG, хотелось добавить хоть немного "магии": 💃
чтобы битва ощущалась, а не просто печаталась как список чисел.

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


👩‍💻 Что делает rich?

В моём проекте она отвечает за два эффекта:

1. Анимация боя — прогресс-бар, который создаёт ощущение хода битвы
2. Анимация удаления павших героев — небольшая «чистка поля», тоже через прогресс-бар


👨‍💻 По сути, это маленькие визуальные вставки, но они делают проект живым.
И самое главное — rich позволяет делать это буквально в несколько строк.

Вот пример: 😊
from rich.progress import Progress

def start_animation():
with Progress() as battle:
task = battle.add_task("[red]Идёт битва...", total=5)
while not battle.finished:
battle.update(task, advance=0.3)


Это всё. 🗿
И уже есть красивая анимация!

──────────────────

⚙️ Как это работает в проекте?

В файле animation_battle.py два ключевых метода:

☀️start_animation() — проигрывается во время атаки
☀️clear_death() — проигрывается, когда герой погибает и удаляется из списка

Эти анимации запускаются прямо посреди игрового цикла, и благодаря им:
☀️появляется ощущение «происходящего действия»
☀️игрок видит прогресс битвы
☀️консоль перестаёт быть скучной

Rich — это как спецэффекты в кино: сюжет тот же, но ощущения другие.


😎 Почему тебе стоит попробовать rich?

Если ты работаешь с консолью и хочешь сделать интерфейс:
💻 красивым
💻 читаемым
💻 выразительным
💻 динамичным


…rich — идеальный вариант.

Это один из тех инструментов, которые дают много «вау-эффекта» при минимуме кода.
😱
Please open Telegram to view this post
VIEW IN TELEGRAM
442
🚀 Разбираем классы персонажей: маги, эльфы, гномы, орки и люди

Продолжаем наше погружение в ООП-битву ⚔️
В прошлом посте мы рассмотрели основу — базовый класс Hero.
Теперь самое интересное — классы персонажей, каждый со своим характером и механикой.


👍 Маг (Wizard)

Маг — самый «умный» герой. Он не просто атакует, он ещё кастует защиту, которая уменьшает входящий урон.

Уникальное в классе:

1️⃣Атака — обычная, без бонусов
2️⃣Защита — случайная: либо 0, либо число от -2 до 5
3️⃣Если защита отрицательная — урон только возрастает
4️⃣Метод speak говорит магическую реплику

Маг — сбалансированный герой: всегда бьёт одинаково, но защищается непредсказуемо.

🧝 Эльф (Elf)

Эльф — герой точности. Он может нанести критический урон, если ему «повезёт».

Уникальное:
1️⃣шанс получить бонус +1…+5 к атаке
2️⃣если бонус не выпал — обычный удар
3️⃣защита обычная (просто вычитает урон)
4️⃣реплики также тематические

Эльф — герой про «когда повезёт — больно».

🪓 Гном (Dwarf)

Гном — настоящий танк. Он может… получить дополнительный урон.
Да-да, у гнома пассивка работает против гнома.

Pas­sive ≠ buff
Passive = иногда усиливает входящий урон


Но иногда именно этот «каменный рандом» делает игру интересной.

😭 Человек (Human)

Человек — самый простой и честный герой. Но у него есть козырь: уклонение.

1️⃣шанс увернуться — 30%
2️⃣если увернулся — урон не проходит
3️⃣если нет — получает полный урон
4️⃣Атака у него стандартная.

😡 Орк (Orc)

Орк живёт ради ярости.
У него есть шанс получить +2…+10 к своей атаке.

Если ярость не прокнула — обычный удар.

Орк — герой про минимальную стабильность и максимальный риск.

💻 Что даёт такая структура?

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

Здесь:
☀️минимальный повтор кода
☀️читаемая структура
☀️гибкость: можно добавить новых рас и механик
☀️легко тестировать и расширять функционал

В скором будущем мы разберём как работает игровой цикл, система атак, выживание, удаление павших и подключение анимаций из файла animation_battle.py.


Продолжение очень скоро ⚔️🔥

ОСНОВНОЙ КОД ИГРЫ 👈

#КейсыPython #ООП #CodeShadow
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩43211
💬 Мотивация: цени прогресс, а не результат

Ты не обязан писать идеальный код с первого раза. Главное — каждый день понимать Python чуть лучше, чем вчера.
И если сегодня ты понял, как работает lambda — это уже шаг вперёд.
442
🚀Игровой цикл, анимация и логика битвы

Сегодня посмотрим, как герои атакуют, умирают, удаляются из игры и как всё это двигает основной игровой цикл.


💎 Игровой цикл

Главная функция — main_game().

Она делает 4 вещи:
1. спрашивает у пользователя, сколько будет героев
2. создаёт героев выбранных типов
3. запускает цикл боя
4. выводит победителя

После создания персонажей начинается:

🩸 «Великая битва»
Игровой цикл:

1. Все персонажи атакуют друг друга по очереди
2. Мы проверяем, кто ещё жив
3. Убитые удаляются
4. Если остался один — он победил

⚔️ Функция start_game

Здесь происходит сама битва:
1. герой выбирает цель
2. вызывает свой attack()
3. цель вызывает свой set_damage()

Благодаря полиморфизму:
маг защищается
гном может получить пассивку
человек иногда уклоняется
орк входит в ярость
эльф делает крит

То есть одна и та же строка кода работает по-разному в зависимости от типа героя.
Это и есть мощь ООП.

🎃 Удаление павших

После раунда вызывается:
clear_death()

Это анимация, созданная в файле animation_battle.py, при помощи библиотеки rich.
Она показывает прогресс-бар «чистки трупов» — это просто эстетика, но очень добавляет атмосферы.


После анимации:
if death.hp <= 0:
del list_heroes[index]


Герой исчезает из списка — он официально мёртв.

😃 Финал

Когда в списке остаётся 1 герой:

Победа за ... !


Вот и всё — мини-боевая система завершена. 🥃

👨‍💻 Что это даёт тебе как разработчику?

☀️понимание архитектуры в стиле «каждый объект — самостоятельный»
☀️работу с полиморфизмом
☀️обработку событий и случайностей
☀️построение игрового цикла
☀️работу с внешними файлами и анимациями
☀️практику структурирования большого кода


Это отличный учебный кейс, который можно расширять:

☀️добавить оружие
☀️инвентарь
☀️уровни
☀️прокачку умений
☀️магические эффекты
☀️логирование
☀️UI

👉БЛОК АНИМАЦИИ СМОТРИ ЗДЕСЬ

#КейсыPython #ООП #CodeShadow
Please open Telegram to view this post
VIEW IN TELEGRAM
543
This media is not supported in your browser
VIEW IN TELEGRAM
533
🐍 Python: от новичка до профи вместе с сообществом!

Привет-привет! 👋 Сегодня поговорим про удивительный мир Python — простого, мощного и невероятно популярного языка программирования. Ты уже слышал, что Python любят разработчики всего мира? 😉

Почему именно Python?
Легкий синтаксис — писать код приятно и удобно (даже котики понимают!)
Подходит для множества задач: веб-разработка, машинное обучение, автоматизация, наука о данных... В общем, всё-всё-всё!
Большое активное сообщество, которое поможет тебе разобраться даже в самых сложных вопросах ☺️



🌟 С чего начать изучение?
Онлайн-курсы и туториалы (например, Codecademy, Coursera)
📚 Книги («Автоматизация рутинных задач», «Изучаем Python»)
🎯 Практика, практика и еще раз практика!

🔥 Где найти помощь и поддержку?
💬 Форумы вроде StackOverflow и Reddit
🖥 Сообщества в соцсетях (Telegram-группы, чаты Discord)
🧑‍🤝‍🧑 Общение с единомышленниками на хакатонах и митапах



🗣 Какое будущее у Python?
Несмотря на конкуренцию с JavaScript, Go и Rust, Python уверенно держится среди лидеров. Его используют гиганты IT-индустрии типа Google, Netflix, Instagram и Яндекс. 🛠

Так что вперед, друзья! Не бойтесь экспериментировать, учиться новому и развиваться дальше! А мы будем рядом, чтобы поддержать вас на пути к успеху! 🚀

#python #it #программирование #обучение #сообщество
👏622
Часто у начинающих специалистов возникает вопрос: «Вот я отучусь на программиста, и что тогда?»
или «Как мне сразу применить свои знания и монетизировать их?».

Сегодня разберем все по полочкам вместе с преподавателем нашей школы Артемием!
Если эти вопросы вам хоть немного близки, то этот пост для вас! 🙌

Учёба, сессии, ЕГЭ, практикумы… всё вокруг твердит, что без этого никуда. Говорят, что у человека нет перспектив, если он не сможет отучиться...
Ларри Пейдж и Сергей Брин (основатели Google) создавали своё дело ещё учась в университете. Марк Цукерберг, основатель Facebook, разработал социальную сеть, будучи студентом, в своей комнате в общежитии, а потом бросил Гарвардский университет.

Эти примеры показывают, что образование приносит пользу только тогда, когда начинаешь видеть в нём смысл.

Вовсе необязательно быть Марком или Ларри, чтобы стать успешным.

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


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

Из популярных бирж в России и СНГ – Kwork, YouDo, даже Авито. Вам достаточно зарегистрироваться, заполнить профиль и разместить свои услуги.

На биржах можно искать заказы, которые публикуют покупатели. Да, конкуренция есть, но со временем вы сможете собрать отзывы и приобрести важный опыт.

👇Пишите в комментариях, если хотите получить практикум по составлению качественного профиля на бирже!
442
🔥 Приветствуем всех любителей программирования! 💻

В нашем канале «CodeShadow | Кодим вместе» ты найдешь:

Полезный код и готовые решения для твоих проектов
Обучение Python от начинающих до профи
🎯 Буткемпы интересных проектов, где прокачаешь скиллы
😄 Веселые истории и интересные факты про IT

👉 Подписывайся — стань частью нашего дружного сообщества программистов!

#codeshadow #python #программирование #it #разработка
👀32
Начинаем: создаём простейшего Telegram-бота, который умеет отправлять сообщения

🔠🔠🔠🔠 🔠🔠 🔠🔠🔠

Привет! 👋
Сегодня покажу мини-кейс из трёх частей: мы соберём самый простой автопостер для Telegram, а в конце добавим нейросеть GigaChat, чтобы бот сам генерировал посты.


Начнём максимально просто — создадим бота, который может отправить сообщение в твой канал.

Что понадобится:
— токен бота (через BotFather)
— Python
— библиотека aiogram


Вот базовый шаблон:
from aiogram import Bot, Dispatcher
import asyncio

TOKEN = "Твой_токен_бота"

bot = Bot(token=TOKEN)
dp = Dispatcher()

CHANNEL_ID = "@название_канала"


async def simple_post():
await bot.send_message(CHANNEL_ID, "Бот работает! 🚀")


async def main():
await simple_post()


if __name__ == "__main__":
asyncio.run(main())


Запускаешь — и бот сам публикует сообщение.
Это основа будущего автопостера. 🥃

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


Продолжение скоро 🔥
Please open Telegram to view this post
VIEW IN TELEGRAM
55
This media is not supported in your browser
VIEW IN TELEGRAM
443
Делаем автопостер: очередь постов + файл с контентом

🔠🔠🔠🔠 🔠🔠 🔠🔠🔠

Теперь превращаем нашего бота в простой автопостер.

👨‍💻 Идея такая:
1. У нас есть файл posts.txt
2. Посты разделены строкой *****
3. Бот по очереди публикует каждый пост
4. Между публикациями — пауза


Создаём файл:
Первый пост
*****
Второй пост
*****
Третий пост


Теперь код:
import asyncio
from aiogram import Bot, Dispatcher

TOKEN = "Твой_токен"
bot = Bot(token=TOKEN)
dp = Dispatcher()

CHANNEL_ID = "@твой_канал"
POST_INTERVAL = 60 # интервал между постами


def load_posts():
with open("posts.txt", "r", encoding="utf-8") as f:
content = f.read()
return [p.strip() for p in content.split("*****") if p.strip()]


async def auto_post():
posts = load_posts()

for post in posts:
await bot.send_message(CHANNEL_ID, post)
await asyncio.sleep(POST_INTERVAL)


async def main():
await auto_post()


if __name__ == "__main__":
asyncio.run(main())


Теперь бот сам по очереди отправляет сообщения из файла.

В следующем посте подключим GigaChat — бот будет генерировать новые посты, если файл закончился
Please open Telegram to view this post
VIEW IN TELEGRAM
442
🏕 Полезный сниппет Python 👨‍💻

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

Сегодня покажу простой пример функции, проверяющий наличие дубликатов в списке:

python
def has_duplicates(lst):
"""
Проверяет список на наличие дублирующихся элементов.

Параметры:
lst (list): Список для проверки.

Возвращает:
bool: True, если дубликаты найдены, False иначе.
"""
return len(lst) != len(set(lst))


Как работает этот код?
Мы передаем функцию has_duplicates любой список (lst), который хотим проверить.
Затем функция преобразует список в set (тип данных множества), который автоматически удаляет все дублирующие значения.
Если длина исходного списка отличается от длины полученного множества, значит, дубликаты были обнаружены.

Пример использования:

python
my_list = [1, 2, 3, 4, 5]
print(has_duplicates(my_list)) # Выведет False

my_list_with_dups = [1, 2, 3, 4, 4]
print(has_duplicates(my_list_with_dups)) # Выведет True


Этот простой подход помогает сэкономить время при проверке списков на дублирование!

Используй такие полезные мелочи в своих проектах!
Please open Telegram to view this post
VIEW IN TELEGRAM
2👏1
Подключаем GigaChat: бот сам придумывает посты, если очередь пустая

🔠🔠🔠🔠 🔠🔠 🔠🔠🔠

Теперь самое интересное:
научим автопостер генерировать новые посты через GigaChat, если в файле посты закончились.



Используем библиотеку:
from gigachat import GigaChat


Настройка GigaChat: 👨‍💻
from gigachat import GigaChat

giga = GigaChat(
credentials="Твой_API_ключ",
verify_ssl_certs=False,
model="GigaChat-2-Max"
)

def gen_post():
prompt = "Создай интересный и полезный пост про Python. Пиши легко и человечно."
response = giga.chat(prompt)
return response.choices[0].message.content.strip()


Интеграция в автопостер:
async def auto_post():
posts = load_posts()

while True:
if posts:
post = posts.pop(0)
else:
post = gen_post() # Генерация нового поста нейросетью

await bot.send_message(CHANNEL_ID, post)
await asyncio.sleep(POST_INTERVAL)


Что теперь умеет бот:

✔️ публикует посты из файла
✔️ если файл пуст — сам пишет статью
✔️ работает в бесконечном цикле
✔️ полностью автономен


Это минимальный, но рабочий кейс автопостера с нейросетью. 🤩
Please open Telegram to view this post
VIEW IN TELEGRAM
633
💻 Мини-урок по ООП в Python.


#CodeShadow #Python #ООП
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
532
🐍 Python: зачем нужен такой мощный инструмент? 🔥

Привет! Если ты думаешь, стоит ли изучать Python — давай разберёмся вместе!

Почему именно этот язык программирования?
Простота синтаксиса (даже новичок быстро освоится)
Широкая область применения (от веб-разработки до машинного обучения)
Огромное количество библиотек и фреймворков (например, Django, Flask, TensorFlow, PyTorch)
Активное и дружелюбное сообщество разработчиков ✌️

👉 Что делать после изучения основ?
1. Начни практиковаться уже сегодня! Например, создай простой сайт на Flask ⚡️
2. Изучай библиотеки и инструменты Python для решения конкретных задач (графики, базы данных, автоматизация процессов)
3. Общайся с единомышленниками на форумах и тематических каналах 📬

💻 Чем полезен Python в реальной жизни?
Автоматизируй рутинную работу 🖥️
Создавай приложения и сервисы любой сложности 👨‍💻
Работай над проектами, связанными с искусственным интеллектом и big data 🤖

🗣 Сообщество Python в России активно развивается! Вступи в чат, где делятся опытом и знаниями 🎯

#python #программирование #разработка #it #новичкам #опыт #советы
311
💎 Выбираем тему нового простого, но полезного кейса для фрилансеров!


1️⃣ Автоматическое обновление портфолио из папки проектов
Скрипт, который собирает ваши проекты (файлы, папки, описания), формирует структурированный README или HTML-страницу, которую можно показать клиентам.

2️⃣ Трекер времени для фрилансера
Мини-приложение на Python: запускаешь задачу — время идёт, остановил — результат записывается в CSV или Google Sheets.
Полезно, когда считаешь почасовые задачи.

3️⃣ Генератор коммерческих предложений (КП) из шаблона
Ты заполняешь короткую форму (название проекта, цена, дедлайн) → скрипт автоматически собирает красиво оформленный текст/файл, который можно сразу отправлять клиенту.
Это КП, но автоматизированное — чтобы не писать одно и то же вручную.

Хочу разобрать что-то максимально прикладное — чтобы вы смогли сделать это за вечер и сразу использовать в работе.

Какой кейс разобрать следующим ⤵️
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉32