#if-statement #boolean-logic #boolean-expression #boolean-operations #truthtable
#оператор if #логическая логика #логическое выражение #логические операции #таблица истинности
Вопрос:
Для меня это не было бы проблемой, если бы это была «обычная» программа, однако я работаю с синтезом программ, и у меня должен быть код как можно более компактный.
Рассмотрим приведенный ниже псевдокод:
if A:
return 'n'
elif B:
return 'y'
else:
if C:
return 'n'
else:
return 'y'
A
, B
и C
являются логическими условиями (функции, которые возвращают логическое значение в моей реальной проблеме — их реализации не важны). Мне нужно, чтобы вся эта if-elif-else-if-else
структура была сведена в единую if-else
структуру.
Самое близкое, что я получил, было:
if A or C:
return 'n'
else:
return 'y'
Однако для одного тестового примера, где A = False
, B = True
, C = True
: он возвращает 'n'
вместо 'y'
.
Правильная таблица истинности приведена ниже для справки.
|-------|-------|-------|----------|
| A | B | C | Result |
|-------|-------|-------|----------|
| T | T | T | n |
|-------|-------|-------|----------|
| T | T | F | n |
|-------|-------|-------|----------|
| T | F | T | n |
|-------|-------|-------|----------|
| T | F | F | n |
|-------|-------|-------|----------|
| F | T | T | y |
|-------|-------|-------|----------|
| F | T | F | y |
|-------|-------|-------|----------|
| F | F | T | n |
|-------|-------|-------|----------|
| F | F | F | y |
|-------|-------|-------|----------|
Комментарии:
1. Другой способ:
return B or not(A or C) ? 'y' : 'n'
.2. К вашему сведению: если у вас есть таблица, именно так она сводится к минимуму . Я преобразовал
T=1
,F=0
,y=1
,n=0
. Это главная страница — выберите таблицу с количеством логических условий, которые у вас есть, укажите, какими должны быть выходные данные (1
,0
, илиx
для не имеет значения), и вы можете получить минимизированную форму.
Ответ №1:
если A или (C, а не B): вернуть ‘n’ else: вернуть ‘y’
Начните с логической таблицы и используйте логические свойства