如何以更好的方式完成嵌套if else?
我想尽量减少print "run dozer()"
print "some mechanical stuffs before this"
if a == 1:
if b == 2:
print "run car()"
else:
print "run dozer()"
else:
print "run dozer()"
print "more mechanical stuffs after this"
答案 0 :(得分:6)
if a == 1 and b == 2:
print "run car()"
else:
print "run dozer()"
答案 1 :(得分:1)
在这种情况下,这可能不是一个好主意,但您可以通过所有(预期)案例运行代码(0
表示不是1
a
而不是{{} {1}} 2
}:
b
这为您提供了所有组合的列表:
for a in (0, 1):
for b in (0, 2):
print('a = ', a, ', b = ', b, sep='')
if a == 1:
if b == 2:
print("run car()")
else:
print("run dozer()")
else:
print("run dozer()")
这会为您提供应触发a = 0, b = 0
run dozer()
a = 0, b = 2
run dozer()
a = 1, b = 0
run dozer()
a = 1, b = 2
run car()
:run car
的组合列表。一种解决方案是使用元组比较:
a=1, b=2
在这种情况下,这是非常简单的,但是对于更复杂,更深层次的嵌套if (a, b) == (1, 2):
print('run car')
else:
print('run dozer')
,更多变量,更多情况(或者如果您只是想要),这种方法可能非常合理好奇: - ))
答案 2 :(得分:1)
您可以在一行中编写相同的逻辑:
if
由于Python将print "run car()" if a == 1 and b == 2 else "run dozer()"
/ True
视为0和1.您可以使用这些布尔值作为索引从元组中获取字符串:
False
(此答案的灵感来自TemporalWolf的评论)
为了进一步减少代码,您可以将字符串格式设置为:
print ("run dozer()", "run car()")[(a, b) == (1, 2)]
但不要这样做。它与前一个相比不具备可读性。
编辑:根据 TemporalWolf(伟大观察家)的另一条评论,自print "run %sr()" % ("doze", "ca")[(a, b) == (1, 2)]
# OR, via using `str.format()`
# print "run {}r()".format(("doze", "ca")[(a, b) == (1, 2)])
和a=1
以来;这可以放在单个布尔条件中:b=2
。因此,此代码可以进一步减少到 39字节:
0<a<b<3
答案 3 :(得分:0)
出现两次的唯一代码片段是"run dozer()"
,因此我们可以对打印的情况进行分析:如果是a != 1
或b != 2
,则会出现这种情况。在另一种情况下,它会打印"run car()"
。所以:
if a != 1 or b != 2:
print "run dozer()"
else:
print "run car()"