Код на салфетке

channel icon
Канал для тех, кому интересно программирование на Python и не только.

Чат канала: @pressanybutton_chat
Заметки автора: https://t.me/writeanynotes
Буст канала: https://t.me/boost/press_any_button

Условия размещения

Цена за 24 часа в ленте 600,00
Цена за 1 час закрепления 100,00
Взаимопиар ≥ 600 подписчиков

Казино, мошенничества, пирамиды, ставки и всё в этом духе.

0
837
подписчиков
-1
249
охват 1 публикации
0
~1
постов / день
-0,1%
29,8%
ERR % ?

Статистика

Последние публикации

Код на салфетке
10 декабря 2024 г. 17:03
Хотите узнать, как сочетать asyncio и aiohttp для асинхронного веб-скрапинга?

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

urls = [
    'https://example.com/',
    # ... список URLов
]

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    async with aiohttp.ClientSession() as session:
        tasks = []
        for url in urls:
            tasks.append(fetch(session, url))
        pages = await asyncio.gather(*tasks)
        for content in pages:
            process(content)

def process(content):
    # Логика разбора страницы
    pass

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

asyncio.gather запускает задачи параллельно
aiohttp.ClientSession переиспользует соединения для эффективности
async with обеспечивает корректное закрытие сессий и соединений
Код на салфетке
9 декабря 2024 г. 11:00
Привет, друзья!

Прошла еще одна неделя, и у нас накопилось много интересных материалов: статьи, новости и полезные советы. Вот наш недельный дайджест:

Понедельник (02.12.2024) Дайджест за предыдущую неделю

Вторник (03.12.2024) Хотите узнать, как использовать SElinux для повышения безопасности в Linux?

Четверг (05.12.2024) Сравнение улучшения кода в Python и C++ (часть 1)

Пятница (06.12.2024) Пятничный кинорелакс

Суббота (07.12.2024) Задача

Воскресенье (08.12.2024) Разбор задачи

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!

С уважением,
Команда канала "Код на салфетке".

#дайджест #материалы #новости #код_на_салфетке
Код на салфетке
8 декабря 2024 г. 18:20
Вчера мы задали задачу, похожую на Задачу №46, но с небольшим отличием. Задачу решило 5 человек из 15-ти проголосовавших. Давайте резберём правильный ответ.


Задача:
Вы пишете функцию, которая выполняет фильтрацию и модификацию словаря на основе вложенных условий. Чтобы упростить логику, вы решили использовать итерацию по ключам словаря и изменять его "на лету". Что получится в результате выполнения написанного кода?


Код задачи
def filter_dict(data: dict[int, int]) -> dict[int, int]:
for key in list(data.keys()):
if key % 2 == 0:
data[key + 1] = data.pop(key) * 2
return data

data = {1: 10, 2: 20, 3: 30, 4: 40}
result = filter_dict(data)
print(result)



Разбор кода:
1. Функция filter_dict принимает словарь data с ключами и значениями типа int.

2. Цикл for key in list(data.keys()) проходит по всем ключам словаря.

- Здесь используется list(data.keys()), чтобы создать список ключей, так как мы будем изменять сам словарь data в процессе итерации. Если бы мы проходили по data.keys() напрямую, это могло бы вызвать ошибки.
3. Внутри цикла для каждого ключа проверяется, делится ли он на 2 без остатка (key % 2 == 0). Это условие выделяет чётные ключи.

4. Если ключ чётный, выполняется модификация:

- Значение по этому ключу удваивается (data.pop(key) * 2) и присваивается новому ключу, который равен key + 1.
- Метод pop удаляет старый ключ из словаря и возвращает его значение.
5. По завершении цикла функция возвращает модифицированный словарь.

6. В основной части программы передаётся исходный словарь data, а результат работы функции выводится через print.


Правильный ответ: {1: 10, 3: 40, 5: 80}


Как это работает?
Разберём пошагово, что происходит с данным словарём {1: 10, 2: 20, 3: 30, 4: 40} при прохождении через функцию:

1. Итерация 1:
Ключ 1 (нечётный). Условие key % 2 == 0 не выполняется, пропускаем этот ключ.
2. Итерация 2:
Ключ 2 (чётный).

- Выполняется data.pop(2) → удаляем ключ 2, возвращаем его значение 20.
- Новый ключ 2 + 1 = 3. Присваиваем значение 20 * 2 = 40 новому ключу 3.
Теперь словарь выглядит так: {1: 10, 3: 40, 4: 40}.
3. Итерация 3:
Ключ 3 (нечётный). Условие key % 2 == 0 не выполняется, пропускаем.
4. Итерация 4:
Ключ 4 (чётный).

- Выполняется data.pop(4) → удаляем ключ 4, возвращаем его значение 40.
- Новый ключ 4 + 1 = 5. Присваиваем значение 40 * 2 = 80 новому ключу 5.
Теперь словарь выглядит так: {1: 10, 3: 40, 5: 80}.

Цикл завершён, функция возвращает финальный словарь {1: 10, 3: 40, 5: 80}.


Почему результат именно такой?
1. Итерация по списку ключей, а не по словарю:
Мы создаём копию ключей (list(data.keys())), чтобы изменения в словаре data не влияли на процесс итерации. Без этого подхода могли возникнуть ошибки или пропуск ключей.

2. Метод `pop` и добавление нового ключа:
Метод pop удаляет чётные ключи и их значения из словаря. Удвоенное значение присваивается новому ключу (key + 1). Это приводит к замене чётных ключей на нечётные с модифицированным значением.

3. Последовательность операций:
Изменения в словаре происходят строго по порядку, так как мы проходим по изначальному списку ключей. Это исключает влияние на порядок обработки данных.
Код на салфетке
7 декабря 2024 г. 11:52
Что выведет код с изображения? №47
Опрос
  • {1: 10, 3: 30, 5: 40, 7: 80}
  • {1: 10, 3: 30, 5: 40}
  • {1: 10, 3: 40, 5: 80}
  • {1: 10, 2: 20, 3: 30, 4: 40}
  • RuntimeError
Код на салфетке
7 декабря 2024 г. 11:51
Что выведет этот код? №47

Задача:
Вы пишете функцию, которая выполняет фильтрацию и модификацию словаря на основе вложенных условий. Чтобы упростить логику, вы решили использовать итерацию по ключам словаря и изменять его "на лету". Что получится в результате выполнения написанного кода?
Код на салфетке
6 декабря 2024 г. 18:00
Приветствую, друзья!

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

Фильм: Живое

Год: 2017

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

Устраивайтесь поудобнее. Всем приятного просмотра!
Код на салфетке
5 декабря 2024 г. 11:34
Сравнение улучшения кода в Python и C++ (часть 1)
Автор: Eugene Kaddo

Данная статья посвящена теме улучшения кода в языках Python и C++, а именно обработке ошибок, валидации, аннотациям типов, повышению отказоустойчивости и переиспользованию кода.


Читать постЧитать пост

Файлы к посту, можно получить в боте по коду: 108905

Поддержать проект на Boosty
Поддержать проект в Telegram

#exception #Cpp #Сравнение_Python_и_C_Cpp #annotation #validation
Код на салфетке
3 декабря 2024 г. 17:01
Хотите узнать, как использовать SElinux для повышения безопасности в Linux?

Security-Enhanced Linux (SELinux) предоставляет механизм принудительного контроля доступа (MAC), который ограничивает права процессов и пользователей.

Проверка статуса SElinux:
sestatus

Изменение режима работы:
sudo setenforce Permissive  # или Enforcing


Создание пользовательской политики:
1. Запустите приложение и соберите ошибки SElinux в /var/log/audit/audit.log
2. Создайте модуль политики:
sudo audit2allow -a -M mypolicy

3. Установите модуль:
sudo semodule -i mypolicy.pp


- audit2allow
автоматически генерирует правила на основе логов (генерируемые правила audit2allow могут быть слишком широкими, поэтому их важно анализировать перед применением)
- semodule управляет модулями политик

Важно помнить, что хоть SElinux и помогает предотвратить несанкционированный доступ и повышает общую безопасность системы, он требует правильной настройки и даже с ней – это не панацея.
Код на салфетке
2 декабря 2024 г. 11:01
Привет, друзья!

Прошла еще одна неделя, и у нас накопилось много интересных материалов: статьи, новости и полезные советы. Вот наш недельный дайджест:

Понедельник (25.112024) Дайджест за предыдущую неделю

Вторник (26.11.2024) Хотите разобраться в основах сетей Docker и как связывать контейнеры?

Среда (27.11.2024)

Четверг (28.11.2024) Бесплатный аналог ChatGPT на своём ПК

Пятница (29.11.2024) Пятничный кинорелакс

Суббота (30.11.2024) Задача

Воскресенье (01.12.2024) Разбор задачи

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!

С уважением,
Команда канала "Код на салфетке".

#дайджест #материалы #новости #код_на_салфетке
Код на салфетке
1 декабря 2024 г. 18:16
Вчера мы предложили вам довольно простую задачу, в котором за, казалось бы, сложными операциями, скрывается сама простая ошибка. Задачу решило из проголосовавших человек. Давайте резберём правильный ответ.

Задача:
Вы экспериментируете с оптимизацией обработки данных. В представленном коде для фильтрации списка чисел используется вложенная функция и модификация самого списка во время его обработки. Цель задачи — понять, как работает данный код, и выяснить, какой результат будет выведен на экран.

Код задачи:

def process_data(data: list[int]) -> list[int]:  
def modify_and_filter():
for i in range(len(data)):
if data[i] % 2 == 0:
data.pop(i)
yield i

indices = list(modify_and_filter())
return indices + data


data_lst = [1, 2, 3, 4, 5, 6]
result = process_data(data_lst)
print(result)



Разбор кода
Давайте разберём этот код построчно и посмотрим, что происходит.

Функция process_data
Это основная функция, принимающая список целых чисел data и возвращающая обработанный результат.

Вложенная функция modify_and_filter
Эта функция должна:

1. Проходить по индексам списка data.
2. Проверять, является ли элемент чётным.
3. Если элемент чётный:
- Удалять его из списка (data.pop(i)).
- Возвращать индекс удалённого элемента (с помощью yield).

Ключевой момент: modify_and_filter — это генератор, так как она использует yield. Вызов этой функции не выполняет её код сразу, а создаёт генераторный объект, выполнение которого начинается только при итерации.

Цикл for i in range(len(data))
Цикл проходит по индексам от 0 до len(data) - 1. Внутри цикла вызывается data[i] для проверки условия.

Проблема: Во время работы цикла список data модифицируется. Это влияет на длину списка и смещение элементов, что приводит к несогласованности индексов.

Удаление элемента data.pop(i)
Удаление элемента приводит к изменению длины списка и смещению индексов остальных элементов. Например, если удалить элемент с индексом 1, то элемент с индексом 2 станет на место элемента 1, а длина списка уменьшится.

Генератор возвращает индексы
Функция modify_and_filter возвращает индексы удалённых элементов в процессе итерации.

Возврат результата
Функция process_data создаёт список из всех возвращённых генератором индексов (indices) и объединяет его с текущим состоянием списка data.

Правильный ответ: IndexError

Почему возникает ошибка IndexError?
Рассмотрим, что происходит при выполнении программы:

1. data_lst = [1, 2, 3, 4, 5, 6].
2. Вызов process_data(data_lst) запускает modify_and_filter.
3. Внутри генератора:
- На первой итерации i = 0, проверяется data[0] (значение 1). Условие не выполнено, идёт следующая итерация.
- На второй итерации i = 1, проверяется data[1] (значение 2). Условие выполнено:
- Удаляется data[1] (pop(1)), список становится [1, 3, 4, 5, 6].
- Возвращается i = 1.
- Следующая итерация пытается проверить data[2], но из-за удаления индексы изменились: на месте data[2] сейчас стоит 4, а длина списка уменьшилась. Попытка доступа к несуществующему индексу приводит к IndexError.

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

1. Не модифицировать список внутри цикла, итерирующегося по нему.
2. Использовать копию списка или собирать данные для изменения в отдельную структуру.

Модификация списка — распространённая ошибка новичков, но с пониманием устройства циклов и индексов её легко избежать.
Код на салфетке
30 ноября 2024 г. 11:56
Что выведет код с изображения? №46
Опрос
  • [1, 3, 5]
  • [0, 2, 4, 1, 3, 5]
  • [1, 3, 5, 0, 2, 4]
  • [1, 2, 3, 4, 5, 6]
  • IndexError
Код на салфетке
30 ноября 2024 г. 11:56
Что выведет этот код? №46

Задача:
Вы работаете над оптимизацией обработки входящих данных. Для упрощения написания условий фильтрации вы решили использовать вложенные функции и модификацию списка в процессе его обработки. Коллега предложил свой вариант решения.

Посмотрите на код и скажите, что он выведет?
Код на салфетке
29 ноября 2024 г. 18:00
Приветствую!

Сегодня пятница, а это значит, что настало время для нашего еженедельного кинопоста! На этой неделе мы предлагаем вам погрузиться в мир научной фантастики. Этот фильм переносит нас в альтернативную реальность, где инопланетяне живут среди людей, но их существование далеко не безоблачно.

Фильм: Район №9

Год: 2009

Более 20 лет назад инопланетяне установили первый контакт с Землей. Люди были готовы ко всему — от враждебного вторжения до невероятного технологического прорыва. Ни того, ни другого не произошло. Пришельцы оказались беженцами со своей собственной планеты, и пока мировое сообщество решало, что с ними делать дальше, для них был организован временный лагерь в южноафриканском Районе N9.

Приятного просмотра!
Код на салфетке
28 ноября 2024 г. 11:05
Бесплатный аналог ChatGPT на своём ПК
Автор: Иван Ашихмин

В этой статье мы узнаем, что такое предобученные модели нейронных сетей, что такое квантизация и какие ресурсы они потребляют. Также разберём способы запуска аналогов ChatGPT на своём ПК.


Читать пост в TelegramЧитать пост в Telegram

Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram

#ChatGPT #Гайды #Полезные_инструменты #AI #Квантированные_модели #OpenAI #LLM #GigaChat #GGUF #ИИ #Hugging_Face #YandexGPT
Код на салфетке
28 ноября 2024 г. 8:01
Неделя IT-донора: масштабируем добро

С 2 по 7 декабря пройдёт девятая акция IT-донор. Это социальный проект Artsofte. Его цель — создать донорское сообщество из специалистов IT-отрасли, которые готовы сдавать кровь. Идея сплотила комьюнити: проект стал федеральной акцией, привлёк более 650 IT-компаний и 40 Министерств.

В прошлую акцию:

❤️ Зарегистрировалось более 2600 добровольцев из 200 городов России;
❤️ Сдали почти 500 литров крови, которые помогли спасти жизни людей со всей России.

И это не предел — ведь скоро стартует декабрьская акция IT-донор.

Как участвовать в акции?

1. Регистрируйтесь через чат-бот IT-донора до 7 декабря включительно;
2. Приходите с 2 по 7 декабря сдавать кровь на станцию переливания в вашем городе. Найти ближайшую к вам станцию можно здесь.

Подробнее о неделе добра и о правилах участия в акции можно прочесть на сайте проекта.

А если у вас ещё остались вопросы, задавайте их в чате сообщества доноров из IT.
Код на салфетке
26 ноября 2024 г. 17:03
Хотите разобраться в основах сетей Docker и как связывать контейнеры?

В Docker есть несколько способов организовать сеть между контейнерами, основные из которых:

- bridge (по умолчанию): создает изолированную сеть для контейнеров на одном хосте.
- host: контейнер использует сетевой стек хост-машины.
- overlay: связывает контейнеры на разных хостах (для Docker Swarm).

docker network create mynetwork

docker run -d --name web --network mynetwork djangoapp
docker run -d --name db --network mynetwork postgres

Теперь контейнеры "дружат" между собой и в djangoapp можно настроить подключение к базе данных:
import psycopg2

conn = psycopg2.connect(
host='db',
database='mydb',
user='user',
password='password'
)

Это упрощает конфигурацию и позволяет контейнерам общаться друг с другом без явного указания IP-адресов. А для просмотра сетей и их подключения используйте:
docker network ls
docker network inspect mynetwork
Код на салфетке
25 ноября 2024 г. 11:02
Привет, друзья!

Прошла еще одна неделя, и у нас накопилось много интересных материалов: статьи, новости и полезные советы. Вот наш недельный дайджест:

Понедельник (18.112024) Дайджест за предыдущую неделю

Вторник (19.11.2024) Знаете ли вы разницу между deep copy и shallow copy в Python?

Среда (20.11.2024)

Четверг (21.11.2024) Python-проект в EXE-файл и обфускация кода

Пятница (22.11.2024) Пятничный кинорелакс

Суббота (23.11.2024)

Воскресенье (24.11.2024) Мы ищем авторов

Спасибо, что остаетесь с нами! Надеемся, что эти материалы будут вам полезны. Удачи в новой неделе!

С уважением,
Команда канала "Код на салфетке".

#дайджест #материалы #новости #код_на_салфетке
Код на салфетке
24 ноября 2024 г. 14:37
Приветствую, друзья!

Мы всё ещё находимся в поисках авторов на наш канал и сайт.

Писать код не то же самое, что объяснять его. В программировании есть множество практик, каких-то личных "лайф-хаков" и наработок, которыми можно и нужно делиться с новичками.

Приглашаем всех, кто хочет раскрыть себя как:
- Автор статей на сайт и канал.
- Автор рубрики на канал.
- Автор активностей (задачи/опросы) на канал.

Для авторов у нас есть памяткапамятка с основными требованиями и рекомендациями.

Если заинтересовались, пишите @proDreams
Код на салфетке
22 ноября 2024 г. 18:00
Приветствую, друзья!

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

Фильм: Не говори никому

Год: 2024

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

Устраивайтесь поудобнее. Всем приятного просмотра!
Код на салфетке
21 ноября 2024 г. 13:14
Python-проект в EXE-файл и обфускация кода
Автор: Иван Ашихмин

В этом посте познакомимся с инструментами, позволяющими превратить Python-проект в exe-файл, а также узнаем, что такое обфускация кода.


Читать пост в TelegramЧитать пост в Telegram

Пост на сайте
Поддержать проект на Boosty
Поддержать проект в Telegram

#Гайды #Полезные_инструменты #защита #pyinstaller #python_minifier #обфускация #компиляция #nuitka #pyarmor #exe