[英]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.