【问题标题】:Best way to simplify multiple conditional statements简化多个条件语句的最佳方法
【发布时间】:2021-01-24 11:50:43
【问题描述】:

根据 a、b、c、d 的值,我有一个要执行的操作,但每次有 16 种可能的排列时,我可能无法获得所有 4 个值,我可以获得 φ ,{a},{b },{c},{d},{a,b},{a,c},{a,d},{b,c},{b,d},{c,d},{a,b ,c},{a,b,d},{a,c,d},{b,c,d},{a,b,c,d}。

def call_me (a=None,b=None,c=None,d=None):
    if a:
        a1 = a+1
    if b:
        b1 = b+2
    if c:
        c1 = c+3
    if d:
        d1 = d+4
    if (a<a1) and (b<b1) and (c<c1) and (d<d1):
        #Do something 
        return "something"

如果我调用call_me(a = 1,b = 2,c = 3,d =4),程序会运行,但如果我调用call_me(a = 1,b = 2,c = 3),它会抛出错误UnboundLocalError: local variable 'd1' referenced before assignment

所以我能想到的唯一方法是覆盖所有组合 (2 ^ N)

if a and b and c and d:
    if (a<a1) and (b<b1) and (c<c1) and (d<d1):
        return "something 1"

if a and b and c:
    if (a<a1) and (b<b1) and (c<c1):
        return "something 2"

if a and b and d:
    if (a<a1) and (b<b1) and (d<d1):
        return "something 3"
#and so on... 

有什么方法可以通过不使用这么多的 if 语句来简化这一点?

【问题讨论】:

    标签: python if-statement


    【解决方案1】:

    您可以检查您使用该值的每个条件内部是否存在:

    if (a is None or a<a1) and (b is None or b<b1) and (c is None or c<c1) and (d is None or d<d1):
        # Do something
    

    这样,如果任何传递的值仍然是None,那么带括号的表达式将变为True,并且不会干扰其余的检查。


    另一种方法是在检查是否存在的同时检查与每个变量相关的条件,如果失败则提前退出:

    if a:
        a1 = a+1
        if not a<a1:
            return
    if b:
        # etc.
    
    # All conditions passed, do something. 
    

    【讨论】:

      猜你喜欢
      • 2011-11-28
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2019-08-20
      • 2013-04-01
      • 2016-07-26
      相关资源
      最近更新 更多