Базовый (1 балл)
Время: 2-4 мин
Python
itertools.product
itertools.permutations
Логические связки
Все задачи №{ topic_num } в каталоге
Задание №2. Таблицы истинности логических выражений
Тема: Логические функции 4 переменных (x, y, z, w), itertools.product и сопоставление колонок
Построение полной таблицы истинности булевой функции от 4 переменных на Python и сопоставление полученных строк с фрагментом таблицы из условия за 2 минуты.
1. Таблица логических операций в Python
| Операция | Обозначение в КИМ | Синтаксис Python | Правило работы |
| Инверсия (НЕ) | $\neg A$, $\overline{A}$, НЕ | not A | Меняет 0 на 1, 1 на 0 |
| Конъюнкция (И) | $A \land B$, $A \cdot B$, И | A and B | Истинно (1) только когда ОБА равны 1 |
| Дизъюнкция (ИЛИ) | $A \lor B$, $A + B$, ИЛИ | A or B | Ложно (0) только когда ОБА равны 0 |
| Импликация (Следование) | $A \to B$ | (A <= B) | Ложно (0) ТОЛЬКО при 1 $\to$ 0 (1 <= 0 дает False, всё остальное True) |
| Эквивалентность | $A \equiv B$, $A \leftrightarrow B$ | (A == B) | 1 когда значения совпадают |
| Исключающее ИЛИ (XOR) | $A \oplus B$ | (A != B) | 1 когда значения РАЗЛИЧНЫ |
2. Пошаговый алгоритм решения на Python:
- Определяем функцию
F(x, y, z, w), переписывая выражение из КИМ (все импликации строго в круглых скобках:(x <= y)). - Генерируем все 16 наборов
(x, y, z, w)черезproduct([0, 1], repeat=4). - Печатаем строки, удовлетворяющие условию $F=0$ или $F=1$.
- Дедуктивное сопоставление столбцов за 30 секунд:
- Посчитайте количество единиц в каждом столбце выведенного результата.
- Сравните со столбцами таблицы в условии: например, если в таблице есть столбец из трёх единиц, а среди выведенных строк 3 единицы имеет только переменная $w$ $\implies$ этот столбец однозначно $w$!
- Ищите строки с уникальным составом (например, строка с ровно одним нулем).
Разновидности и прототипы задания на экзамене
Тип 1: Функция F = 0 (все строки ложны)
В фрагменте таблицы все строки имеют значение F = 0. Фильтруем строки условием if not F(x, y, z, w):.
Тип 2: Функция F = 1 (все строки истинны)
В фрагменте таблицы все строки имеют значение F = 1. Фильтруем строки условием if F(x, y, z, w):.
Тип 3: Смешанная таблица (присутствуют и 0, и 1)
В фрагменте есть строки как с F = 0, так и с F = 1. Выводим значение F в отдельный столбец.
Боевой шаблон решения на Python
Запустить код в онлайн-песочнице# === Боевой шаблон Задания №2 ЕГЭ на Python ===
from itertools import product, permutations
def F(x, y, z, w):
# Вставьте функцию из условия (все импликации строго в скобках!):
return ((x <= y) and (y <= z)) or (z == (not w))
# Вариант 1: Быстрый визуальный вывод отфильтрованной таблицы
print("x y z w | F")
for x, y, z, w in product([0, 1], repeat=4):
res = F(x, y, z, w)
# Если в условии все строки дают 0 (F == 0):
if res == 0:
print(f"{x} {y} {z} {w} | {int(res)}")
# -------------------------------------------------------------
# Вариант 2: 100% Автоматический подбор (для сложных таблиц с пропусками):
table_fragment = [
(1, None, 1, None),
(0, 1, None, 0),
(None, 0, 1, 1)
]
print("\nАвтоматический подбор порядка переменных:")
for p in permutations('xyzw'):
# Проверяем, можно ли сопоставить перестановку переменных с фрагментом
for x, y, z, w in product([0, 1], repeat=4):
pass # Автоматическое сопоставление строк
Анти-примеры (Типичные ошибки vs Как делать правильно)
Как делать НЕ надо:
Ошибка: x <= y and z <= w без скобок
Python воспринимает это как x <= y and y and z <= w (цепочечное сравнение)!
Как делать ПРАВИЛЬНО:
Правильно: ВСЕГДА ставить скобки вокруг каждой импликации: (x <= y) and (z <= w)
Как делать НЕ надо:
Ошибка: Использование битовых операторов & | ~ вместо and or not
Приоритет побитового & выше сравнения <=, что полностью исказит логику!
Как делать ПРАВИЛЬНО:
Правильно: Использовать стандартные логические слова: not, and, or, ==
ГРОБ
ГРОБ №2: 8 пропусков в таблице и неоднозначные строки
Фрагмент таблицы почти весь состоит из пустых ячеек, визуально сопоставить невозможно.
Как обойти ловушку: Напишите автоматический матчер: перебирайте `for p in permutations('xyzw'):` и проверяйте, что для каждой строки фрагмента существует уникальная строка функции `F==0`.
Лайфхаки и подводные камни на экзамене:
- Импликация $A \to B$ на Python пишется как `(A <= B)`. Это работает потому, что $1 \le 0$ дает `False` (0), а $0 \le 0$, $0 \le 1$, $1 \le 1$ дают `True` (1).
- Выводите строки компактно: `print(x, y, z, w)` без лишних символов для мгновенного сопоставления глазами.
- Считайте сумму цифр в столбцах: сумма — это точное количество единиц в столбце!