Python 返回None而不是False
我有一段代码,如果其中一个条件不满足,那么它应该在函数末尾返回false,但是输出总是说None,为什么Python 返回None而不是False,python,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,
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
最大和最小的功能是:
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
def最大值和最小值(num1、num2、num3):
最大=无
最小=无
如果(num1>=num2)和(num1>=num3):
如果num2=num1)和(num2>=num3):
如果num1=num1)和(num3>=num2):
如果num1对我来说,一眼就能看出check_max_和_minimable()的缩进是不正确的。然后,你不应该使用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()
def检查最大和最小()
案例1=最大和最小(17,1,6)
案例2=最大和最小(1,17,6)
案例3=最大和最小(1,1,2)
案例4=最大和最小(1,1,1)
案例5=最大的和最小的(-3,-4,0)
如果案例1==(17,1):
如果案例2==(17,1):
如果案例3==(2,1):
如果案例4==(1,1):
如果案例5==(0,-4):
返回真值
返回错误
def最大和最小值(num1、num2、num3):
"""
将3个数字作为参数并返回
其中最大的数字和最小的数字。
"""
最大=无
最小=无
如果(num1>=num2)和(num1>=num3):
如果num2=num1)和(num2>=num3):
如果num1=num1)和(num3>=num2):
如果num1考虑如果case1
为真,而case2
为假会发生什么
假设如果梯形图缩进是您想要的,那么只有案例1
不正确时才返回false,但是如果案例1
为true,并且任何其他情况都为false,则代码不会返回任何结果。尝试以下操作:
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
对于最小/最大函数,请尝试以下方法:
def minmax(*x):
return min(x),max(x)
在任何情况下,你都可以写
a < b < c
a
而不是
a<b and b<c
a原因是使用了else
:只要选中第一个if
语句,其他情况下就没有else
,因此函数只返回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
或者,更好的是,使用它检查所有iterable项,并在其中一项不为True
时返回False
,这意味着函数将在发生这种情况时停止计算以下项:
return all((case1 == (17, 1), case2 == (17, 1), case3 == (2, 1),
case4 == (1, 1), case5 == (0, -4)))
请修复缩进。有一个max
和min
函数。您能告诉我在“如果情况”阶梯中您想做什么吗?您不允许使用内置的max
和min
?那最大和最小的函数太可怕了。是的,我知道最小和最大的函数,但我就是不能使用它。所以我应该为每种情况都设置一个else返回False吗?一行不能超过79个字符,但感谢阅读注释。对于我来说,“if”阶梯看起来不太好。如果我们用“和”来压平它怎么办?请看我的答案作为参考。是的,使用和是更好的方法。但我想在这里透露一下else的用法。