Python: задачки и вопросы
@quiz_python
Вопросы и задачки для подготовки к собеседованиям и прокачки навыковРазместить рекламу: @tproger_sales_botПравила общения: https://tprg.ru/rulesДругие каналы: @tproger_channelsДругие наши проекты: https://tprg.ru/media
Последние посты
Подробное объяснение1️⃣Под капотом Python булевы значения являются обычными числами: True ведёт себя как 1, а False как 0.2️⃣Первое действие в скобках: (x + y) превращается в (1 + 0), что даёт 1.3️⃣Затем происходит умножение: 1 * 5 равно 5.4️⃣Второе действие в скобках: (x == y) проверяет, равно ли True значению False. Это ложь, поэтому возвращается False, которое в математическом контексте равно 0.5️⃣Итоговое сложение: 5 + 0 даёт результат 5.Почему это важноС одной стороны, это позволяет писать изящные счётчики вроде sum(x > 0 for x in lst). С другой стороны, неочевидное смешивание булевых значений и арифметики может запутать читателя кода, поэтому злоупотреблять этим не стоит.

Разбор по шагам1️⃣Вызывается test()2️⃣Выполняется блок try, доходим до return 13️⃣Python запоминает, что нужно вернуть 1, но перед выходом из функции обязан выполнить блок finally4️⃣Входим в finally → встречаем return 25️⃣Запомненное значение 1 безвозвратно отбрасывается6️⃣Функция завершается с возвратом 27️⃣print(2) выводит 2Почему это важноНикогда не используйте операторы управления потоком (return, break, continue) внутри finally. Это антипаттерн: он может скрывать исключения и ломать ожидаемую логику возврата значений из функции.

Объяснение по шагам1️⃣Цикл for i in range(3) запускается: i принимает значения 0, 1, 22️⃣На каждой итерации создаётся лямбда lambda: i — но она не запоминает текущее значение i, а сохраняет лишь ссылку на имя i3️⃣Список funcs теперь содержит три функции, каждая смотрит на одно и то же имя i4️⃣Цикл завершился — переменная i в области видимости равна 25️⃣f() вызывается для первой лямбды → ищет i → находит 2 → возвращает 26️⃣То же самое для второй и третьей лямбды7️⃣print([2, 2, 2]) выводит [2, 2, 2]Почему это важноКлассическая ловушка при создании коллбэков в цикле. Чтобы зафиксировать значение в момент создания, используйте аргумент по умолчанию: lambda i=i: i — он вычисляется сразу при создании функции.

Разбор по шагам1️⃣Выражение t[1] += [3] под капотом разбивается на две операции: t[1].__iadd__([3]) и последующее присваивание t[1] = ...2️⃣Первый шаг выполняется успешно — метод __iadd__ мутирует список на месте, и он становится [2, 3].3️⃣Второй шаг (присваивание обратно по индексу) бросает TypeError, так как кортежи неизменяемы.4️⃣Ошибка перехватывается блоком except, где выводится строка 'Error ' без перехода на новую строку.5️⃣Выполнение продолжается, и print(t) выводит кортеж с уже изменённым списком: (1, [2, 3]).Почему это важноПример наглядно показывает, почему хранение мутабельных объектов (списков) внутри иммутабельных (кортежей) — плохая архитектурная практика. Операции над ними могут вызывать ошибки, но при этом оставлять данные в изменённом (грязном) состоянии.


Победителями премии Тпрогер 🐀становятся...Здесь играет барабанная дробь и интригующая музыка... Вам нужно только выждать драматическую паузу перед объявлением победителей — в каждой номинации он один, и определяется большинством голосов. Готовы?В номинации «Продукт года» золотая мышь достается компании:🐀NetVision за платформу интеллектуального мониторинга СИМ.В номинации «Облачный продукт года» побеждает компания:🐀Гравитон с паком виртуализации «Гелиус»Звание «IT-ивент года» вручается компании:🐀Островок! за О!ХакатонИ в категории «Дизайн года» первое место занимает компания:🐀AcademiaDev за интерактивную инсталляцию.Каждый ваш лайк, голос влияли на исход премии. Давайте поддержим всех — ставьте 🏆участникам, которые хоть и не заняли призового места, но точно остались в сердечке.И 🔥, если хотите аналогичных активностей и готовы выбирать еще!