Код на салфетке
2.22K subscribers
747 photos
14 videos
2 files
789 links
Канал для тех, кому интересно программирование на Python и не только.

Сайт: https://pressanybutton.ru/
Чат: https://t.iss.one/+Li2vbxfWo0Q4ZDk6
Заметки автора: @writeanynotes

Реклама и взаимопиар: @Murzyev1995
Сотрудничество и др.: @proDreams
Download Telegram
Приветствую!

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

Фильм: Сапожник

Год: 2014

Макс Симкин занимается ремонтом обуви в Нью-Йорке. Он работает в магазине, который передавался его семьей из поколения в поколение. Однажды, разочарованный своей скучной жизнью, Макс натыкается на волшебную реликвию, которая позволяет ему увидеть мир по-новому.

Устраивайтесь поудобнее и готовьтесь к увлекательному просмотру. Не забывайте делиться своими впечатлениями и мыслями в комментариях. Приятного просмотра!
🔥5🤩2👏1
Что выведет этот код? №44

Задача:
Вы работаете над алгоритмом, который должен выбрать из списка только те числа, которые соответствуют определённым условиям. Однако коллега написал код, и теперь вам нужно понять, что этот код вернёт. В коде используются хитрые конструкции и работа с функциями. Попробуйте предугадать результат, не запуская код.
🔥4
Что выведет код с изображения? №44
Anonymous Quiz
6%
[2, 3, 5, 22]
17%
[3, 5, 10, 22]
50%
[2, 3, 5, 10, 22]
11%
[2, 3, 10, 21, 22]
17%
[2, 3, 5, 10, 15, 21, 22]
🔥5
Вчерашняя задача была несложной, но требовала знаний простых чисел и внимательности. Правильный ответ выбрали около 50% участников! Давайте разберём подробно как работает данный код. Это поможет лучше понять использование функций для проверки числовых свойств и работы с условными выражениями.

Задача:
Вы разрабатываете алгоритм, который отбирает из списка только те числа, которые либо простые, либо чётные. Программа вызывает несколько функций и использует списковые включения, которые помогают сделать код более компактным. Разберём, как он работает и что вернёт.

Код задачи:
def filter_numbers(
numbers: list[int],
) -> list[int]:
return [
x
for x in numbers
if is_prime(x) or is_even(x)
]


def is_prime(num: int) -> bool:
if num < 2:
return False
return all(
num % i != 0
for i in range(2, int(num**0.5) + 1)
)


def is_even(num: int) -> bool:
return num % 2 == 0


sequence = [2, 3, 5, 10, 15, 21, 22]
result = filter_numbers(sequence)
print(result)


Пояснения по коду:

1. Функция `filter_numbers`:
- Эта функция принимает список чисел numbers и возвращает новый список, содержащий только те числа, которые проходят проверку на простоту или чётность.
- Используется списковое включение: [x for x in numbers if is_prime(x) or is_even(x)].
- Здесь каждый элемент x из numbers добавляется в результат, если он проходит проверку: is_prime(x) or is_even(x). То есть число добавляется в новый список, если оно простое (функция is_prime) или чётное (функция is_even).

2. Функция `is_prime`:
- Эта функция проверяет, является ли число простым.
- Простое число — это число, большее 1, которое делится только на 1 и само на себя. Например, 2, 3, 5 — простые числа.
- Сначала проверяется, меньше ли число 2. Если да, то оно точно не простое (например, 0 и 1 не являются простыми).
- Если число больше 2, то с помощью функции all() проверяется, что оно не делится на числа от 2 до квадратного корня из него. Это оптимизация, позволяющая сократить количество делений, ведь если число делится на какое-то число больше квадратного корня, то это уже не простое число.

3. Функция `is_even`:
- Она возвращает True, если число чётное, и False — если нечётное.
- Для этого проверяется, делится ли число на 2 без остатка: num % 2 == 0.

4. Применение функций к списку `sequence`:
- В переменной sequence хранится список чисел [2, 3, 5, 10, 15, 21, 22].
- Функция filter_numbers проверит каждый элемент списка на чётность или простоту. Если хотя бы одно из этих условий выполнено, число попадёт в результирующий список.

Шаги выполнения и результат:

1. 2 — чётное, добавляем.
2. 3 — простое, добавляем.
3. 5 — простое, добавляем.
4. 10 — чётное, добавляем.
5. 15 — не чётное и не простое, пропускаем.
6. 21 — не чётное и не простое, пропускаем.
7. 22 — чётное, добавляем.

Ожидаемый результат: [2, 3, 5, 10, 22].

Вывод:
Этот код фильтрует список, оставляя только чётные или простые числа. Это может быть полезно для задач, где важны свойства чисел, такие как простота или чётность.
🔥5👍1👏1
Интересный факт
Конструкция [for ... in ...], используемая в нашем коде, называется списковое включение (или list comprehension на английском). Это удобный способ быстро создать новый список на основе существующей коллекции, применяя к его элементам условия или преобразования. Хотя правильное название — списковое включение, его часто называют просто "генератором" — это не совсем корректно, но распространено среди разработчиков.
🔥5
Привет, друзья!

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

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

Вторник (05.11.2024) Знаете ли вы, как Python управляет памятью с помощью подсчета ссылок и сборщика мусора?

Среда (06.11.2024)

Четверг (07.11.2024)

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

Суббота (09.11.2024) Что выведет этот код?

Воскресенье (10.11.2024) Объяснение задачи


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

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

#дайджест #материалы #новости #код_на_салфетке
🔥53
Хотите узнать, как использовать генераторы в Python для эффективной работы с большими данными?

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

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

def read_logs(filename):
with open(filename) as file:
for line in file:
if '[ERROR]' in line:
yield line.strip()

for error in read_logs('server.log'):
print(f"Error found: {error}")


- Файл читается построчно, а не целиком
- В памяти хранится только одна строка в каждый момент времени
- Если в файле миллион строк, но нас интересуют только ошибки, мы не тратим память на хранение ненужных строк

Код на салфетке x Кусочки кода
🔥7
Вхожу в IT - telegram-bot (часть 2)
Автор: Eugene Kaddo

Данная статья продолжает цикл статей о том как я вхожу в IT product уровня в сфере Telegram-ботов на aiogram3. Тут я описываю сложности вхождения в коммерческий мир IT, высказываю свои мысли, рассказываю через какие трудности приходится пройти на старте продуктовой карьеры в IT.


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

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

#Python #Стажировка #Бот #Aiogram #Курсы #Путь_в_IT #Обучение #Менторство #Код_Ревью
1🔥5🤩1
Приветствую!

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

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

Фильм: Ускорение

Год: 2024

Группа астронавтов отправляется в смертельно опасную миссию к спутнику Сатурна Титану и пытается сохранить контроль над реальностью.

Устраивайтесь поудобнее и готовьтесь к незабываемому просмотру. Не забывайте делиться своими впечатлениями и мыслями в комментариях – нам очень интересно узнать ваше мнение о фильме. Приятного просмотра и до встречи на следующей неделе!
🔥5
Что выведет этот код? №45

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

Внимательно изучите код и ответьте: что выведет этот код?
🔥3🤯2
Что выведет код с изображения? №45
Anonymous Quiz
23%
[1, 2, 3, 4, 5]
3%
[1, 2, 3]
35%
[4, 5]
26%
[]
13%
TypeError
🤔2
Вчера мы предложили вам довольно хитрую задачу, которая требовала внимательного подхода. Несмотря на её видимую простоту, код оказался обманчиво сложным. Проголосовало 23 человека, и только 4 из них справились правильно. Разберем всё подробно.

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

Внимательно изучите код и ответьте: что выведет этот код?

Код задачи:

from typing import Any  

def filter_data(
data: list[Any], condition: Any
) -> list[Any]:
def matches_condition(item):
nonlocal condition
if callable(condition):
condition = item
return False
return condition == item

return [
item
for item in data
if matches_condition(item)
]

data = [1, 2, 3, 4, 5]
condition = lambda x: x > 3

result = filter_data(data, condition)
print(result)



Разбор:
На первый взгляд задача кажется достаточно простой: нужно отфильтровать список data, основываясь на переданном условии condition. Однако несколько деталей делают этот код действительно коварным.

1. Что делает функция `matches_condition`?
- Проверяет, является ли condition вызываемым объектом (например, функцией).
- Если condition — вызываемый объект, оно перезаписывается текущим элементом item, а функция возвращает False.
- Если condition — не вызываемый объект, то возвращается результат сравнения condition == item.

2. Что происходит внутри списка?
Список создается с помощью вхождения:
[item for item in data if matches_condition(item)]


Для каждого элемента item из data вызывается matches_condition.

3. Перезапись переменной `condition`:
При первом вызове matches_condition, condition — это функция (lambda). Для первого элемента списка (1) происходит следующее:
- condition заменяется на 1.
- matches_condition возвращает False.

4. Дальнейшие итерации:
Начиная со второго элемента списка, condition уже не является функцией. Теперь это число, и на каждой итерации проверяется равенство condition == item.

Таким образом:
- На первом шаге 1 != 2, проверка завершается.
- На втором шаге 1 != 3.
- И так далее.


Что здесь происходит?
1. `condition` на старте содержит lambda-функцию, определяющую условие: x > 3.

2. `nonlocal condition` позволяет изменять значение переменной condition, объявленной в функции-родителе, прямо во время работы функции.

3. Логика проверки в `matches_condition`:
- Если condition — функция (то есть callable), она заменяется на текущий элемент item, а элемент исключается из итогового списка (возвращается False).
- Если condition уже не функция, проверяется равенство condition == item.

4. Итоговый процесс фильтрации:
Каждый элемент списка проверяется с помощью matches_condition. Поскольку condition меняется уже на первом шаге, последующие проверки будут отличаться от ожидаемого поведения.


Верный ответ: []


Почему ответ — пустой список?

Ключевую роль играет изменение переменной `condition` на первом шаге. Изначально это была лямбда-функция, которая после первой итерации заменяется на число. В итоге фильтрация ломается: condition больше не проверяет изначальное условие x > 3, а просто сравнивает элементы с числом 1. Так как ни один элемент не равен 1, результатом становится пустой список.

Всегда обращайте внимание на использование замыканий, изменяемых переменных и ключевых слов, таких как nonlocal. Они могут существенно повлиять на выполнение программы.
🔥3🤩1
Что нового в Telegram Bot API 8.0?
Автор: Иван Ашихмин

Вышло масштабное обновление Telegram Bot API 8.0, которое стало одним из крупнейших за последнее время. Оно добавило сразу несколько революционных возможностей для Mini Apps и ботов, включая платные подписки, полноэкранный режим, и многое другое. Подробности в посте.


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

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

#Telegram #Bot_API #новости #aiogram #изменения #боты
🔥6🥱2
Привет, друзья!

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

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

Вторник (12.11.2024) Хотите узнать, как использовать генераторы в Python для эффективной работы с большими данными?

Среда (13.11.2024)

Четверг (14.11.2024) Вхожу в IT - telegram-bot (часть 2)

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

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

Воскресенье (17.11.2024) Текстовый разбор задачи и Что нового в Telegram Bot API 8.0?


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

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

#дайджест #материалы #новости #код_на_салфетке
👍3🔥2
Знаете ли вы разницу между deep copy и shallow copy в Python?

Поверхностное и глубокое копирование объектов в Python различается по тому, как они обрабатывают вложенные объекты:

- Поверхностное копирование создает новый объект и сохраняет ссылки на вложенные объекты. Подходит для копирования объектов с иммутабельными вложенными элементами.
- Глубокое копирование создает полностью независимую копию объекта с вложенными элементами. Полезно при необходимости полностью отделить копию от оригинала.

import copy

original = [1, [2, 3], 4]
shallow_copied = copy.copy(original)
deep_copied = copy.deepcopy(original)

original[1][0] = 'изменено'
print(original) # [1, ['изменено', 3], 4]
print(shallow_copied) # [1, ['изменено', 3], 4] — вложенный список изменился
print(deep_copied) # [1, [2, 3], 4] — сохранено исходное состояние


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

Код на салфетке x Кусочки кода
🔥7
Python-проект в EXE-файл и обфускация кода
Автор: Иван Ашихмин

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


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

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

#Гайды #Полезные_инструменты #защита #pyinstaller #python_minifier #обфускация #компиляция #nuitka #pyarmor #exe
👍4🤯2🔥1🤩1
Приветствую, друзья!

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

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

Год: 2024

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

Устраивайтесь поудобнее. Всем приятного просмотра!
🔥5
Приветствую, друзья!

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

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

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

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

Если заинтересовались, пишите @proDreams
🔥42
Привет, друзья!

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

Понедельник (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) Мы ищем авторов

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

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

#дайджест #материалы #новости #код_на_салфетке
🔥4👍1
Хотите разобраться в основах сетей 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


Код на салфетке x Кусочки кода
🔥63👍1👏1