【发布时间】:2021-03-07 22:54:05
【问题描述】:
如果这是一个“常规”程序,这对我来说不是问题,但是我正在处理程序综合,我必须有一个尽可能紧凑的代码。
考虑下面的伪代码:
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 |
|-------|-------|-------|----------|
【问题讨论】:
-
另一种方式:
return B or not(A or C) ? 'y' : 'n'. -
仅供参考:如果您有桌子this is how it minimises。我转换了
T=1、F=0、y=1、n=0。 This is the main page - 选择一个包含您拥有的布尔条件数量的表格,表达您想要的输出(1、0或x无关紧要),您可以获得最小化的形式.
标签: if-statement boolean-logic boolean-expression boolean-operations truthtable