gpt4 book ai didi

python - 组合条件语句排列的最佳方法

转载 作者:太空狗 更新时间:2023-10-30 02:07:03 24 4
gpt4 key购买 nike

所以,我有一系列的 Action 要执行,基于 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")

有什么办法可以简化这个吗?显然,我对每个案例的目标都比打印“案例 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])

如果您想为每种情况做其他事情/不同的事情,您可以向该映射添加一个函数。

cases = { (True,  True,  True,  True):  foo_func,
(True, True, True, False): bar_func,
...}

result = cases[(x,y,x,t)](*args)

您还可以使用其中一种掩码解决方案来缩短代码,或者如果您有太多案例要写出来,但对于较小的案例集,这种显式表示将更清晰且更易于维护。

关于python - 组合条件语句排列的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55422804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com