Python 与0进行比较时出现异常
嘿,我的问题很基本,当我在Expression里玩的时候 3和3%3==False返回True 但是 0和0%3==False返回0 对于其他数字而不是0,结果要么为真,要么为假,但决不是0Python 与0进行比较时出现异常,python,python-3.x,numbers,boolean,zero,Python,Python 3.x,Numbers,Boolean,Zero,嘿,我的问题很基本,当我在Expression里玩的时候 3和3%3==False返回True 但是 0和0%3==False返回0 对于其他数字而不是0,结果要么为真,要么为假,但决不是0 我想知道是什么使0如此特殊。从所有整数中,0是唯一被计算为False的整数。事实上,False的值是0(您可以尝试print False+0)-因此您得到了第二个表达式的结果(X%Y==Z,即True/False) 任何其他整数和第一个参数都是返回的(int),因为和停止并返回第一个表达式false-y表达
我想知道是什么使0如此特殊。从所有整数中,0是唯一被计算为
False的整数。事实上,False
的值是0(您可以尝试print False+0
)-因此您得到了第二个表达式的结果(X%Y==Z
,即True
/False
)
任何其他整数和第一个参数都是返回的(int
),因为和停止并返回第一个表达式false-y表达式(在和表达式中点击单个false
,无需继续)。下一个表达式是什么并不重要,因为它从未被计算过。首先,3%3
等于0
。接下来,bool
是int
的一个子类,具有0==False
和1==True
。然后,您有3和3%3==False
,这是3和0==False
,这是3和True
3 and 3%3==False
3 and 0==False
3 and True
^ truthy
3 and True
^ returned
现在,我们只剩下短路的工作方式了:和
,如果第一个值为假,它将返回第一个值。如果第一个值为truthy,则返回第二个值。由于3
是truthy,因此它返回第二个值True
3 and 3%3==False
3 and 0==False
3 and True
^ truthy
3 and True
^ returned
对于下一个,0%3
与前一个中的0
相同,结果相同。但是,第一个值0
是一个错误的值,因此,由于它与和
组合,因此返回第一个值0
0 and 0%3==False
0 and 0==False
0 and True
^ falsey
0 and True
^ returned
TLDR:Python中的布尔运算符计算为明确确定其值的第一个值
那么,让我们看看3和3%3==False
,这相当于3和((3%3)==False)
。只有当两个值的布尔值均为True
时,和表达式的布尔值才为True
;否则,它的布尔值为False
。首先它检查3
,返回3
,该值的布尔值为True
(bool(3)
为True
)。然后检查(3%3)=False
,返回True
,当然它的布尔值为True
。现在,和
的右侧也显示了布尔值True
,这就是和
表达式“返回”的内容
0和0%3==False
返回0
的原因是首先检查了和表达式中的第一个值。由于第一个值是0
,它的布尔值为False
,因此无需检查和
表达式的其余部分。因此,和
表达式返回0
下面是一些代码:
>>> x = 5 or 3
>>> print(x)
5
>>>
>>> y = 0 and 7
>>> print(y)
0
>>>
>>> z = 1 and 7
>>> print(z)
7
@马库斯梅斯卡宁,我想你可能误解了我bool(something\u true and something\u true)==true
,bool(something\u true and something\u false)==false
。还有,你所说的“它与if
句子中的和不同”是什么意思?我只是用bool()
来说明布尔值。我误解了你的答案,抱歉打扰了。没问题;如果存在错误,我当然不介意指出错误:)。