S. Таблица истинности 2

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

Формат ввода

Вводится логическое выражение от нескольких переменных валидное для языка Python.

Формат вывода

Выведите таблицу истинности данного выражения.

Примечание

В выражении все переменные заданы заглавными латинскими буквами.
Обратите внимание на параметры __globals и __locals у функции eval.

Пример

Ввод

not A or B and C

Вывод

A B C F
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 0
1 1 1 1

Ввод

A and not B and A

Вывод

A B F
0 0 0
0 1 0
1 0 1
1 1 0

Решение

Развитие предыдущей задачи. Разница состоит в том, что в выражении могут встречаться не все заявленные ранее переменные, а это значит, что нам надо придумать алгоритм разбора строки для поиска имен переменных и строить словарь, содержащий только нужные нам переменные.

Посмотреть код

Решение

Python
from itertools import product

expression = input()

variables = [item for item in sorted(set(expression.split())) if item.isupper()]

length = len(variables)

print(*[v for v in variables], "F")

for values in product([False, True], repeat=length):
    globals = {key: value for key, value in zip(variables, values)}
    print(*[int(v) for v in values], int(eval(expression, globals)))
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии