Погрузка вложенной лестницы python - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть несколько условий с логическим значением в словаре

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 голосов
/ 30 апреля 2020

Ваш метод 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()
0 голосов
/ 30 апреля 2020
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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...