Python 有人知道如何区分重复的if/else结构吗?

Python 有人知道如何区分重复的if/else结构吗?,python,functional-programming,Python,Functional Programming,我有表单中的代码 if scenarioOne: actionC elif scenarioTwo: if B: actionB else: actionC else: if A: actionA elif B: actionB else: actionC 有代码重复,但我不知道如何解决它。一个选项是(predicate,lambda)对的列表,然后我可以在

我有表单中的代码

if scenarioOne:
    actionC
elif scenarioTwo:
    if B:
         actionB
    else:
         actionC
else:
    if A:
         actionA
    elif B:
         actionB
    else:
         actionC
有代码重复,但我不知道如何解决它。一个选项是
(predicate,lambda)
对的
列表
,然后我可以在列表上迭代以找到第一个计算结果为true的谓词并执行相应的操作。我会将
actionC
与一个始终为真的谓词配对。不确定是否有更好的方法,不管是Python还是函数式语言。

试试这样的方法:)


好吧,也许这不是最能说明问题的例子,但我会把它作为一个例子放在这里。 卡诺图是一个强大的工具来简化二进制函数,可以应用于许多类似的情况

TLDR:

这是真相表。行为AB值,列为场景一(s1)+场景二(s2)

首先,三个动作是独占的,完全覆盖了输入空间。 现在,第一个表:两个1在一起,可以表示为:

A = !s1 !s2 A
第二张桌子:两对

B = !s1 s2 B | !s1 !A B = !s1 B (!A | s2)

余下的是C,但是如果我们需要公式,则有三个元素:右行的一半、最上面的行和对的中间行:

C = s1 | !A !B | A !B s2 = s1 | !B (s2 | !A)

您可能会发现这很有用:。我将简短地添加一个示例使用。如果你的目标是可读性,我不确定你能做得更好@“马拉特的解决方案很酷,但很难读懂,”埃劳表示同意。只是想展示一下工具
A = !s1 !s2 A
B = !s1 s2 B | !s1 !A B = !s1 B (!A | s2)
C = s1 | !A !B | A !B s2 = s1 | !B (s2 | !A)