将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'
A
、B
和 C
是布尔条件(在我的实际问题中 returns 是布尔值的函数 - 它们的实现并不重要)。我需要将整个 if-elif-else-if-else
结构压缩成一个 if-else
结构。
我得到的最接近的是:
if A or C:
return 'n'
else:
return 'y'
但是,对于 A = False
、B = True
、C = 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开始,并使用布尔属性
如果这是一个“常规”程序,这对我来说不是问题,但是我正在处理程序综合,我必须有一个尽可能紧凑的代码。
考虑下面的伪代码:
if A:
return 'n'
elif B:
return 'y'
else:
if C:
return 'n'
else:
return 'y'
A
、B
和 C
是布尔条件(在我的实际问题中 returns 是布尔值的函数 - 它们的实现并不重要)。我需要将整个 if-elif-else-if-else
结构压缩成一个 if-else
结构。
我得到的最接近的是:
if A or C:
return 'n'
else:
return 'y'
但是,对于 A = False
、B = True
、C = 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开始,并使用布尔属性