处理嵌套梯形图python

时间:2020-04-30 19:07:05

标签: python dictionary if-statement nested-if flow-control

我在字典中有一些带有布尔值的条件

d = { 
        "statement01" = True,
        "statement02" = True, 
        "statement03" = False, 
        "statement04" = False, 
        "statement05" = False
    }

我使用if elif

方法1

if d["statement05"]:
        if d["statement01"]:
                func01()
                func05()
elif d["statement04"]:
        if d["statement01"]:
                func01()
                func04()
elif d["statement03"]:
        if d["statement01"]:
                func01()
                func03()
elif d["statement02"]:
        if d["statement01"]:
                func01()
                func02()
elif not d["statement01"]:
        if d["statement05"]:
                func05()
        elif d["statement04"]:
                func04()
        elif d["statement03"]:
                func03()
        elif d["statement02"]:
                func02()
        else:
                func01x()

方法2

if d["statement01"]:
        func01()
        if d["statement02"]:
                func02()
        elif d["statement03"]:
                func03()
        elif d["statement04"]:
                func04()
        elif d["statement05"]:
                func05()
elif not d["statement01"]:
        if d["statement02"]:
                func02()
        elif d["statement03"]:
                func03()
        elif d["statement04"]:
                func04()
        elif d["statement05"]:
                func05()
        else:
                func01x()

d条件下,我希望结果是 做func01()func02()

但是如果条件字典类似

d2 = { 
        "statement01" = True,
        "statement02" = False, 
        "statement03" = False, 
        "statement04" = False, 
        "statement05" = False
    }

我希望只做func01() 如果字典像

d3 = { 
        "statement01" = False,
        "statement02" = True, 
        "statement03" = False, 
        "statement04" = False, 
        "statement05" = False
    }

只能func02()

有人可以用if else方法提供其他/最佳方式来处理条件和预期结果吗?

2 个答案:

答案 0 :(得分:0)

if d["statement01"]:
        func01()

if d["statement02"]:
        func02()
elif d["statement03"]:
        func03()
elif d["statement04"]:
        func04()
elif d["statement05"]:
        func05()
elif not d["statement01"]:
    func01x()

答案 1 :(得分:0)

您的方法2完全可以,只是您可以将elif not d["statement01"]:替换为else:。但是,如果您的条件列表较长,则可能需要按如下顺序使用

controls = [("statement02", func02),
            ("statement03", func03),
            ("statement04", func04),
            ("statement05", func05) ]

if d["statement01"]:
        func01()

for s, f in controls:
    if d[s]: 
         f()
         break
else:
    if not d["statement01"]:
        func01x()