多个 if 条件,无嵌套

Posted

技术标签:

【中文标题】多个 if 条件,无嵌套【英文标题】:Multiple if conditions, without nesting 【发布时间】:2020-02-25 09:44:38 【问题描述】:

下面有一段示例代码,我需要一些帮助。代码在开始时将“结果”变量设置为 False,并且只有在满足所有“if”条件时才应变为 True。有没有更有效的方法来做到这一点?我试图避免嵌套的“if”语句。

谢谢!

    outcome = False

    while True:
        if a != b:
            print("Error - 01")
            break

        if a["test_1"] != "test_value":
            print("Error - 02")
            break

        if "test_2" not in a:
            print("Error - 03")
            break

        if a["test_3"] == "is long data string":
            print("Error - 04")
            break

        outcome = True
        break

【问题讨论】:

我认为这里的可读性比性能更重要,但我可能错了。 performance if statement and statement and statement : 你试过这个吗? 我可以使用“和”,但每个条件都需要特定的错误代码。 :( @RaymondC。 This is probably related 为什么所有这些都在 while 循环中? ab 都没有变化... 【参考方案1】:

我会这样写,所以函数一旦遇到错误就结束,最可能的错误应该在最上面,如果遇到那个错误,它会返回 False 并结束函数。否则,它将检查所有其他错误,然后最终得出结论,结果确实为 True。

# testOutcome returns a boolean
outcome = testOutcome(a,b)

# Expects a and b
# Breaks out of the function call once error happens
def testOutcome(a,b):
    # Most likely error goes here
    if a != b:
        print("Error - 01")
        return False

    # Followed by second most likely error
    elif a["test_1"] != "test_value":
         print("Error - 02")
         return False

    # Followed by third most likely error
    elif "test_2" not in a:
         print("Error - 03")
         return False

    # Least likely Error
    elif a["test_3"] == "is long data string":
         print("Error - 04")
         return False

    else:
        return True

【讨论】:

有趣,我没有这样想。谢谢:)【参考方案2】:

或者其他方式:

    outcome = True

    if a != b:
        print("Error - 01")
        outcome &= False

    if a["test_1"] != "test_value":
        print("Error - 02")
        outcome &= False

    if "test_2" not in a:
        print("Error - 03")
        outcome &= False

    if a["test_3"] == "is long data string":
        print("Error - 04")
        outcome &= False

【讨论】:

您好,很抱歉回复晚了。只是想说声谢谢:) 问题:你为什么使用 &= 而不是 = ? 哦,我弄复杂了,你可以改用=。谢谢【参考方案3】:

根据用户请求执行此操作的最黑客方式,但不推荐, 如果您只是想了解它们,那么有很多方法可以使用结构。 转换为列表后,可以使用 zip 或列表理解等函数 使用列表来保持位置不变。

a = 'test_1' : "test_value", 'test_4' : "None", 'test_3' : "long data string"
b = 'test_1' : "test_value", 'test_4' : "None", 'test_3' : "long data string"

# storing bool values, expecting True
test1 =  [a==b,"test_2" in a,a["test_1"] == "test_value", a["test_3"] != "is long data string" ]

# storing error codes for False conditions 
result = ["Error - 01", "Error - 02", "Error - 03", "Error - 04"]

if False in test1:
    print(result[int(test1.index(False))])
else:
    print(True)
Error - 02

[Program finished]

【讨论】:

以上是关于多个 if 条件,无嵌套的主要内容,如果未能解决你的问题,请参考以下文章

表格中IF函数如何判断多个条件

excel中if函数怎么用有多个条件,多个结果

shell的awk中用if..else,怎么多条件嵌套

if嵌套和elif的区别

excel中的if嵌套和ifs哪个计算起来更快?

java多层if嵌套怎么优化