返回None而不是False

时间:2019-11-12 19:11:21

标签: python

我有这段代码,如果不满足以下条件之一,则应在函数末尾返回false,但是输出始终显示None,为什么这样?

def check_largest_and_smallest():
    case1 = largest_and_smallest(17, 1, 6)
    case2 = largest_and_smallest(1, 16, 6)
    case3 = largest_and_smallest(1, 1, 2)
    case4 = largest_and_smallest(1, 1, 1)
    case5 = largest_and_smallest(-3, -4, 0)
    if case1 == (17, 1):
        if case2 == (17, 1):
            if case3 == (2, 1):
                if case4 == (1, 1):
                    if case5 == (0, -4):
                        return True
    else:
        return False

largest_and_smallest函数是:

def largest_and_smallest(num1, num2, num3):


    largest = None
    smallest = None

    if (num1 >= num2) and (num1 >= num3):
        if num2 <= num3:
            largest = num1
            smallest = num2
        else:
            largest = num1
            smallest = num3
    elif (num2 >= num1) and (num2 >= num3):
        if num1 <= num3:
            largest = num2
            smallest = num1
        else:
            largest = num2
            smallest = num3
    elif (num3 >= num1) and (num3 >= num2):
        if num1 <= num2:
            largest = num3
            smallest = num1
        else:
            largest = num3
            smallest = num2

    return largest, smallest

5 个答案:

答案 0 :(得分:3)

原因是由于使用了else:检查了第一个if语句后,其他情况下就没有else了,因此该函数只返回{{ 1}}。

None

一个简单的解决方法是仅返回False而不包含任何 case1 == (17, 1) case2 == (16, 1) if case1 == (17, 1): if case2 == (17, 1): # here case2 doesn't match, but there's no corresponding else! else: return False

else

或者更好的方法是,使用all(iterable)来检查所有可迭代项,并在其中之一不是 if case1 == (17, 1): if case2 == (17, 1): if case3 == (2, 1): if case4 == (1, 1): if case5 == (0, -4): return True return False 时返回False ,这意味着函数会在发生这种情况时停止评估以下各项:

True

答案 1 :(得分:2)

乍一看,对于我来说,check_largest_and_smallest()的缩进是不正确的。然后,您不应该使用else,只需最后返回即可满足您的预期逻辑。

def check_largest_and_smallest():
    case1 = largest_and_smallest(17, 1, 6)
    case2 = largest_and_smallest(1, 17, 6)
    case3 = largest_and_smallest(1, 1, 2)
    case4 = largest_and_smallest(1, 1, 1)
    case5 = largest_and_smallest(-3, -4, 0)
    if case1 == (17, 1):
        if case2 == (17, 1):
            if case3 == (2, 1):
                if case4 == (1, 1):
                    if case5 == (0, -4):
                        return True

    return False

def largest_and_smallest(num1, num2, num3):
    """
    Takes 3 numbers as arguments and returns
    the largest number and smallest number among them.
    """
    largest = None
    smallest = None

    if (num1 >= num2) and (num1 >= num3):
        if num2 <= num3:
            largest = num1
            smallest = num2
        else:
            largest = num1
            smallest = num3
    elif (num2 >= num1) and (num2 >= num3):
        if num1 <= num3:
            largest = num2
            smallest = num1
        else:
            largest = num2
            smallest = num3
    elif (num3 >= num1) and (num3 >= num2):
        if num1 <= num2:
            largest = num3
            smallest = num1
        else:
            largest = num3
            smallest = num2

    return largest, smallest


check_largest_and_smallest()

答案 2 :(得分:0)

考虑如果case1为真,但case2不是,会发生什么情况。

假设您要使用if阶梯缩进,则仅当case1不为真,而case1为真且其他情况为真时,才返回false否,您的代码什么也不返回。

答案 3 :(得分:0)

尝试一下:

if case1 == (17, 1) and case2 == (17, 1) \
      and case3 == (2, 1) \
      and case4 == (1, 1) \
      and case5 == (0, -4):
    return True
else:
    return False

答案 4 :(得分:0)

对于最小/最大功能,请尝试以下方法:

def minmax(*x):
    return min(x),max(x)

在任何情况下,您都可以随时写

a < b < c

代替

a<b and b<c