嵌套if else

时间:2017-02-01 23:06:47

标签: python if-statement

如何以更好的方式完成嵌套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"

4 个答案:

答案 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 != 1b != 2,则会出现这种情况。在另一种情况下,它会打印"run car()"。所以:

if a != 1 or b != 2:
    print "run dozer()"
else:
    print "run car()"