Главная › ЕГЭ по информатике › Задание 2
ЕГЭ по информатике · задание №2

Задание 2 ЕГЭ: таблицы истинности на Python

Переводим логическую формулу в код, заполняем пропуски и определяем порядок переменных. Пошаговый разбор, рабочий шаблон и практика.

Суть задания

Что нужно найти в таблице истинности

Даны логическая формула и несколько строк таблицы истинности. У столбцов переменных потеряны заголовки, часть клеток не заполнена. Нужно определить, в каком порядке по столбцам стоят переменные.

0 означает ложь, 1 — истину. Столбец F содержит результат вычисления формулы. В ответе нужны буквы переменных слева направо, например xwzy.

Что сделает PythonПереберёт значения пропусков и порядок переменных, проверит различие строк и сравнит вычисленные значения F с условием. Твоя задача — точно перенести формулу и таблицу.
Логические операции с нуля

Как переводить логические знаки на Python

В условииСмыслВ Python
¬AНЕ: меняет 0 на 1 и 1 на 0not A
A ∧ BИ: 1, только если оба значения равны 1A and B
A ∨ BИЛИ: 1, если хотя бы одно значение равно 1A or B
A → BИмпликация: 0 только при A = 1, B = 0A <= B для 0/1
A ≡ BРавносильность: 1 при одинаковых значенияхA == B
A ⊕ BСтрогая дизъюнкция: 1 при разных значенияхA != B

Проверочная таблица для двух переменных

AB¬AA ∧ BA ∨ BA → BA ≡ BA ⊕ B
00100110
01101101
10001001
11011110
Скобки важнее сокращенийПереноси структуру формулы со скобками. Составные части сравнения тоже заключай в скобки: например, (x <= y) and (y <= z). Запись x <= y <= z в Python — цепочка сравнений; она не означает вложенную импликацию. Знак = присваивает значение, а == сравнивает.

Замена импликации сравнением A <= B работает для логических значений 0 и 1. Смысл самой импликации также передаёт выражение (not A) or B.

Маленький пример

Как читать порядок столбцов

Пусть F = ¬x ∨ y, а единственная строка фрагмента имеет вид:

Столбец 1Столбец 2F
010

Чтобы ИЛИ давало 0, обе части должны равняться 0. Значит ¬x = 0, то есть x = 1; y = 0. В первом столбце стоит y, во втором — x. Ответ: yx.

В более объёмном примере ниже тот же поиск выполнит программа, проверяя сразу все данные строки.

Основной пример

Три строки, четыре переменные и четыре пропуска

Дан фрагмент из трёх различных строк таблицы истинности функции F. Заголовки столбцов переменных неизвестны. Определи порядок переменных x, y, z, w по столбцам.
F = (x ∧ ¬y) ∨ (y ≡ z) ∨ ¬w
Столбец 1Столбец 2Столбец 3Столбец 4F
0a1a200
01010
a310a40

В исходной таблице клетки a1, a2, a3, a4 пустые. Каждой пустой клетке дали отдельное имя: это четыре независимых значения 0 или 1.

Шаг 1. Переносим формулу

def f(x, y, z, w):
    return (x and not y) or (y == z) or not w

def создаёт функцию, return возвращает её результат. Первая часть проверяет x И НЕ y, вторая — совпадают ли y и z, третья — НЕ w. Между частями стоит ИЛИ.

Шаг 2. Перебираем пропуски

for a1, a2, a3, a4 in product([0, 1], repeat=4):
    tab = [(0, a1, a2, 0), (0, 1, 0, 1), (a3, 1, 0, a4)]

product проверит все 2⁴ = 16 заполнений. В tab входят только четыре столбца переменных: столбец F переносится отдельно. Числа и порядок строк сохраняем точно как в условии.

Шаг 3. Проверяем, что строки различны

if len(tab) == len(set(tab)):

len(tab) — число строк; set(tab) убирает повторы. Если все три строки разные, обе длины равны 3. Если две строки совпали, длина множества меньше и такое заполнение пропускаем.

Например, нельзя принять заполнение, в котором вторая и третья строки стали (0, 1, 0, 1): условие требует различные строки, даже если формула даёт на них нужный результат.

Шаг 4. Перебираем порядок переменных

for p in permutations('xyzw'):

Для четырёх разных букв есть 4! = 24 перестановки. Каждая перестановка задаёт один порядок заголовков сразу для всех строк. Менять заголовки отдельно для каждой строки нельзя.

Шаг 5. Связываем буквы со значениями

p = ('x', 'w', 'z', 'y')
row = (0, 1, 0, 1)
print(dict(zip(p, row)))
# {'x': 0, 'w': 1, 'z': 0, 'y': 1}

zip соединяет элементы попарно: первую букву с первым числом и так далее. dict собирает словарь. Две звёздочки в f(**dict(zip(p, row))) передают его значения в функцию по именам аргументов. Поэтому порядок аргументов в def f(x, y, z, w) не определяет ответ.

Шаг 6. Сравниваем значения F

values = [int(f(**dict(zip(p, row)))) for row in tab]
if values == [0, 0, 0]:
    answers.add(''.join(p))

Для каждой строки вычисляем формулу и переводим результат в 0 или 1 через int. Полученный список должен совпасть со столбцом F по порядку строк. Здесь справа [0, 0, 0], потому что все три значения F в условии нулевые.

''.join(p) соединяет буквы без разделителей. Множество answers сохраняет каждый подходящий порядок один раз.

Готовая программа

Полный код для примера на Python

Код запускается без ввода данных: формула и фрагмент таблицы уже записаны внутри. Он сразу печатает ответ в нужном формате.

from itertools import product, permutations

def f(x, y, z, w):
    return (x and not y) or (y == z) or not w

answers = set()
for a1, a2, a3, a4 in product([0, 1], repeat=4):
    tab = [(0, a1, a2, 0), (0, 1, 0, 1), (a3, 1, 0, a4)]
    if len(tab) == len(set(tab)):
        for p in permutations('xyzw'):
            values = [int(f(**dict(zip(p, row)))) for row in tab]
            if values == [0, 0, 0]:
                answers.add(''.join(p))

for answer in sorted(answers):
    print(answer)

Вывод программы

xwzy
Ответ: xwzyПервый столбец — x, второй — w, третий — z, четвёртый — y. В ответ записываем эти буквы подряд.

В варианте шаблона с print(p) вывод имеет вид ('x', 'w', 'z', 'y'). Это тот же порядок столбцов, но в ответ нужны только буквы.

Проверяем результат

Почему xwzy подходит ко всем строкам

Найденное заполнение: a1 = a2 = a3 = a4 = 1. Подпишем столбцы и проверим каждую строку.

xwzyx ∧ ¬yy ≡ z¬wF
01100000
01010000
11010000

Во всех строках три части формулы равны нулю, поэтому их ИЛИ тоже даёт 0. Все три набора различны. Перебор остальных заполнений и перестановок другого порядка столбцов не находит.

Проверка защищает от случайного совпаденияНужное значение F только в одной строке ещё не доказывает ответ. Один и тот же порядок букв должен подойти ко всему фрагменту.
Попробуй сам

Как формула получает 0 или 1

Выбери значения переменных: увидишь результат каждой части и итог всей формулы. В этой учебной таблице заголовки известны и идут в порядке x, y, z, w.

x ∧ ¬y0

y ≡ z1

¬w1

F1

При x = 0, y = 0, z = 0, w = 0 функция равна 1.

Полная таблица истинности формулы — 16 наборов
xyzwF
00001
00011
00101
00110
01001
01010
01101
01111
10001
10011
10101
10111
11001
11010
11101
11111

Если w = 0, часть ¬w равна 1, поэтому вся формула уже равна 1. Чтобы F была равна 0, все три части с ИЛИ должны равняться 0.

Для нового условия

Что менять в шаблоне задания 2

Часть программыЧто перенести из условия
def f(...) и returnИмена переменных и формулу с сохранением её структуры
product(..., repeat=...)Количество независимых пустых клеток; число имён a1, a2, … должно совпадать с repeat
tab = [...]Все данные строки, только столбцы переменных; для каждой пустой клетки отдельное имя
permutations('xyzw')Набор имён переменных из условия
values == [0, 0, 0]Значения F в порядке строк; если в условии 1, 0, 1, нужно [1, 0, 1]

Проверку различных строк сохраняем для такого же условия, как в примере. Если программа ничего не вывела или нашла несколько порядков, проверь формулу, перенос клеток, значения F и условие о различии строк. Не выбирай первую напечатанную строку наугад.

В архиве ниже есть дополнительный шаблон: пропуски в нём отмечаются как None, а их количество определяется автоматически. Это метка пустой клетки, а не логическое значение.

Проверь понимание

Практика по заданию 2 ЕГЭ

После ошибки можно изменить ответ и попробовать снова. Для ответов с буквами используй английскую раскладку.

Решено: 0 из 8

1. Отрицание

Чему равно not 0? Введи результат как 0 или 1.

2. Импликация

Чему равна импликация x → y при x = 1 и y = 0?

3. Четыре пропуска

В таблице четыре независимые пустые клетки. Сколько вариантов их заполнения нулями и единицами переберёт product([0, 1], repeat=4)?

4. Порядок переменных

Сколько перестановок четырёх различных переменных x, y, z, w проверит permutations?

5. Две одинаковые строки

Условие требует три различные строки. После подстановки пропусков две строки оказались одинаковыми. Можно ли оставить такой вариант? Введи «да» или «нет».

6. Как работает zip

Порядок столбцов xwzy, строка (0, 1, 0, 1). Чему равно y?

7. Проверка формулы

Для F = (x ∧ ¬y) ∨ (y ≡ z) ∨ ¬w подставь x = 0, y = 1, z = 0, w = 1. Чему равна F?

8. Формат экзаменационного ответа

Программа напечатала ('x', 'w', 'z', 'y'). Что нужно записать в ответ?

Видеоразбор

Видео по заданию №2

Видео скоро выйдет.

Скачать код для задания 2 ЕГЭ

В архиве три файла Python: готовый пример, адаптируемый шаблон с пропусками None и программа полной таблицы истинности.

Скачать код PythonВ README описано, как запустить файлы и что менять для нового условия.

Частые ошибки

  • Потерять отрицание, скобки или перепутать И с ИЛИ.
  • Записать присваивание = вместо сравнения ==.
  • Использовать одну переменную a1 для нескольких независимых пропусков.
  • Неверно указать repeat или забыть одно из имён пропусков.
  • Включить столбец F в строки tab.
  • Сравнивать со списком нулей, хотя в условии есть единицы.
  • Пропустить проверку различных строк.
  • Проверить разные строки с разными перестановками заголовков.
  • Переписать ответ в порядке аргументов функции вместо порядка столбцов.
  • Добавить в экзаменационный ответ скобки, пробелы, кавычки или запятые.

Вопросы о таблицах истинности

Почему в коде используются и product, и permutations?

product заполняет пустые клетки нулями и единицами, а permutations переставляет имена переменных по столбцам. Это две разные части перебора.

Зачем нужны кортежи строк и set(tab)?

В tab строки записаны кортежами, например (0, 1, 0, 1). Их можно поместить в множество set. Если кортеж повторяется, множество хранит его один раз: так проверяем условие о различных строках.

Почему Python иногда показывает True и False?

Это истина и ложь. Для вывода их можно преобразовать через int: True станет 1, False — 0. В полной программе сравниваем именно списки нулей и единиц.

Что делать, если в столбце F есть и нули, и единицы?

Перенести их в список сравнения в том же порядке строк. Например, для 1, 0, 1 требуется values == [1, 0, 1].

Где изучить Python и продолжить подготовку?

В учебнике на сайте можно изучить теорию программирования и полный разбор задания 2 ЕГЭ. Выбери ЕГЭ и нужный номер, затем закрепляй тему в практике.

Продолжи разбор в учебнике

Полная теория программирования и разбор задания 2 ЕГЭ находятся в учебнике на сайте. Разберись с Python и логическими операциями, затем переходи к самостоятельной практике.