使用 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")
是否有简单的方法来测试 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")