繁体   English   中英

返回 None 而不是 False

[英]Return None instead of False

如果不满足其中一个条件,我有这段代码应该在 function 的末尾返回 false,但是 output 一直说无,为什么会这样?

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

原因是由于使用了else :一旦检查了第一个if语句,其他情况就没有else ,所以 function 只返回None

    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

一个简单的解决方法是只返回 False 而没有其他任何else

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

或者,更好的是,使用all( iterable )检查所有可迭代项并在其中一项不为True时立即返回False ,这意味着 function 将在发生这种情况时停止评估以下项:

    return all((case1 == (17, 1), case2 == (17, 1), case3 == (2, 1),
        case4 == (1, 1), case5 == (0, -4)))

乍一看,对我来说, check_largest_and_smallest() 的缩进是不正确的。 然后,你不应该使用 else,只要 return 最终会满足你的预期逻辑。

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()

考虑一下如果case1为真但case2不是会发生什么。

假设if梯形缩进是您想要的,那么您只会在case1不为真时返回 false,但如果case1为真且任何其他案例为假,则您的代码不会返回任何内容。

尝试这个:

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

对于最小/最大 function,请尝试以下方式:

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

无论如何,你总是可以写

a < b < c

代替

a<b and b<c
 if check_largest_and_smallest == False:
        print ("false") 
 else:
        print ("true")

有了它,您还可以检查 Boolean 的值:) 我喜欢我还可以了解 Python 如何与这样的询问一起工作。 所以感谢ppl。 解决了它:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM