簡體   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