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

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

提问人:ihavenoidea 提问时间:11/25/2020 更新时间:11/25/2020 访问量:152

问:

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

考虑下面的伪代码:

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

A和 是布尔条件(在我的实际问题中返回布尔值的函数 - 它们的实现并不重要)。我需要将整个结构浓缩成一个单一的结构。BCif-elif-else-if-elseif-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     |
|-------|-------|-------|----------|
if-语句 逻辑 式布尔 运算 真值表

评论

1赞 dxiv 11/25/2020
另一种方式:.return B or not(A or C) ? 'y' : 'n'
1赞 VLAZ 11/25/2020
仅供参考:如果你有桌子,这就是它最小化的方式。我转换了 , , , .这是主页 - 选择一个包含您拥有的布尔条件数量的表,表达您希望输出的内容(、、或无关紧要),您可以获得最小化形式。T=1F=0y=1n=010x

答:

1赞 alaniv 11/25/2020 #1

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

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