【问题标题】:Simplify if-elif-else-if-else conditional structure into a single if-else将 if-elif-else-if-else 条件结构简化为单个 if-else
【发布时间】:2021-03-07 22:54:05
【问题描述】:

如果这是一个“常规”程序,这对我来说不是问题,但是我正在处理程序综合,我必须有一个尽可能紧凑的代码。

考虑下面的伪代码:

if A:
    return 'n'
elif B:
    return 'y'
else:
    if C:
        return 'n'
    else:
        return 'y'

ABC 是布尔条件(在我的实际问题中返回布尔值的函数 - 它们的实现并不重要)。我需要将整个if-elif-else-if-else 结构压缩成一个if-else 结构。

我得到的最接近的是:

if A or C:
    return 'n'
else:
    return 'y'

但是,对于 A = FalseB = TrueC = 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=1F=0y=1n=0This is the main page - 选择一个包含您拥有的布尔条件数量的表格,表达您想要的输出(10x 无关紧要),您可以获得最小化的形式.

标签: if-statement boolean-logic boolean-expression boolean-operations truthtable


【解决方案1】:

如果 A 或 ( C 而不是 B): 返回'n' 别的: 返回'y'

从逻辑表开始,使用布尔属性

【讨论】: