Решение задания №2 ЕГЭ по информатике на Python — пошаговый разбор
В задании логические операции обозначаются специальными символами. Вот таблица соответствия с написанием в коде Python:
Возьмем конкретное задание из ЕГЭ:
Логическая функция F задаётся выражением:
((x → y) ∧ (y → w)) ∨ (z ≡ (x ∨ y))
Вот код, который выводит полную таблицу истинности функции:
print("w x y z F")
for w in (0, 1):
for x in (0, 1):
for y in (0, 1):
for z in (0, 1):
f = ((x <= y) and (y <= w)) or (z == (x or y))
print(w, x, y, z, int(f)) Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F:
Добавим в код условие что бы выводить только строки, где F = 0, потому что в таблице из условия именно такие строки.
print("w x y z F")
for w in (0, 1):
for x in (0, 1):
for y in (0, 1):
for z in (0, 1):
f = ((x <= y) and (y <= w)) or (z == (x or y))
if f == False: # <- Добавили условие
print(w, x, y, z, int(f)) Результат работы программы:
Шаг 1. Смотрим на столбец z. В выводе у него везде 0. Значит, z — это Переменная 3 (потому что в задании именно у третьего столбца нет единиц). Записываем:
Шаг 2. Теперь смотрим на строки. В выводе программы нет ни одной строки с тремя единицами. Максимум — две единицы.
В таблице из условия в первой строке уже есть две единицы (в 1-м и 4-м столбцах), а в третьей строке — тоже две (во 2-м и 4-м). Если бы на месте ... стояла 1, получилась бы строка с тремя единицами.
Но таких строк в выводе нет. Значит, на месте ... в первой и третьей строках точно стоят нули:
Шаг 3. Теперь смотрим, какие строки остались в выводе программы.
В выводе у нас есть:
Вторая строка таблицы пока не заполнена. В ней уже есть одна единица в 1-м столбце. Значит, это строка с одной единицей.
Если бы на месте ... стояла 1, получилась бы строка с двумя единицами. Но строки с двумя единицами уже заняты — это первая и третья строки таблицы. Значит, во второй строке на месте ... тоже нули:
Шаг 4. Сравниваем столбец Переменная 2 в нашей таблице и столбцы в выводе.
В нашей таблице у Переменной 2 только одна единица (в третьей строке).
В выводе только у w одна единица (в четвертой строке). У всех остальных переменных (x и y) единиц больше.
Значит, Переменная 2 = w.
Шаг 5. Четвёртая строка вывода — единственная, где w = 1. В этой строке также x = 1.
В нашей таблице третья строка — единственная, где Переменная 2 = 1 (а это w). В этой строке единица также стоит в Переменной 4.
Значит, Переменная 4 = x.
Шаг 6. Остаётся Переменная 1 — это y. Итоговый порядок: ywzx
Чтобы решить любое задание №2, нужно изменить одну строку в коде — ту, где вычисляется f.
Пример 1: (x → y) ∧ (z → x)
f = (x <= y) and (z <= x) Пример 2: (x ∧ y) → (z ∨ x)
f = (x and y) <= (z or x) Пример 3: (x ∨ y) → (¬z ∧ x)
f = (x or y) <= ((not z) and x) Пример 4: (x ∧ ¬y) ∨ (y ≡ z) ∨ ¬w
f = (x and not y) or (y == z) or (not w) А что, если в выражении есть ¬ (отрицание целого выражения)?
Бывает, что отрицание стоит перед всем выражением, например:
¬(((x → y) ∧ (y → w)) ∨ (z ≡ (x ∨ y)))
В этом случае просто оборачиваем всё в not:
f = not (((x <= y) and (y <= w)) or (z == (x or y))) Задание №2 можно решить на Python всего за 5–10 строк кода. Это:
В этой статье я показал готовое решение, но если вы хотите понять, как работают циклы for, что такое range() и как устроены логические операции в Python, у меня есть отдельные подробные статьи:
🔹 Циклы for и range() — как они работают и зачем нужны (скоро)
🔹 Логические операции в Python — and, or, not и их приоритет (скоро)
Я — Олег Алексеевич, репетитор по информатике. Готовлю к ЕГЭ более 15 лет.
На своих занятиях мы:
Хотите попробовать? Запишитесь на первое занятие — познакомимся, определим ваш уровень и составим план подготовки.
Переходите на мой сайт, чтобы узнать подробности и записаться: Репетиторы рядом