R. Таблица истинности

Вся современная электронно-вычислительная техника строится на Булевой алгебре, которая оперирует истинностью и ложностью высказываний. Любой язык программирования содержит логические операции (в Python это andornot).

Чаще всего для работы со сложными высказываниями прибегают к методу под названием «Таблица истинности».
Суть метода проста — рассматриваются все возможные значения входных переменных и для них вычисляется результат.

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

Формат ввода

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

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

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

Примечание

Для выполнения Python кода, записанного в строках, существуют две замечательные функции: exec и 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 c

Вывод

a b c f
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 0

Решение

Достаточно простая задача. Необходимо с помощью product() подготовить различные каобинации значений переменных a, b и c и в цикле передать их вместе с выражением в качестве аргументов функции eval(). Полученый для каждого набора данных результат вывести в таблицу.

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

Решение

Python
from itertools import product

expression = input()
print('a b c f')
for a, b, c in product([0, 1], repeat=3):
    print(a, b, c, int(eval(expression, {'a': a, 'b': b, 'c': c})))
Подписаться
Уведомить о
guest
4 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Niccck
30.11.2023 08:30

мне хватило
print(a, b, c, int(eval(s)))

в каких случаях может понадобится правильный вариант??

nmalkam
Ответить на  Сергей Клочко
05.12.2023 05:24

И в дополнение, прошу прощения замечание, но стоит все же давать переменным хорошие имена. И если a, b, c в этой ситуации интуитивны, то s в остальном коде – совсем нет.

Абсолютно с вами согласен.
В моей ситуации я понимаю что я мог хотя бы написать string.
Мне хотелось бы использовать expression, далее я так и сделал.
Проблема в том, что правильное наименование тратит время и силы.
сейчас во время обучения я позволяю себе абстрактное именование.
Прошу подсказать прав ли я?
В моём виденье мне легче после написания кода причесать его, в том числе изменив имена.
Хотя понимаю что при написании кода будет легче ориентироваться.
Нежели используя s1, s2….

Буду заводить словарик с возможными названиями))
Expression
Token
Result
Hash
Count

Последний раз редактировалось 1 год назад nmalkam ем