divmod и фильтр в list comprehension (Python)
@python_quizРазберем этот квиз
Код задачи

Что делает код — пошагово
- Итерация: для каждого n в списке nums перебираются значения 5, 2, 0.
- Условие-фильтр:
if n // 2
- Оператор // — целочисленное деление (floor division).
- В условии проверяется целочисленный результат n // 2 на булеву истинность: ноль трактуется как False, любое ненулевое целое — как True.
- Для 5: 5 // 2 == 2 → True (включается).
- Для 2: 2 // 2 == 1 → True (включается).
- Для 0: 0 // 2 == 0 → False (исключается).
- Выражение в списковом включении:
divmod(n, 2)
- divmod(a, b) возвращает кортеж (a // b, a % b) — частное и остаток от деления.
- Для 5: divmod(5, 2) -> (2, 1).
- Для 2: divmod(2, 2) -> (1, 0).
Итоговый результат, который напечатает программа:

Разбор вариантов ответов (пояснения)
- Вариант с тремя кортежами, включая
(0, 0)— неверен, потому что ноль был отфильтрован условиемif n // 2. - Вариант с только
(2, 1)— неверен, потому что 2 тоже проходит фильтр (2 // 2 == 1), так что для 2 также будет результат. - Вариант, где предполагается исключение
ZeroDivisionError— неверен в данном коде: делитель в вызовеdivmod(n, 2)равен 2, ноль как делитель не используется. ИсключениеZeroDivisionErrorвозникло бы только при попытке деления на 0 (например,divmod(1, 0)). - Правильный вывод — два кортежа: результат для 5 и для 2, как показано выше.
Полезные замечания и тонкости
- Условие в list comprehension (
if n // 2) использует не булево выражение явно, а целое число, которое автоматически приводится к булевому: 0 → False, любое другое → True. Такой приём часто встречается, но менее явен, чемif n != 0илиif n // 2 != 0. divmodудобен, когда нужно получить одновременно частное и остаток; эквивалентный код через оператор выглядел бы так:

- Если нужно, чтобы ноль тоже обработался, фильтр нужно убрать или изменить. Например, чтобы явно включать все числа:

Вывод
Код фильтрует элементы по значению n // 2 (где ноль отбрасывается) и применяет divmod к оставшимся элементам. В данном случае результат — список кортежей для 5 и 2: [(2, 1), (1, 0)].