有人可以解释这里输出的差异吗?
Can some explain the difference in outputs here?
我目前正在 CodingBat 上进行如下练习:
给定 2 个 int 值,return 如果一个为负,一个为正,则为真。除非参数“negative”为 True,否则 return 只有当两者均为负数时才为真。
这是我的初步尝试:
def pos_neg(a, b, negative):
if negative:
if (a and b < 0):
return True
else:
return False
elif (a < 0 and b > 0) or (a > 0 and b < 0):
return True
else:
return False
CodingBat 然后输入值以查看您的代码是否正确执行,出于某种原因,唯一不会 运行 正确的输入是 (1,-1, True)。
第二次尝试:
def pos_neg(a, b, negative):
if negative:
if (a < 0) and (b < 0):
return True
else:
return False
elif (a < 0 and b > 0) or (a > 0 and b < 0):
return True
else:
return False
这次尝试没有问题所以它必须是第3行的变化。有人可以解释if (a and b <0)
和if (a < 0) and (b <0)
的区别吗?为什么 (1,-1, true) 的输入会破坏它?
if a and b < 0
在功能上等同于写作
if a:
if b < 0:
# do something
相对于if a < 0 and b < 0
,后者在功能上等同于写作
if a < 0:
if b < 0:
# do something
原因是表达式 a and b
正在做布尔逻辑测试 a
和 b
return 真值
当给定整数时,它会将 0 视为假,将任何其他值视为真。
表达式实际上 return 最后计算的值所以
1 and 0
> 0
1 and 1
> 1
1 and -1
> -1
-1 and 1
> 1
if a and b < 0:
上面检查 a
的真实值并且 b
小于 0。a
被设置为任何不是 Falsy 的值 (None, ‘’, []
)将使它成为Truthy。也就是说,上面相当于if bool(a) == True and b < 0:
您修改后的行解决了需要对两个变量都进行负数检查的问题。
if a < 0 and b < 0:
我目前正在 CodingBat 上进行如下练习:
给定 2 个 int 值,return 如果一个为负,一个为正,则为真。除非参数“negative”为 True,否则 return 只有当两者均为负数时才为真。
这是我的初步尝试:
def pos_neg(a, b, negative):
if negative:
if (a and b < 0):
return True
else:
return False
elif (a < 0 and b > 0) or (a > 0 and b < 0):
return True
else:
return False
CodingBat 然后输入值以查看您的代码是否正确执行,出于某种原因,唯一不会 运行 正确的输入是 (1,-1, True)。
第二次尝试:
def pos_neg(a, b, negative):
if negative:
if (a < 0) and (b < 0):
return True
else:
return False
elif (a < 0 and b > 0) or (a > 0 and b < 0):
return True
else:
return False
这次尝试没有问题所以它必须是第3行的变化。有人可以解释if (a and b <0)
和if (a < 0) and (b <0)
的区别吗?为什么 (1,-1, true) 的输入会破坏它?
if a and b < 0
在功能上等同于写作
if a:
if b < 0:
# do something
相对于if a < 0 and b < 0
,后者在功能上等同于写作
if a < 0:
if b < 0:
# do something
原因是表达式 a and b
正在做布尔逻辑测试 a
和 b
return 真值
当给定整数时,它会将 0 视为假,将任何其他值视为真。
表达式实际上 return 最后计算的值所以
1 and 0
> 0
1 and 1
> 1
1 and -1
> -1
-1 and 1
> 1
if a and b < 0:
上面检查 a
的真实值并且 b
小于 0。a
被设置为任何不是 Falsy 的值 (None, ‘’, []
)将使它成为Truthy。也就是说,上面相当于if bool(a) == True and b < 0:
您修改后的行解决了需要对两个变量都进行负数检查的问题。
if a < 0 and b < 0: