Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 与0进行比较时出现异常_Python_Python 3.x_Numbers_Boolean_Zero - Fatal编程技术网

Python 与0进行比较时出现异常

Python 与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表达

嘿,我的问题很基本,当我在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表达式(在
表达式中点击单个
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()
来说明布尔值。我误解了你的答案,抱歉打扰了。没问题;如果存在错误,我当然不介意指出错误:)。