jpt*_*jpt 4 python conditional combinations if-statement
因此,基于4个条件变量,我要执行一系列操作-假设x,y,z和t。这些变量中的每一个都有可能的True或False值。因此,总共有16种可能的排列。而且我需要针对每个排列执行不同的操作。
什么是做到这一点的最佳方法,而不是进行庞大的if-else构造。
让我们看一个简化的例子。如果我尝试将所有不同的排列包含到一个大型的if-else结构中,这就是我的代码的样子。
if (x == True):
if (y == True):
if (z == True):
if (t == True):
print ("Case 1")
else:
print ("Case 2")
else:
if (t == True):
print ("Case 3")
else:
print ("Case 4")
else:
if (z == True):
if (t == True):
print ("Case 5")
else:
print ("Case 6")
else:
if (t == True):
print ("Case 7")
else:
print ("Case 8")
else:
if (y == True):
if (z == True):
if (t == True):
print ("Case 9")
else:
print ("Case 10")
else:
if (t == True):
print ("Case 11")
else:
print ("Case 12")
else:
if (z == True):
if (t == True):
print ("Case 13")
else:
print ("Case 14")
else:
if (t == True):
print ("Case 15")
else:
print ("Case 16")
Run Code Online (Sandbox Code Playgroud)
有什么办法可以简化吗?显然,对于每种情况,我的目标都比仅打印“案例1”更为复杂。
您可以使用案例映射到结果:
cases = { (True, True, True, True): "Case 1",
(True, True, True, False): "Case 2",
(True, True, False, True): "Case 3",
(True, True, False, False):"Case 4",
(True, False, True, True): "Case 5",
(True, False, True, False):"Case 6",
(True, False, False, True): "Case 7",
(True, False, False, False):"Case 8",
(False, True, True, True): "Case 9",
(False, True, True, False):"Case 10",
(False, True, False, True): "Case 11",
(False, True, False, False):"Case 12",
(False, False, True, True): "Case 13",
(False, False, True, False):"Case 14",
(False, False, False, True): "Case 15",
(False, False, False, False):"Case 16"}
print(cases[(x,y,z,t])
Run Code Online (Sandbox Code Playgroud)
如果您想针对每种情况执行其他操作/不同操作,则可以向该映射添加函数。
cases = { (True, True, True, True): foo_func,
(True, True, True, False): bar_func,
...}
result = cases[(x,y,x,t)](*args)
Run Code Online (Sandbox Code Playgroud)
您也可以使用一种掩蔽解决方案来缩短代码,或者如果您要写出的案例过多,但是对于较小的案例集,此显式表示将更清晰并且更易于维护。
| 归档时间: |
|
| 查看次数: |
220 次 |
| 最近记录: |