Упростить условную структуру if-elif-else-if-else в единую if-else

#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’

Начните с логической таблицы и используйте логические свойства