Код на салфетке
2.24K subscribers
749 photos
15 videos
2 files
792 links
Канал для тех, кому интересно программирование на Python и не только.

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

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

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

Устраивайтесь поудобнее и приготовьте что-нибудь вкусное, ведь вас ждет незабываемое киноискусство!

Фильм: Финч

Год: 2021

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

Приятного просмотра!
10🔥6
Что выведет этот код? №37

Задача:
У вас есть функция, которая принимает сумму заказа и разные скидки, которые могут быть применены. Нужно корректно рассчитать итоговую сумму с учётом всех скидок.
🤯3🔥1
Что выведет код с изображения? №37
Anonymous Quiz
14%
90.0 170.0 135.38
16%
90.0 171.0 128.25
43%
90.0 171.0 243.68
16%
90 180 255
11%
TypeError
🤯5🔥1
Сегодня разбираем задачу на работу с аргументами функции. Несмотря на то, что задача не сложная, верно ответили всего 39% из 28 участников.

Задача:
У вас есть функция, которая принимает сумму заказа и разные скидки, которые могут быть применены. Нужно корректно рассчитать итоговую сумму с учётом всех скидок.

Код задачи:
def apply_discounts(total, *discounts):
for discount in discounts:
total -= total * discount
return round(total, 2)

order1 = apply_discounts(100, 0.1)
order2 = apply_discounts(200, 0.05, 0.1)
order3 = apply_discounts(300, 0.05, 0.1, 0.05)

print(order1, order2, order3)


Разбор задачи:

Начнём с определения функции apply_discounts, которая принимает два типа аргументов:
- total — это сумма заказа.
- *discounts — здесь используется синтаксис *, позволяющий передавать произвольное количество скидок в виде кортежа.

def apply_discounts(total, *discounts):


Что значит звёздочка * перед аргументом? Это означает, что в функцию можно передать любое количество дополнительных аргументов после основного — они все будут собраны в кортеж. Например, в вызове apply_discounts(200, 0.05, 0.1), значения 0.05 и 0.1 будут упакованы в кортеж discounts = (0.05, 0.1).

Далее, функция последовательно применяет каждую из скидок. Она проходит по списку переданных скидок и уменьшает total на определённый процент:

for discount in discounts:
total -= total * discount


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

return round(total, 2)



Теперь разберём, что происходит при вызовах функции для каждого заказа:

1. Первый заказ:
order1 = apply_discounts(100, 0.1)


На сумму 100 применяем скидку 10% (0.1). Вычисляем:
100 - 100 * 0.1 = 90.0


Значение order1 = 90.0.

2. Второй заказ:
order2 = apply_discounts(200, 0.05, 0.1)


Здесь на сумму 200 применяются две скидки — сначала 5%, потом 10%. Рассчитаем шаг за шагом:
- Применяем 5%:

  200 - 200 * 0.05 = 190.0

- Применяем 10%:

  190 - 190 * 0.1 = 171.0


Значение order2 = 171.0.

3. Третий заказ:
order3 = apply_discounts(300, 0.05, 0.1, 0.05)


Здесь применяются три скидки: 5%, 10% и снова 5%. Рассчитаем шаг за шагом:
- Применяем 5%:

  300 - 300 * 0.05 = 285.0

- Применяем 10%:

  285 - 285 * 0.1 = 256.5

- Применяем ещё 5%:

  256.5 - 256.5 * 0.05 = 243.68


Значение order3 = 243.68.

Итог:
Мы получили следующие результаты:
- Первый заказ: 90.0
- Второй заказ: 171.0
- Третий заказ: 243.68

Все числа вычислены корректно, и программа успешно выводит три значения.
Правильный ответ — 3. 90.0 171.0 243.68.

Передача позиционных аргументов:
Стоит отметить, что ключевой элемент задачи — это использование звёздочки *, которая позволяет передавать любое количество скидок в функцию. Это даёт гибкость: вместо создания множества функций для разных наборов скидок, мы можем собрать их все в одном месте и обработать с помощью цикла.
🔥8
Привет, друзья!

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

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

Вторник (10.09.2024) Обновление библиотеки - AIOgram 3.12 и 3.13

Среда (11.09.2024) Сравнение hash map С и C++ с dict Python (часть 2)

Четверг (12.09.2024)

Пятница (13.09.2024) Telegram Stars: Подробная инструкция по выводу

Пятничный кинорелакс

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

Воскресенье (15.09.2024) Текстовый разбор задачи


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

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

#дайджест #материалы #новости #код_на_салфетке
10🔥4
Обновления на сайте и поиск авторов
Автор: Иван Ашихмин

Мы изменили внешний вид страницы статьи, внесли некоторые изменения, а также ищем новых авторов!


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

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

#новости #Код_на_салфетке #редизайн #авторы #статьи #новый_дизайн #ищем_авторов
10🔥4👍1👏1
Сколько времени вы готовы уделить участию в контесте по программированию?
Anonymous Poll
10%
1 день
17%
2-4 дня
21%
1 неделю
17%
2 недели
24%
3-4 недели
12%
Не готов
🔥4👍1👏1
Привет, друзья!

Мы регулярно проводим разные интерактивы, последним крупным мероприятием был конкурс на создание анти-спама для телеграм-бота на Python.

Конкурсы - безусловно, интересно, но мы решили пойти дальше! В данный момент мы планируем проведение контеста по программированию на Python.

В чём суть контеста?
Это мероприятие, где каждый сможет принять участие по написанию небольшого проекта по техническому заданию (ТЗ).

Какая цель?
Помимо упомянутой выше, мы собираем команду, а-ля гильдию разработчиков! Те, кого мы возьмём в команду, получат возможность участвовать в проектах "Код на салфетке" поначалу в формате мастерской под нашим руководством, а затем в качестве полноценных, самостоятельных разработчиков. Под руководством в данном случае подразумевается:
- работа в команде,
- код-ревью,
- помощь в изучении нового.

Помимо проектов салфетки, мы планируем выйти на рынок выполнения заказов, но об этом как ни будь позже.

Чем можно будет заниматься в команде?
У нас уже есть планы по развитию экосистемы "салфетки". В частности, участникам предстоит познакомиться с библиотекой AIOgram для написания ботов, фреймворками Django и FastAPI для веб-разработки. Помимо прочего, будет использоваться собственный git-сервер, wiki-платформа и task-трекер.

В чём вопрос?
Мы сейчас подготавливаем необходимое и определяемся с задачей, однако остаётся один незакрытый вопрос. В связи с чем мы хотим узнать:
сколько времени вы готовы уделить участию в контесте по программированию?

Свой ответ оставьте, пожалуйста, в опросе выше.
10🔥9👍3👏2😱1
FastAPI 3. Подключение к SQLAlchemy и генератор сессий
Автор: Иван Ашихмин

В этом посте продолжим изучение FastAPI. Подключим к проекту SQLAlchemy и создадим фабрику сессий.


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

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

#Гайды #FastAPI #SQLAlchemy #PostgresDsn #session_maker #фабрика_сессий #подключение_БД
10🔥63👍2👏1
Приветствую

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

Фильм: Письма мёртвого человека

Год: 1986

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

Приятного просмотра!
🔥41👏1
Что выведет этот код? №38

Задача:
Реализована функция, которая принимает позиционные, ключевые аргументы, а также *args и **kwargs. Что выведет данный код при вызове функции с указанными аргументами?
🤯5😨1
Сегодня разберём интересную задачу на работу с различными типами аргументов функции: позиционными, ключевыми, *args и **kwargs. Вроде бы ничего сложного, но здесь важно внимательно следить за тем, как передаются аргументы и как они влияют на итоговый результат. Верно ответили 32% из 19-ти участников.

Задача:
Реализована функция, которая принимает позиционные, ключевые аргументы, а также *args и **kwargs. Нужно понять, что выведет код при вызове функции с указанными аргументами.

Код задачи:

def sum_args(a, *args, b=2, c=3, **kwargs):
result = a + b + c
for arg in args:
result += arg
for key, value in kwargs.items():
result += value
return result

r3 = range(3)
r2 = range(2)
dct = {"b": 10, "extra": 5}

output1 = sum_args(1, *r3, b=5, extra=6)
output2 = sum_args(*r2, c=4)
output3 = sum_args(1, 2, *r3, **dct)

print(output1, output2, output3)


Разбор задачи:
Начнём с функции sum_args, которая принимает несколько типов аргументов:
- Позиционный аргумент a.
- Произвольное количество дополнительных позиционных аргументов, собранных в кортеж *args.
- Ключевые аргументы b и c со значениями по умолчанию.
- Произвольное количество ключевых аргументов, переданных как **kwargs.

def sum_args(a, *args, b=2, c=3, **kwargs):


Сначала мы складываем значения аргументов a, b и c:
result = a + b + c


Затем проходим по всем дополнительным аргументам в *args и добавляем их к результату:
for arg in args:
result += arg


И в конце прибавляем все значения, которые переданы через **kwargs:
for key, value in kwargs.items():
result += value


Теперь давайте разберём каждый вызов функции и посмотрим, что будет выведено

Первый вызов:
output1 = sum_args(1, *r3, b=5, extra=6)


Здесь:
- a = 1
- *r3 разворачивает range(3) в позиционные аргументы 0, 1, 2, которые пойдут в *args.
- b = 5 (переопределяем значение по умолчанию).
- extra = 6 передаётся в **kwargs.

Давайте разберём расчёт:
- Начальное значение: 1 + 5 + 3 = 9 (складываем a, b и c).
- Добавляем значения из *args: 9 + 0 + 1 + 2 = 12.
- Добавляем значения из **kwargs: 12 + 6 = 18.

Значение output1 = 18.

Второй вызов:
output2 = sum_args(*r2, c=4)


Здесь:
- *r2 разворачивает range(2) в позиционные аргументы 0, 1. Следовательно, a = 0, а 1 попадает в args.
- c = 4 (переопределяем значение по умолчанию).
- Аргумент b не передаётся, поэтому используется его значение по умолчанию — b = 2.

Давайте разберём расчёт:
- Начальное значение: 0 + 2 + 4 = 6.
- Добавляем значения из *args: 6 + 1 = 7.
- **kwargs отсутствует, поэтому добавлять больше нечего.

Значение output2 = 7.

Третий вызов:
output3 = sum_args(1, 2, *r3, **dct)


Здесь:
- a = 1.
- 2 попадает в *args перед разворачиванием r3.
- *r3 разворачивает range(3) в 0, 1, 2, которые добавляются к *args.
- **dct разворачивает словарь в аргументы, где b = 10 (взято из **kwargs, а не из дефолтного значения) и extra = 5.

Расчёт:
- Начальное значение: 1 + 10 + 3 = 14 (складываем a, b и c).
- Добавляем значения из *args: 14 + 2 + 0 + 1 + 2 = 19.
- Добавляем значения из **kwargs: 19 + 5 = 24.

Значение output3 = 24.

В этом примере важно заметить, что значение b не взято из дефолтного состояния функции (где оно равно 2), а было передано через **kwargs из словаря dct.

Итог:
Мы получаем следующие результаты:
- output1 = 18
- output2 = 7
- output3 = 24
🔥8👍1👏1
Про агрументы.
Теперь давайте немного подробнее поговорим о том, как работают разные типы аргументов в Python:

- Позиционные аргументы — это те аргументы, которые передаются функции напрямую в том порядке, в каком они указаны при вызове. Например, в нашем примере первый аргумент всегда позиционный: a. Он должен быть передан, иначе функция выдаст ошибку.

- Ключевые аргументы — это аргументы, которые имеют значения по умолчанию. В нашем случае это b и c. Если при вызове функции их не переопределить, будут использованы значения по умолчанию. Но если вы явно укажете новые значения, они заменят стандартные.

- *args — это способ передать функции переменное количество позиционных аргументов. Внутри функции они собираются в кортеж. Например, когда мы передавали *r3, Python разворачивал это в набор значений и добавлял их в *args.

- **kwargs — это способ передать функции переменное количество именованных аргументов (ключевых). Внутри функции они собираются в словарь. Например, в случае с **dct, словарь был развернут в именованные аргументы.

Использование этих механизмов даёт большую гибкость в работе с функциями, позволяя передавать неограниченное количество как позиционных, так и ключевых аргументов.
10🔥7👎1👏1
Памятка для авторов
Автор: Иван Ашихмин

Мы рады, что на нашу новость о поиске авторов есть отклики, в связи с этим, подготовили памятку для будущих авторов контента.


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

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

#Код_на_салфетке #правила #Telegram_канал #публикация_контента #авторские_статьи #поиск_авторов
🔥72👍1
Привет, друзья!

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

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

Вторник (17.09.2024) Обновления на сайте и поиск авторов

Среда (18.09.2024) Опрос и Анонс контеста по программированию

Четверг (19.09.2024) FastAPI 3. Подключение к SQLAlchemy и генератор сессий

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

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

Воскресенье (22.09.2024) Текстовый разбор задачи и Памятка для авторов


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

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

#дайджест #материалы #новости #код_на_салфетке
🔥8🥰1👏1
Приветствую!

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


Оглавления:
Для удобства навигации есть посты с оглавлениями по темам:

"Сайт на Django"
"Telegram-бот на AIOgram3"
"Применение Docker"
"Полезные инструменты"
"Путь в IT."
"Код в мешке"
"Boosty эксклюзив"
"Сравнение Python и C"

Задачи "Что выведет этот код?"
Задачи "Найди ошибку в коде"


Ресурсы канала:

Уютный и немного безумный чат канала.
Бот с материалами к постам
Сайт со всеми постами
Канал в Dzen
Сообщество в VK


Поддержка.

Если вам нравится канал и выходящий материал, поделитесь ссылкой с людьми, кому это тоже может быть интересно.

Также поддержать канал можно:
Подпиской или донатом на Boosty.

Донатом в нашем Telegram-боте.
Отправив донат в DonationAlerts.

Или внеся сайт в исключения вашего блокировщика рекламы.
🔥8👍2👎1
Приветствую, друзья!

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

Фильм: Майор Гром: Игра

Год: 2024

Его жизнь идеальна: днём он ловит преступников вместе с напарником Димой Дубиным, а вечера проводит в компании журналистки Юлии Пчёлкиной. Полную идиллию прерывает появление в городе таинственного злодея, называющего себя Призраком. Он предлагает Грому сыграть в опасную игру, ставка в которой — жизни обычных людей.

Приятного просмотра!
10🔥5😁1🤡1