Задание №2 ЕГЭ по информатике: разбор, шаблоны кода Python и анти-примеры | СмартКИМ
СмартКИМ УДОБНАЯ ПОДГОТОВКА К ЕГЭ И ОГЭ
Задачи №2 Решать в тренажере Войти в СмартКИМ
ЕГЭ (1–27) ОГЭ (1–15) Python: шпаргалка
Быстрый переход по номерам и темам
Базовый (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:

  1. Определяем функцию F(x, y, z, w), переписывая выражение из КИМ (все импликации строго в круглых скобках: (x <= y)).
  2. Генерируем все 16 наборов (x, y, z, w) через product([0, 1], repeat=4).
  3. Печатаем строки, удовлетворяющие условию $F=0$ или $F=1$.
  4. Дедуктивное сопоставление столбцов за 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)` без лишних символов для мгновенного сопоставления глазами.
  • Считайте сумму цифр в столбцах: сумма — это точное количество единиц в столбце!
Банк реальных задач №2 Открыть в тренажере СмартКИМ