if-statement - 将 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 = True
C = 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 A or ( C and not B): return 'n' else: return 'y'
从逻辑表开始,使用布尔属性
推荐阅读
- knockout.js - 为什么我在 viewModel 中的函数在文档就绪时被调用?
- android - 如何忽略 android volley http 请求上的 ssl 错误?
- python - 查找数据帧是否是另一个数据帧的子集,同时忽略索引
- php - 无法将正确的“语音文件(mp3)”插入数据库
- python - 根据其他数据帧中的索引列表从其他数据帧向数据帧添加新列
- react-native - 是否有某种方法可以在带有 expo 的暂停应用程序上运行任务?
- java - 简单的 ESAPI 目录路径验证示例不起作用
- swift - AudioKit 自动启用麦克风捕获
- mysql - 非唯一表
- php - 如何将子节点的 XML 值放入数组并返回该数组?