如何在总共三个整数变量Python3中检查一个或两个整数是否为-1?

时间:2018-11-20 16:08:49

标签: python python-3.x if-statement

我有4个整数变量

r1, r2, c1, c2

它们可以是任何整数值。我想找出其中的一个是-1

规则为r1,并且r2不能同时为-1; c1c2不能同时为-1。

我可以使用if语句,但这可能很麻烦:

if r1 == -1:        
    if c1 == -1:
        # do action a
    elif c2 == -1:
        # do action b
    else:  # c1 and c2 are both not -1
        # do action c
elif r2 == -1:
    if c1 == -1:
        # do action d
    elif c2 == -1:
        # do action e
    else:  # c1 and c2 are both not -1
        # do action f 
else:  # none of the four integers is -1.
    # do action g

能否请您教我一些更优雅,更有效的算法?

2 个答案:

答案 0 :(得分:0)

我认为您在这里没有效率问题,但是您可以通过检查您明确提到的两种非法情况来提高可读性:

if r1 == -1 and r2 == -1:
    raise Exception("r1 & r2 are -1")
elif c1 == -1 and c2 == -1:
    raise Exception("c1 & c2 are -1")
else:
    print("ok!")

您有一些选择可以完全避免if / else(例如,一个字典,其键为(r1, r2, c1, c2)的元组,而您希望作为值调用的操作),但是我认为它们全都是可读性方面的净损失。

答案 1 :(得分:0)

根据您提到的规则,即r1 = r2 = -1和c1 = c2 = -1不会发生,我们可以假设在某些情况下,我们不需要执行所有四项检查来确定您的变量是否为-1。

为了利用这些规则,您需要具有一些反映变量顺序的数据结构,并能够跳过不需要的检查(例如,r1 = -1,而不需要检查r2)。

虽然这也许不是更有效的CPU时间方法,但它遵循的逻辑是,不必在每种情况下都执行所有变量检查:

d = {'r1' : 0, 'r2' : -1, 'c1' : -1, 'c2' : 0}

def isMinusOne(x):
    if x == -1:
        return x

i = 0
while i < len(d):
    if isMinusOne(list(d.values())[i]) is not None:
        print(list(d.keys())[i])
        if i == 0 or i == 2:
            i += 2
        else:
            i += 1
    else:
        i += 1