使用 7 个语句检查 3 个变量的 else 语句的更简单方法

Easier way to check if else statements of 3 variables with 7 statements

是否有简单的方法来测试 2 个变量和 3 个条件或 3 个变量和 7 个条件等等?

def checkXYZ():
    if x==1 and y==0 and z==0:
        doX()
    elif x==0 and y==1 and z==0:
        doY()
    elif x==0 and y==0 and z==1:
        doZ()

    elif x==1 and y==1 and z==0:
        doXY()
    elif x==0 and y==1 and z==1:
        doYZ()
    elif x==1 and y==0 and z==1:
        doXZ()

    elif x==1 and y==1 and z==1:
        doXYZ()

这是一个特定问题的答案,但您可以按如下方式实现 checkXYZ() 功能:

def checkXYZ():
    if x==1:
        print("x", end='')
    if y==1:
        print('y', end='')
    if z==1:
        print('z', end='')
    print()  # new line

x = 1
y = 0
z = 1
checkXYZ()

xz

print() 函数的

end 参数指定字符串末尾的最后一个字符。默认情况下,end='\n',但您可以将其设置为 '' 以避免放置换行符。

替代解决方案,灵感来自@Sujay 和@Yu-Sheng Li

a = b = y = z = 1
c = x = 0
variables = [a,b,c,x,y,z]
strs = "abcxyz"
print(''.join(s for var, s in zip(variables, strs) if var))

abyz


实现方法:


def doA():
    pass
def doB():
    pass
def doC():
    pass
def doAB():
    pass
def doAC():
    print("AC")
def doBC():
    pass
def doABC():
    pass
    
dict_ = {'a' : doA, 'b': doB, 'c': doC, 'ab': doAB, 'ac': doAC, 'bc': doBC, 'abc': doABC}
variables = [a,b,c]
strs = "abc"
b = 0
a = c = 1
dict_[''.join(s for var, s in zip(variables, strs) if var)]()

AC

已编辑:运行 方法(尽管不推荐 exec

def check_vars(variables, strs, prefix="do"):
    method = prefix + "".join(s for var, s in zip(variables, strs) if var)
    exec(f"{method}()")

# in your case
check_vars([x, y, z], "XYZ")

一般解决方案:

def check_vars(variables, strs):
    ans = ""
    for var, s in zip(variables, strs):
        if var:
            ans += s
    print(ans)

# in your case
check_vars([x, y, z], "xyz")