Вопросы по теме «Булева логика и фильтры»

Проверь себя · 1/3разбор после ответа
В сегмент нужно включить пользователей, у которых активен хотя бы один из флагов: is_student = 1 или has_coupon = 1. Какое условие соответствует формулировке «хотя бы один»?

AND, OR, NOT, законы де Моргана, приоритет операторов — булева логика лежит в основе фильтрации данных в SQL и Python. На собеседовании дают сложное условие с вложенными AND/OR и просят определить, какие строки пройдут фильтр. Ошибки в логических выражениях — одна из самых частых причин неправильных результатов.

Всего в этом разделе 20 вопросов. Каждый — с правильным ответом и кратким разбором теории. Разбито на 4 части по 5 вопросов.

Качество данных и инвариантыВоронки и когортные рассужденияJOIN и кардинальностьПостановка задачиДоли и процентыSanity-check и оценкаСегментация и конфаундингТеория множеств и дедупликацияВзвешенные средние и смешение

Вопросы 15 из 20

1Какое условие фильтра тождественно ложно (никогда не выполнится) для флага `is_paying`, который принимает только 0 или 1?
A`is_paying = 1 OR is_paying = 0`
B`NOT (is_paying = 1) OR is_paying = 1`
C`is_paying = 1 OR NOT (is_paying = 0)`
D`is_paying = 1 AND is_paying = 0`
Ответ: Условие `is_paying = 1 AND is_paying = 0` — противоречие: флаг не может одновременно равняться двум значениям.

Флаг не может одновременно равняться 1 и 0, поэтому условие `is_paying = 1 AND is_paying = 0` никогда не выполнится — это противоречие. Такие условия иногда появляются при неверной склейке фильтров через `AND` или при попытке одновременно потребовать два взаимоисключающих сегмента. Распознавание тождественно ложных условий помогает понять, почему запрос возвращает пустой результат, и быстро найти ошибку логики. Противоположный случай — `is_paying = 1 OR is_paying = 0` — наоборот, тождественно истинно для любой определённой строки.

Подробный разбор →
2В сегмент нужно включить пользователей, у которых активен хотя бы один из флагов: `is_student = 1` или `has_coupon = 1`. Какое условие соответствует формулировке «хотя бы один»?
A`is_student = 1 AND has_coupon = 1` без других дополнительных условий
B`is_student = 1 OR has_coupon = 1` без других дополнительных условий
C`NOT (is_student = 1 OR has_coupon = 1)` без других дополнительных условий
D`(is_student = 1 AND NOT has_coupon = 1) OR (NOT is_student = 1 AND has_coupon = 1)`
Ответ: Фраза «хотя бы один» соответствует логическому `OR` между условиями.

Условие `A OR B` истинно, если истинно A, или истинно B, или истинны оба. Это ровно соответствует «хотя бы один признак». `AND` отберёт только тех, у кого активны оба флага. `NOT (A OR B)` отберёт пользователей, у которых ни одного флага нет. Длинная конструкция с XOR-логикой соответствует «ровно один из флагов», а не «хотя бы один».

Подробный разбор →
3Условие в фильтре записали как `NOT (NOT (is_test_user = 1))`. Какое более простое условие ему эквивалентно?
A`is_test_user = 1`
B`NOT (is_test_user = 1)`
C`is_test_user = 0`
D`is_test_user = 1 OR is_test_user = 0`
Ответ: Двойное отрицание `NOT (NOT X)` эквивалентно `X`.

`NOT` инвертирует истинность выражения, а повторная инверсия возвращает исходный смысл. В фильтрах лишние `NOT` ухудшают читаемость и увеличивают шанс перепутать логику при правках. Поэтому `NOT (NOT (is_test_user = 1))` безопасно упрощается до `is_test_user = 1`.

Подробный разбор →
4В сегмент «платящие и активные» должны попасть пользователи, у которых выполнены оба условия: `is_paying = 1` и `is_active = 1`. Какой фильтр соответствует слову «оба»?
A`is_paying = 1 OR is_active = 1` без других дополнительных условий
B`NOT (is_paying = 1 AND is_active = 1)` без других дополнительных условий
C`is_paying = 1 AND is_active = 1` без других дополнительных условий
D`(is_paying = 1 OR is_active = 1) AND NOT (is_active = 1)`
Ответ: «Оба» означает, что должны быть истинны обе части условия, поэтому используется `AND`.

Условие `A AND B` истинно только когда истинны и A, и B одновременно. Это отличается от «хотя бы одно», где достаточно одного условия и используется `OR`, и от «ровно одно», где оба сразу быть истинными не должны. Вариант с `NOT (... AND ...)`, наоборот, исключает пользователей с обоими признаками. В фильтрах сегментов путаница между `AND` и `OR` — одна из самых частых причин неверной аналитики.

Подробный разбор →
5Есть два флага участия в экспериментах: `in_ab_test = 1` и `in_holdout = 1`. Нужно выбрать пользователей, которые не находятся ни в одном из них. Какое условие корректно?
A`NOT (in_ab_test = 1) OR NOT (in_holdout = 1)`
B`in_ab_test = 0 OR in_holdout = 0`
C`NOT (in_ab_test = 1 AND in_holdout = 1)`
D`NOT (in_ab_test = 1) AND NOT (in_holdout = 1)`
Ответ: Фраза «ни в одном из них» для двух флагов означает `NOT (in_ab_test = 1) AND NOT (in_holdout = 1)`.

Чтобы пользователь не был ни в одном из сегментов, оба условия участия должны быть ложными одновременно, значит нужен `AND`. Ошибка — использовать `OR`: тогда достаточно, чтобы один флаг был ложным, и пользователь пройдёт, даже если другой флаг истинный. По законам де Моргана это также эквивалентно `NOT (in_ab_test = 1 OR in_holdout = 1)`, но не `NOT (... AND ...)` — последнее даёт пользователей, которые не в обоих сегментах одновременно.

Подробный разбор →
1234

Хотите тренировать интерактивно?

В приложении — таймер, прогресс, стрики и 1700+ вопросов по всем темам.

Открыть Карьерник в Telegram

Другие темы: Логика

Качество данных и инвариантыВоронки и когортные рассужденияJOIN и кардинальностьПостановка задачиДоли и процентыSanity-check и оценкаСегментация и конфаундингТеория множеств и дедупликацияВзвешенные средние и смешение