将if-elif-else-if-else条件结构简化为一个if-else

Simplify if-elif-else-if-else conditional structure into a single if-else

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

考虑下面的伪代码:

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

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

我得到的最接近的是:

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

但是,对于 A = FalseB = TrueC = True 的单个测试用例,它失败了:它 returns 'n' 而不是 'y'.

正确的道理table如下所示,供参考。

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

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

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