-2

I have some multiple condition with boolean in dictionary

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

And I use if elif

Method 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()

Method 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()

With d condition I expect the result is do func01() and func02()

but if condition dictionary like

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

I expect only do func01() and if the dictionary like

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

Only do func02()

Is anyone can give other/best way to handle condition and expected result or maybe not in if else method?

2 Answers2

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()
0

Your method 2 is quite OK, except that you can replace elif not d["statement01"]: with just else:. However, if your list of condition is longer, probably using something like this would be in order:

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()
Błotosmętek
  • 12,717
  • 19
  • 29