Статья Автор: Деникина Н.В., Деникин А.В.

КЕГЭ. Вопрос 2. Построение и анализ таблиц истинности (программное решение на языке Python)

Задача

Логическая функция F задаётся выражением:

(x ∨ y) ∧ ¬(y ≡ z) ∧ ¬w

На рисунке приведён частично заполненный фрагмент таблицы истинности функции F, содержащий неповторяющиеся строки:

? ? ? ? F
1   1   1
0 1   0 1
  1 1 0 1

Определите, какому столбцу таблицы истинности функции F соответствует каждая из переменных x, y, z, w.

Программное решение на языке программирования Python (построение таблицы истинности)

Поскольку во время компьютерного экзамена есть возможность использовать среды программирования, для построения частичной таблицы истинности (всех строк, при которых F=1) можно написать переборную программу на Python.

Реализация перебора

Перебор выполняем во вложенном цикле:

# Перебор всех возможных комбинаций значений переменных
print('x y z w F')
for x in 0, 1:
    for y in 0, 1:
        for z in 0, 1:
            for w in 0, 1:
                # Вычисление значения логической функции F
                F = (x or y) and not (y == z) and not w

                # Вывод только тех комбинаций, где F истинно
                if F:
                    print(x, y, z, w, int(F))

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

Логическая операция Математическое обозначение Python-оператор
Конъюнкция (И) and или *
Дизъюнкция (ИЛИ) or
Отрицание (НЕ) ¬ not()
Тождество ==
Строгая дизъюнкция (исключающее ИЛИ) !=
Импликация not a or b или a <= b

 

Результаты выполнения программы

После запуска программы получаем все интересующие нас строки:

x y z w F
0 1 0 0 1
1 0 1 0 1
1 1 0 0 1

Сопоставление с исходными данными

Сравниваем полученные результаты с исходной таблицей (аналогично аналитическому решению):

? ? ? ? F
1   1   1
0 1   0 1
  1 1 0 1

При сравнении таблиц старайтесь искать отличия строк друг от друга, а также столбцов (смотрите на количество нулей и единиц в столбцах и строках)

Ответ: \(\boxed{zyxw}\)
Для удобства перебора всех комбинаций используем функцию product из модуля itertools:
from itertools import product
                
Полная программа
from itertools import product

print('x y z w | F')
for x, y, z, w in product([0, 1], repeat=4):
    F = (x or y) and not (y == z) and not w
    if F:  # Выводим только строки, где F=True
        print(x, y, z, w, '|', int(F))
Подробнее о функции product
Печать