fa
Feedback
PytStart | Программирование на Python

PytStart | Программирование на Python

رفتن به کانال در Telegram

Python: примеры кода, уроки, статьи Купить рекламу: https://telega.in/c/pytstart ✍️По всем вопросам: @Pascal4eg Менеджер по рекламе: @shmyzna

نمایش بیشتر
4 400
مشترکین
-124 ساعت
-207 روز
-1430 روز

در حال بارگیری داده...

کانال‌های مشابه
هیچ داده‌ای
مشکلی وجود دارد؟ لطفاً صفحه را تازه کنید یا با مدیر پشتیبانی ما تماس بگیرید.
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
ژوئن '26
ژوئن '26
+54
در 0 کانال‌ها
مه '26
+110
در 10 کانال‌ها
Get PRO
آوریل '26
+24
در 0 کانال‌ها
Get PRO
مارس '26
+58
در 8 کانال‌ها
Get PRO
فوریه '26
+30
در 3 کانال‌ها
Get PRO
ژانویه '26
+20
در 0 کانال‌ها
Get PRO
دسامبر '25
+79
در 25 کانال‌ها
Get PRO
نوامبر '25
+102
در 11 کانال‌ها
Get PRO
اکتبر '25
+17
در 0 کانال‌ها
Get PRO
سپتامبر '25
+24
در 6 کانال‌ها
Get PRO
اوت '25
+351
در 30 کانال‌ها
Get PRO
ژوئیه '25
+286
در 21 کانال‌ها
Get PRO
ژوئن '25
+304
در 31 کانال‌ها
Get PRO
مه '25
+383
در 32 کانال‌ها
Get PRO
آوریل '25
+496
در 34 کانال‌ها
Get PRO
مارس '25
+845
در 49 کانال‌ها
Get PRO
فوریه '25
+3 212
در 123 کانال‌ها
تاریخ
رشد مشترکین
اشارات
کانال‌ها
12 ژوئن0
11 ژوئن0
10 ژوئن0
09 ژوئن0
08 ژوئن+1
07 ژوئن0
06 ژوئن0
05 ژوئن+5
04 ژوئن+3
03 ژوئن+10
02 ژوئن+34
01 ژوئن+1
پست‌های کانال
🔁 Как работает yield и зачем он реально нужен в Python yield — это не return. Он не завершает функцию, а паузит её и отдаёт результат по частям. ✅ Простой пример: отдаём по одному

def gen():
    yield 1
    yield 2
    yield 3

for x in gen():
    print(x)
👉 Вывод: 1, 2, 3 — не сразу, а по одному. Функция работает до первого `yield`, потом «засыпает» и продолжает дальше. 🧾 Чтение большого файла без нагрузки

def read_lines(path):
    with open(path) as f:
        for line in f:
            yield line.strip()

for line in read_lines("huge.log"):
    print(line)
Если файл весит 10 ГБ — всё равно работает. Никаких readlines(), которые жрут память. 🔢 Бесконечный счётчик

def counter():
    n = 0
    while True:
        yield n
        n += 1

for i in counter():
    if i > 5:
        break
    print(i)
👉 Без yield тут не обойтись. Можно генерировать бесконечный поток, но обрабатывать его как обычный список. 📤 Свой генератор фильтра

def even_only(numbers):
    for n in numbers:
        if n % 2 == 0:
            yield n

nums = [1, 2, 3, 4, 5, 6]
for x in even_only(nums):
    print(x)
👉 Не filter(), а свой контролируемый фильтр. Гибко и понятно. 🗣️ Запомни:yield — это когда ты генерируешь данные на лету. Ты не ждёшь весь список, не держишь всё в памяти — просто отдаёшь, когда нужно. Нужен потоковый режим? yield — лучший друг.

2
👩‍💻 `pip` — не просто "установить пакет" Каждый Python-разработчик использует pip, но далеко не все понимают, насколько критична дисциплина в управлении зависимостями. Ошибки здесь = боль на проде, в CI и при сборке. 🔍 1. Никогда не устанавливай пакеты глобально pip install some-library # ❌ ➡️ Это засоряет системный Python, может конфликтовать с другими проектами и ломает dev-среду. ✔️ Всегда используй виртуальное окружение: python -m venv venv source venv/bin/activate pip install some-library ➡️ Чистота, изоляция, контроль. 🔐 2. Зафиксируй зависимости Если ты не фиксируешь версии — ты играешь в лотерею. pip install requests Через месяц выйдет новая мажорная версия — и твой код может отвалиться. ✔️ Делай так: pip install requests==2.31.0 ⛏ А ещё лучше: pip freeze > requirements.txt ➡️ И ты всегда знаешь, что работает. И на проде, и у коллег. 📦 3. Используй `--upgrade-strategy eager` с умом pip install -U some-lib # по умолчанию может подтянуть несовместимости ➡️ Это может внезапно обновить половину стека. Используй --upgrade-strategy only-if-needed, если хочешь избегать каскадных обновлений. 🛠 4. Обновление pip — не каприз Иногда pip старый, и ты получаешь ошибки вроде "metadata generation failed". ✔️ Просто: pip install -U pip ➡️ Новые версии pip реально решают кучу проблем с установкой. ⚙️ 5. Хочешь порядок? Используй `pip-tools` pip install pip-tools Работает как pip freeze, но человечно: # requirements.in requests==2.31.0 flask>=2.0 pip-compile requirements.in # генерирует requirements.txt с зависимостями ➡️ Ты контролируешь high-level зависимости, pip-tools следит за всем остальным. 🗣️ Запомни: pip — это твой фундамент. Если ты не управляешь зависимостями осознанно, ты рано или поздно огребаешь. Особенно в команде.
562
3
📱 Генерируем QR‑коды в Python: просто, гибко, наглядно Иногда нужно быстро создать QR‑код: для ссылки, текста, визитки или даже Wi‑Fi‑пароля. Python справляется с этим буквально за пару строк. Давай разберём, как это делается и что внутри происходит. pip install qrcode[pil] ➡️ Устанавливаем библиотеку qrcode. В скобках [pil] — сразу тянет Pillow для работы с изображениями. import qrcode img = qrcode.make("https://example.com") img.save("qrcode.png") ➡️ Базовый случай: генерация QR‑кода для любой строки. Метод make сразу создаёт изображение, которое можно сохранить или отдать пользователю. Обычно хочется чуть больше контроля: размер, плотность, уровень защиты от ошибок, цвета. Для этого создаём QR‑код «вручную»: qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) qr.add_data("Hello, QR!") qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") img.save("custom_qr.png") ➡️ Здесь мы задаём: 🟢 version — размер сетки (1 — минимальный); 🟢 error_correction — сколько данных можно потерять и всё ещё прочитать код; 🟢 box_size и border — масштаб и рамку. А если хочется добавить логотип или иконку — тоже просто: Создаём QR‑код с высоким уровнем коррекции ошибок и «вклеиваем» логотип по центру: from PIL import Image logo = Image.open("logo.png") qr = qrcode.QRCode(error_correction=qrcode.constants.ERROR_CORRECT_H) qr.add_data("https://mysite.com") qr.make(fit=True) qr_img = qr.make_image(fill_color="black", back_color="white").convert("RGB") pos = ( (qr_img.size[0] - logo.size[0]) // 2, (qr_img.size[1] - logo.size[1]) // 2, ) qr_img.paste(logo, pos) qr_img.save("qr_with_logo.png") ➡️ Логотип уменьшай так, чтобы не закрывал слишком много ячеек. Высокий уровень коррекции (ERROR_CORRECT_H) позволяет восстанавливать данные даже при частичном перекрытии. 🗣️ Запомни: QR‑код — это обычное изображение, а Python — отличная среда, чтобы сгенерировать их сотнями или добавить фирменный стиль прямо в коде. Просто текст → картинка → готово.
680
4
Собрали подборку IT-каналов для тех, кто интересуется тестированием, разработкой, автотестами и карьерой в IT. Внутри: QA и A
Собрали подборку IT-каналов для тех, кто интересуется тестированием, разработкой, автотестами и карьерой в IT. Внутри: QA и AQA - практика, собеседования, рабочие заметки и разборы Java и Python - задачи, тесты, полезные фишки и материалы для разработчиков SQL и аналитика данных - запросы, работа с данными и прикладные разборы Программирование и IT-карьера - каналы для тех, кто развивается в профессии и хочет лучше понимать рынок Можно подписаться на всю подборку сразу или выбрать только те каналы, которые подходят под ваши цели. Забрать папку
343
5
🖥 Что делает enumerate() в Python? 3️⃣ enumerate() добавляет счётчик к итерации. fruits = ["🍎", "🍌", "🍇"] for i, fruit in enumerate(fruits): print(i, fruit) 📌 Вывод: 0 🍎 1 🍌 2 🍇 🗣 Используется, когда нужен индекс при переборе: списки, строки, циклы в UI и CLI.
761
6
🐍 Как распаковать список прямо в аргументы функции В Python можно передать список как отдельные аргументы с помощью * 👇 def add(a, b, c): print(a + b + c) nums = [1, 2, 3] add(*nums) 👉 Результат: 6 💡 Что происходит: add(*nums) Python превращает это в: add(1, 2, 3) 📌 Работает и с кортежами: coords = (10, 20) print(*coords) 🔥 Очень полезно при: — работе с функциями — динамических данных — распаковке API-ответов 🚀 *args и распаковка - одна из самых удобных фишек Python #python #фишки
974
7
🖥 Чем список отличается от кортежа? Списки – это изменяемые последовательности, обычно используемые для хранения однотипных данных (хотя Python не запрещает хранить в них данные разных типов). Представлены классом list. Кортежи – это неизменяемые последовательности, обычно используемые, чтобы хранить разнотипные данные. Представлены классом tuple. На уровне языка отличаются тем, что в кортеж нельзя добавить или убрать элемент. На уровне интерпретатора различий нет. Обе коллекции представлены массивом указателей на структуру PyObject. Существуют специальные функции для работы со списками. Они вызываются методами списка. Ниже приведены наиболее часто используемые: # Создаем исходный список lst = [1, 2, 3] # append(x): добавляет элемент в конец списка lst.append(4) # Теперь lst = [1, 2, 3, 4] # extend(iterable): расширяет список, добавляя элементы из итерируемого объекта lst.extend([5, 6]) # Теперь lst = [1, 2, 3, 4, 5, 6] # insert(i, x): вставляет элемент x на позицию i lst.insert(0, 'start') # Теперь lst = ['start', 1, 2, 3, 4, 5, 6] # remove(x): удаляет первое вхождение элемента x lst.remove(3) # Теперь lst = ['start', 1, 2, 4, 5, 6] # pop([i]): удаляет и возвращает элемент на позиции i (по умолчанию последний) last = lst.pop() # last = 6, а lst = ['start', 1, 2, 4, 5] # sort(): сортирует список на месте lst = [3, 1, 4, 1, 5, 9, 2] lst.sort() # Теперь lst = [1, 1, 2, 3, 4, 5, 9] # reverse(): разворачивает список на месте lst.reverse() # Теперь lst = [9, 5, 4, 3, 2, 1, 1]
830
8
Учусь рисованию с нуля Привет! Хочу пригласить в мой блог с рисунками. Мне 33, я учусь рисовать с нуля и очень хочу заниматьс+4
Учусь рисованию с нуля Привет! Хочу пригласить в мой блог с рисунками. Мне 33, я учусь рисовать с нуля и очень хочу заниматься этим профессионально. Присоединяйся, мне нужна твоя поддержка❤️ Узнать больше #реклама 16+ О рекламодателе
0
9
👟 pip + venv: ставим библиотеки изолированно — и это работает venv делает песочницу для проекта. pip ставит пакеты внутрь неё. Активировал окружение — и весь мир пакетов идёт в твою папку, а не в систему. 📦 Шаг 1 — создай окружение в корне проекта # Windows py -m venv .venv # macOS / Linux python3 -m venv .venv ➡️ Появится папка .venv — там свой Python и свой pip. 🔑 Шаг 2 — активируй окружение # PowerShell .\.venv\Scripts\Activate.ps1 # cmd .\.venv\Scripts\activate.bat # macOS / Linux source .venv/bin/activate ➡️ Подсказка терминала сменится на (.venv) — ты внутри. ⚙️ Шаг 3 — обнови pip (сначала всегда так) python -m pip install --upgrade pip ➡️Берёшь свежую версию установщика, меньше странных ошибок. 📥 Шаг 4 — ставь библиотеки pip install requests pip install "uvicorn[standard]" fastapi ➡️ Всё уезжает в .venv. Глобальная система не трогается. 🔎 Шаг 5 — смотри, что внутри pip list pip show requests ➡️ Видишь только пакеты твоего окружения, не всей машины. 🧾 Шаг 6 — фиксируй зависимости pip freeze > requirements.txt ➡️ Снимок версий. Его же можно отдать коллегам или CI. 🚚 Шаг 7 — восстановление на другой машине # в новом клоне проекта python -m venv .venv # активируй (как в Шаге 2) pip install -r requirements.txt ➡️ Получишь те же версии пакетов, что и у автора. 🧪 Проверка — пакет реально в venv python -c "import requests, sys; print(sys.prefix)" ➡️ Должен увидеть путь к твоему .venv. Значит всё изолировано. 🧹 Шаг 8 — удаление/выход pip uninstall requests deactivate ➡️ deactivate возвращает тебя в глобальную среду. 🛠 Быстрые фишки (когда что-то идёт не так) # pip "не находится" — запускай через интерпретатор python -m pip --version # несколько Python — выбери конкретный # Windows: py -3.11 -m venv .venv # macOS / Linux: python3.11 -m venv .venv # PowerShell ругается на Activate.ps1: Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass ➡️ Унификация через python -m pip и явный выбор версии решают 90% проблем. 🗂 Бонус — не коммить venv echo .venv/ >> .gitignore ➡️ Окружение — локальное. В репо нужен только requirements.txt. 🗣️ Запомни: venv — граница проекта, pip — грузовик с пакетами.
742
10
👨👨👨👨👨👨👨👨👨👨 Каналы с Junior IT вакансиями и стажировками Подписывайся и забирай свой оффер 🤘 1. Стажировки и ваканс
👨👨👨👨👨👨👨👨👨👨 Каналы с Junior IT вакансиями и стажировками Подписывайся и забирай свой оффер 🤘 1. Стажировки и вакансии по России и миру 2. IT вакансии по СНГ 3. IT стажировки по СНГ 4. ИИ-ассистент для автооткликов 5. IT стажировки и волонтерства 6. IT стажировки в топовых компаниях мира 7. Удалённые IT вакансии и стажировки 8. Python вакансии и стажировки 9. БИГТЕХ вакансии и стажировки 10. Design вакансии и стажировки 11. QA вакансии и стажировки 12. Junior вакансии и стажировки 13. Frontend вакансии и вопросы собесов 14. Вакансии и стажировки для аналитиков 15. Вакансии в русских стартапах за границей 16. Вакансии и стажировки для DevOps 17. Вакансии, которых нет на ХХ.РУ
0
11
🐍 Как сделать простой Telegram-бот на Python Минимальный бот — буквально в несколько строк 👇 from telegram import Update from telegram.ext import ApplicationBuilder, MessageHandler, filters, ContextTypes async def echo(update: Update, context: ContextTypes.DEFAULT_TYPE): await update.message.reply_text(update.message.text) app = ApplicationBuilder().token("TOKEN").build() app.add_handler(MessageHandler(filters.TEXT, echo)) app.run_polling() 📌 Установка: pip install python-telegram-bot 💡 Что делает бот: — получает сообщение — отправляет его обратно 🔥 Дальше можно добавить: — команды — кнопки — базы данных — AI / API 🚀 Отличный старт для своих Telegram-проектов #python #telegram #bot
655
12
👨👨👨👨👨👨👨👨👨👨 Каналы с IT мероприятиями Подписывайся, чтобы не пропустить 🤘 1. IT мероприятия для стажеров и студенто
👨👨👨👨👨👨👨👨👨👨 Каналы с IT мероприятиями Подписывайся, чтобы не пропустить 🤘 1. IT мероприятия для стажеров и студентов 2. IT мероприятия по РФ 3. IT мероприятия и хакатоны 4. Бесплатные IT мероприятия 5. IT мероприятия онлайн 6. IT мероприятия Москва 7. IT мероприятия Санкт-Петербург
0
13
🧙‍♂️Секреты f-строк: выражения, форматирование и даже вызов функций внутри f-строки Ты думал, f-строки — это просто f"Hello {name}"? А что если я скажу, что туда можно засовывать функции, арифметику и даже условия? Вот мощный разбор, как выжать максимум из f-строк в Python 👇 🟢 1. Арифметика прямо в строке a, b = 10, 3 print(f"Сумма: {a + b}, Разность: {a - b}") 🟢 Внутри фигурных скобок можно писать полноценные выражения. ➡️ Да хоть f"Результат: {(a * b) ** 2}" — это законно. 🟢2. Функции внутри f-строки def shout(name): return name.upper() + "!" print(f"Привет, {shout('Алиса')}") 🟢 Вызов функций? Да. Лямбды? Тоже можно. Даже f"{sorted([3,1,2])}" работает. 🟢3. Условия и тернарные выражения age = 20 print(f"{'Совершеннолетний' if age >= 18 else 'Несовершеннолетний'} пользователь") 🟢 Отлично работает с любыми if ... else внутри {}. 🟢4. Форматирование чисел по-человечески value = 12345.6789 print(f"{value:.2f}") # 12345.68 print(f"{value:,.2f}") # 12,345.68 ➡️ :.2f — два знака после запятой ➡️ :, — добавляет разделитель тысяч 🟢5. Форматирование по ширине и выравниванию name = "Alice" print(f"{name:>10}") # справа print(f"{name:<10}") # слева print(f"{name:^10}") # по центру 🟢 Работает с числами и строками. Полезно в логах и таблицах. 🟢 6. Форматирование как hex, bin, oct num = 42 print(f"{num:b}") # 101010 print(f"{num:x}") # 2a 👍 b — двоичная 👍 x — шестнадцатеричная 👍 o — восьмеричная 🟢 7. Вложенные f-строки и шаблоны user = {"name": "Eva", "points": 120} print(f"{user['name']} набрала {f'{user['points'] * 2}'} очков") 🟢 Иногда полезно, но лучше избегать слишком сложной вложенности. 💡 Запомни ✅f-строки — это не просто вставка переменных ✅Используй форматирование, условия, вызовы функций ✅Удобно для логов, отчётов, динамического UI, и шаблонов CLI 🗣️ Хочешь пост про format() против f-строк, или как делать шаблоны с f-строками? Предложи тему — сделаем!
716
14
🔴 Реальный собес на Python от ТехЛида с опытом работы в Авито и Яндексе в прямом эфире 19 мая(уже завтра!) в 19:00 по мск пр
🔴 Реальный собес на Python от ТехЛида с опытом работы в Авито и Яндексе в прямом эфире 19 мая(уже завтра!) в 19:00 по мск приходи на прямой эфир с реальным собеседованием на Middle разработчика. Почему точно нужно прийти: 📂 Савва Демиденко, ТехЛид с опытом в Яндексе и Авито, будет задавать реальные вопросы и задачи разработчику-добровольцу 📂 Савва будет комментировать каждый ответ респондента, чтобы дать понять чего от вас ожидает собеседующий на интервью 📂 В конце можно будет задать любой вопрос Савве Это бесплатно. Эфир проходит в рамках менторской программы от ШОРТКАТ для Python-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы. 🔍 Переходи в нашего бота, чтобы получить ссылку на эфир → @shortcut_py_bot Реклама. О рекламодателе.
0
15
🐍 Как сделать бесконечный счётчик без переменных В Python есть модуль itertools с кучей мощных инструментов 👇 from itertools import count for i in count(1): print(i) 👉 Вывод: 1 2 3 ... 💡 count(1) создаёт бесконечный генератор чисел начиная с 1 📌 Можно указать шаг: from itertools import count for i in count(0, 5): print(i) 👉 Результат: 0 5 10 15 ... 🔥 Полезно для: — генерации ID — бесконечных циклов — работы с потоками данных ⚠️ Осторожно: цикл реально бесконечный 😄 #python #itertools
951
16
🐍 Лямбда-выражения: маленькие функции с большим потенциалом lambda — это способ создать анонимную функцию прямо в момент использования. Когда нужна простая операция «на лету», писать полноценный def бывает избыточно. Синтаксис: lambda аргументы: выражение Пример: square = lambda x: x ** 2 print(square(5)) # 25 То же самое через def: def square(x): return x ** 2 📌 Где lambda особенно полезны? 1️⃣ Сортировка users = [ {"name": "Anna", "age": 25}, {"name": "Bob", "age": 20}, ] users.sort(key=lambda user: user["age"]) print(users) 2️⃣ Работа с map() numbers = [1, 2, 3, 4] squared = list(map(lambda x: x ** 2, numbers)) print(squared) 3️⃣ Фильтрация через filter() numbers = [1, 2, 3, 4, 5, 6] evens = list(filter(lambda x: x % 2 == 0, numbers)) print(evens) ⚠️ Важно помнить: * lambda подходит только для ОДНОГО выражения * сложную логику лучше выносить в обычные функции * читаемость кода важнее «красоты» Плохой пример: lambda x: x ** 2 if x > 0 else 0 if x == 0 else -1 Иногда обычный def намного понятнее 👌 💡 Правило: Если lambda читается за пару секунд - отлично. Если нужно всматриваться - пишем обычную функцию. #python #backend #programming #coding
922
17
⚠️ Внимание: Опубликована слитая недавно База из 1000+ топовых курсов и материалов для айтишников Отсортировали их для вашего
⚠️ Внимание: Опубликована слитая недавно База из 1000+ топовых курсов и материалов для айтишников Отсортировали их для вашего удобства и выложили в телеграм-каналы по категориям: 🤖 Нейросети – 855+ материалов 🖥 Python — 1558+ материалов 👩‍💻 Frontend — 1241+ материалов 👩‍💻 Backend — 1095+ материалов ⚙️ Программы — 978+ материалов 📚 Книги по IT — 779+ материалов ⌛️ Ссылки будут активны 48 часов, сохрани себе, чтобы не потерять!
0
18
🐍 Как сделать собственный контекстный менеджер (with) Ты наверняка использовал такое 👇 with open("file.txt") as f: data = f.read() Но можно создавать и свои with 👀 from contextlib import contextmanager @contextmanager def timer(): import time start = time.time() yield print(time.time() - start) Использование: with timer(): sum(range(10_000_000)) 💡 Что происходит: 🔹 код до yield выполняется при входе 🔹 код после yield при выходе 🔥 Где полезно: 🔹 таймеры 🔹 подключение к БД 🔹 временные файлы 🔹 управление ресурсами #python #advanced
851
19
🐍 Как читать JSON и сразу превращать в объекты Часто работаешь с JSON? Можно сразу превращать его в удобные объекты 👇 import json from types import SimpleNamespace data = '{"name": "Alex", "age": 25}' obj = json.loads(data, object_hook=lambda d: SimpleNamespace(**d)) print(obj.name) # Alex 💡 Теперь вместо data["name"] можно писать obj.name 📌 Если JSON вложенный - это тоже работает: data = '{"user": {"name": "Alex"}}' obj = json.loads(data, object_hook=lambda d: SimpleNamespace(**d)) print(obj.user.name) 🔥 Удобно для: — работы с API — прототипирования — чистого кода без [] ⚠️ Но будь осторожен: — нет автодополнения как у dataclass — меньше контроля над структурой 🚀 Быстро и красиво #python #json
918
20
Изучаете программирование, или хотите стать классным айтишником с высокой ЗП? Пока многие паникуют из-за бума ИИ, вы можете с
Изучаете программирование, или хотите стать классным айтишником с высокой ЗП? Пока многие паникуют из-за бума ИИ, вы можете стремительно войти в сферу IT при помощи сборки "IT в деле" которую мы составили. Специально для вас разбили нашу сборку мини папки по конкретным тематикам:) Что внутри сборки: - Каналы о программировании и разработке: Python, CSS, HTML, Java и Swift - GameDev и каналы о QA тестироварии, создание игр, помощь для ваших проектов и реальный опыт от тестировщиков 💍 - Авторские каналы и вайбкодинг: IT & AI, простые заметки с проектов, работа с нейросетями, и как они реально влияют на индустрию 🔤 - Информационная безопасность: многое узнаете о работе хакеров и о том, как защитить себя в этом интернет-хаосе. 🔫 Для каждого здесь что-то найдётся! Выберите интересные вам каналы или подпишитесь на всю сборку, и найдите то, что нужно вам для следующего шага в IT.
0