我有这段代码,如果不满足以下条件之一,则应在函数末尾返回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
答案 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