Таблицы истинности в ЕГЭ по информатике: решаем задание 2 на Python
· 3 мин чтения · Редакция Skill Unit
Типичное задание: дано выражение с четырьмя переменными и фрагмент его таблицы истинности, а подписи столбцов стёрты. Нужно определить, какой столбец какой переменной соответствует. Вручную придётся перебирать варианты и легко запутаться. Программа проверяет все варианты за долю секунды.
Логика на Python
- И, ИЛИ, НЕ записываются как and, or, not.
- Импликация «если a, то b» это (not a) or b.
- Равносильность «a тогда и только тогда, когда b» это a == b.
- Исключающее ИЛИ это a != b.
- Чтобы результат был числом 0 или 1, оборачивайте его в int(...).
Пример задания
Логическая функция F задана выражением (x → y) ∧ (z ∨ ¬w) ∧ (y → w). Дан фрагмент таблицы истинности, в нём перечислены значения четырёх переменных в неизвестном порядке и значение F. Определите, какому столбцу какая переменная соответствует.
- Строка 1: 0, 0, 1, 0, F = 0.
- Строка 2: 1, 0, 1, 0, F = 1.
- Строка 3: 1, 0, 1, 1, F = 1.
from itertools import permutations
def F(x, y, z, w):
return int(((not x) or y) and (z or not w) and ((not y) or w))
rows = [
(0, 0, 1, 0, 0),
(1, 0, 1, 0, 1),
(1, 0, 1, 1, 1),
]
answers = []
for perm in permutations("xyzw"): # perm[i] — переменная в i-м столбце
ok = True
for *cols, f in rows:
v = dict(zip(perm, cols))
if F(v["x"], v["y"], v["z"], v["w"]) != f:
ok = False
break
if ok:
answers.append("".join(perm))
print(answers) # ['zxwy']Единственный вариант: zxwy. То есть первый столбец это z, второй x, третий w, четвёртый y. В ответе пишут буквы подряд в порядке столбцов.
Как это работает
Функция permutations из модуля itertools выдаёт все 24 порядка четырёх букв. Для каждого порядка мы присваиваем переменным значения из строки, считаем F и сравниваем с последним числом строки. Если все строки совпали, порядок подходит. Если подходит несколько порядков, значит, в условии ошибка или вы неверно записали выражение: в настоящих заданиях ответ единственный.
Полезная связанная задача: сколько наборов дают единицу
from itertools import product
count = sum(F(x, y, z, w) for x, y, z, w in product([0, 1], repeat=4))
print(count) # 5product([0, 1], repeat=4) перебирает все 16 наборов значений четырёх переменных. Сумма значений F даёт число наборов, при которых выражение истинно: для нашего выражения это 5.
Типичные ошибки
- Неверно записали импликацию: «a → b» нельзя писать как a or b.
- Забыли скобки: у not, and и or разный приоритет, лучше ставить скобки везде.
- Перепутали порядок: «столбец i содержит переменную перестановки i», а не наоборот.
- Не проверили, что подходит ровно один вариант.
- Ответ записали с пробелами или заглавными буквами, хотя в условии указан другой формат.
Как проверить себя
Возьмите три строки таблицы и убедитесь руками, что найденный порядок даёт нужные значения F. Одна ручная проверка защищает от ошибок в записи выражения.
В курсе «ЕГЭ по информатике» логике посвящён отдельный урок с практикой и проверкой ответов. Первые уроки бесплатные.
Хотите пройти путь на практике?
Курс «ЕГЭ по информатике»: короткие уроки, практические задания и проверка ответов. Первый урок бесплатно.
Смотреть курс