多个 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
【问题讨论】:
我认为这里的可读性比性能更重要,但我可能错了。 performanceif statement and statement and statement :
你试过这个吗?
我可以使用“和”,但每个条件都需要特定的错误代码。 :(
@RaymondC。 This is probably related
为什么所有这些都在 while
循环中? a
和 b
都没有变化...
【参考方案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 条件,无嵌套的主要内容,如果未能解决你的问题,请参考以下文章