首页 > 解决方案 > 将 if-elif-else-if-else 条件结构简化为单个 if-else

问题描述

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

考虑下面的伪代码:

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

标签: if-statementboolean-logicboolean-expressionboolean-operationstruthtable

解决方案


if A or ( C and not B): return 'n' else: return 'y'

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


推荐阅读