Разбор задания №2 ЕГЭ по информатике: Построение и анализ таблиц истинности с помощью Python
Задание №2 в ЕГЭ по информатике проверяет знание основных законов алгебры логики, умение работать с логическими выражениями и сопоставлять частично заполненные фрагменты таблиц истинности с логическими переменными.
За правильный ответ даётся 1 первичный балл. Поскольку экзамен проходит в компьютерной форме (КЕГЭ), писать вручную длинные таблицы из 16 строк больше не нужно: с помощью короткого скрипта на Python задача решается за 1–2 минуты без риска допустить случайную арифметическую ошибку.
1. Теоретический фундамент: логические операции в Python
В логике переменные принимают только два значения: 1 (Истина / True) или 0 (Ложь / False).
| Операция | Обозначение в КИМ | В языке Python | Как работает |
| Отрицание (инверсия, НЕ) | ¬, НЕ, черта над переменной | not x | Меняет значение: not 0 → 1, not 1 → 0 |
| Конъюнкция (умножение, И) | ∧, &, И | x and y | Возвращает 1 только тогда, когда оба операнда равны 1 |
| Дизъюнкция (сложение, ИЛИ) | ∨, |, ИЛИ | x or y | Возвращает 1, если хотя бы один операнд равен 1 |
| Импликация (следование) | → | x <= y (или not x or y) | Ложна (0) только в одном случае: 1 → 0 |
| Эквиваленция (равносильность) | ≡, ~, == | x == y | Возвращает 1, когда значения переменных одинаковы |
Лайфхак для Python: Операцию следования A → B в коде удобнее всего записывать через знак нестрогого неравенства:A <= B.Проверим:0 <= 0→ True (1)0 <= 1→ True (1)1 <= 0→ False (0)1 <= 1→ True (1)
Результат полностью совпадает с классической таблицей истинности для импликации.
Приоритет выполнения операций
- Скобки
(...) - Отрицание
not - Логическое умножение
and - Логическое сложение
or - Импликация
x <= y - Эквиваленция
x == y
(В коде программы всегда обособляйте составные логические части круглыми скобками, чтобы приоритеты операторов не конфликтовали).
2. Универсальный шаблон генерации таблицы на Python
Для логической функции от 4 переменных (x, y, z, w) существует ровно 16 различных наборов значений (2⁴ = 16). Программа перебирает их все и выводит только те строки, при которых функция принимает нужное значение (0 или 1).
Базовый шаблон (через 4 вложенных цикла):
Python
print("x y z w")
for x in 0, 1:
for y in 0, 1:
for z in 0, 1:
for w in 0, 1:
# Записываем логическую функцию из условия задачи
f = (ваша_функция)
# Если в условии столбец F состоит из нулей:
if f == 0:
print(x, y, z, w)
# Если в условии столбец F состоит из единиц:
# if f == 1:
# print(x, y, z, w)
3. Пошаговый алгоритм решения
- Запрограммируйте логическое выражение: перенесите функцию в код Python, заменяя знаки стрелок и тождеств на операторы языка.
- Определите значение функции F в условии:
- Если в таблице задания в столбце F стоят нули, в условии пишем
if f == 0:. - Если в таблице задания в столбце F стоят единицы, пишем
if f == 1:.
- Если в таблице задания в столбце F стоят нули, в условии пишем
- Запустите программу: вы получите небольшую таблицу (обычно от 3 до 5 строк).
- Сопоставьте полученный результат с таблицей из КИМ:
- Посчитайте количество нулей и единиц в каждом столбце.
- Найдите уникальные столбцы (например, где все нули или только одна единица).
- Сопоставьте уникальные строки (строка с тремя единицами, строка с тремя нулями).
- Посчитайте количество нулей и единиц в каждом столбце.
- Запишите итоговый порядок букв: без пробелов, запятых и разделителей (например,
ywzx).
4. Разбор типовых примеров из банка КИМ ЕГЭ
Пример 1. Функция принимает нулевые значения (F = 0)
Условие:Логическая функция F задаётся выражением:((x → y) ∧ (y → w)) ∨ (z ≡ (x ∨ y))
Дан частично заполненный фрагмент таблицы истинности, содержащий неповторяющиеся строки:
Определите, какому столбцу соответствует каждая из переменных x, y, z, w. В ответе запишите буквы без разделителей.
Шаг 1: Программа на Python
Python
print("x y z w")
for x in 0, 1:
for y in 0, 1:
for z in 0, 1:
for w in 0, 1:
f = ((x <= y) and (y <= w)) or (z == (x or y))
if f == 0:
print(x, y, z, w)
Шаг 2: Вывод программы в консоли
x y z w
0 1 0 0
1 0 0 0
1 0 0 1
1 1 0 0
Шаг 3: Сопоставление с таблицей задачи
- Анализ столбца z:
- В выводе программы во всех четырёх строках z = 0.
- В таблице задания в 1-м, 2-м и 4-м столбцах уже есть единицы. Следовательно, переменная z может стоять только в 3-м столбце.
- В выводе программы во всех четырёх строках z = 0.
- Анализ столбца w:
- В выводе переменная w содержит ровно одну единицу (в строке
1 0 0 1), остальные три значения — нули. - В таблице задания в 1-м и 4-м столбцах уже стоят минимум по две единицы. Значит, переменная w располагается во 2-м столбце.
- В выводе переменная w содержит ровно одну единицу (в строке
- Определяем x и y:
- Посмотрим на 3-ю строку таблицы задания: там единицы стоят во 2-м (w) и 4-м столбцах.
- В нашей сгенерированной таблице есть единственная строка, где
w = 1— это наборx=1, y=0, z=0, w=1. В этой строке вторая единица принадлежит переменной x. Значит, 4-й столбец — это x. - Оставшийся 1-й столбец принадлежит переменной y.
- Посмотрим на 3-ю строку таблицы задания: там единицы стоят во 2-м (w) и 4-м столбцах.
Итоговый порядок столбцов: y w z x.
Ответ: ywzx
Пример 2. Функция принимает единичные значения (F = 1)
Условие:Логическая функция F задаётся выражением:(w → z) ∧ ((y → x) ≡ (z → y))
Дан фрагмент таблицы истинности для строк, где F = 1:
Определите порядок переменных w, x, y, z.
Решение через Python:
Python
print("x y z w")
for x in 0, 1:
for y in 0, 1:
for z in 0, 1:
for w in 0, 1:
f = (w <= z) and ((y <= x) == (z <= y))
if f == 1:
print(x, y, z, w)
Вывод программы:
x y z w
0 0 0 0
1 0 0 0
1 1 0 0
1 1 1 0
1 1 1 1
Анализ:
- В условии задачи в каждой строке есть как минимум один ноль и одна единица. Поэтому строки
0 0 0 0и1 1 1 1сразу исключаем. - Остаются 3 строки:
1 0 0 01 1 0 01 1 1 0
- Считаем количество единиц в столбцах:
- x — три единицы (1, 1, 1)
- y — две единицы (0, 1, 1)
- z — одна единица (0, 0, 1)
- w — все нули (0, 0, 0)
- x — три единицы (1, 1, 1)
- Сопоставляем с таблицей КИМ:
- В 1-м столбце две единицы и пустая клетка → это x (только у x три единицы).
- Во 2-м столбце два нуля и пустая клетка → это w (только у w все нули).
- В 3-й строке таблицы стоят значения:
1 (x) | 0 (w) | 0 | 1. В нашей рабочей строке с двумя единицами (1 1 0 0) единицами обладают x и y, а нулями — z и w. Значит, 4-й столбец — это y, а 3-й столбец — это z.
- В 1-м столбце две единицы и пустая клетка → это x (только у x три единицы).
Порядок столбцов: x w z y.
Ответ: xwzy
Пример 3. Полная автоматизация сопоставления через Python
Если вы хотите полностью исключить ручной перебор таблицы, можно использовать модуль itertools:
Python
from itertools import permutations, product
# Описываем логическую функцию
def f(x, y, z, w):
return ((x <= y) and (y <= w)) or (z == (x or y))
# Исходная таблица из КИМ (None — пустая ячейка)
table = [
(1, None, None, 1),
(None, None, None, None),
(None, 1, None, 1)
]
# Перебираем все возможные варианты порядка столбцов
for p in permutations('xyzw'):
# Генерируем варианты заполнения пустых ячеек
for row1 in product([0, 1], repeat=table[0].count(None)):
for row2 in product([0, 1], repeat=table[1].count(None)):
for row3 in product([0, 1], repeat=table[2].count(None)):
t = [list(table[0]), list(table[1]), list(table[2])]
# Заполняем пропуски
for row, fills in zip(t, [row1, row2, row3]):
idx = 0
for col in range(4):
if row[col] is None:
row[col] = fills[idx]
idx += 1
# Проверяем, что все строки уникальны
if len(set(tuple(r) for r in t)) == 3:
# Проверяем, что функция возвращает 0 для всех строк
if all(f(**dict(zip(p, row))) == 0 for row in t):
print("Ответ:", ''.join(p))
Этот скрипт самостоятельно заполнит пустые места и напечатает точный порядок букв: Ответ: ywzx.
5. Распространённые ловушки и частые ошибки
- Скобки при импликации:
- В Python конструкция
not x <= yсначала применит отрицание кx, а затем выполнит сравнение. Всегда обособляйте выражения:(x <= y)или((not x) or y).
- В Python конструкция
- Путаница условий
f == 0иf == 1:- Всегда сверяйтесь со столбцом функции F в бланке. Если там стоят нули, а в коде написать
if f == 1:, программа выведет строки противоположной функции.
- Всегда сверяйтесь со столбцом функции F в бланке. Если там стоят нули, а в коде написать
- Строки-дубликаты:
- В условии всегда сказано: «содержащий неповторяющиеся строки». Если при ручном сопоставлении у вас получаются две одинаковые строки, распределение переменных выполнено с ошибкой.
- В условии всегда сказано: «содержащий неповторяющиеся строки». Если при ручном сопоставлении у вас получаются две одинаковые строки, распределение переменных выполнено с ошибкой.
- Порядок переменных в
print:- В первой строчке кода всегда указывайте имена переменных в той же последовательности, в которой идут ваши циклы
for:print("x y z w")для циклов поx,y,z,w.
- В первой строчке кода всегда указывайте имена переменных в той же последовательности, в которой идут ваши циклы
Памятка для ученика
┌─────────────────────────────────────────────────────────────┐
│ ЧЕК-ЛИСТ ДЛЯ ЗАДАНИЯ №2 ЕГЭ │
├─────────────────────────────────────────────────────────────┤
│ 1. Переписать функцию на Python: │
│ • A → B заменяем на (A <= B) │
│ • A ≡ B заменяем на (A == B) │
│ 2. Проверить столбец F: отбираем нули (0) или единицы (1)? │
│ 3. Запустить перебор через 4 вложенных цикла. │
│ 4. Подсчитать количество 0 и 1 по столбцам вывода. │
│ 5. Сопоставить уникальные столбцы с таблицей КИМ. │
│ 6. Записать 4 буквы ответа подряд без пробелов. │
└─────────────────────────────────────────────────────────────┘