令人难以置信的Python布尔特性

1 投票
3 回答
859 浏览
提问于 2025-04-16 09:45
>>> a = False
>>> b = False
>>> a | b
True
>>> a
True
>>> b
True

我在Python解释器中遇到了这个问题。

我觉得不太对。有没有关于Python 布尔类型的详细资料呢?

我使用的是Python 2.6.6,谢谢!

3 个回答

2

| 是 Python 中的位或运算符。

如果你在做条件判断,应该使用 or 运算符:

>>> a = False
>>> b = False
>>> a or b
False
>>> a
False
>>> b
False

你可以在 这里 了解更多关于位运算符的信息。

补充说明:在运行你问题中提供的代码后,我得到的结果和你不一样……可能是你的安装有问题……

4

你的解释器出了点问题:

Python 2.7 (r27:82525, Jul  4 2010, 09:01:59) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> False | False
False
>>> a = False
>>> b = False
>>> a | b
False
7

我能想到的只有一种情况,你的问题才有意义:

>>> False = True
>>> a = False
>>> b = False
>>> a | b
True
>>> a
True
>>> b
True
>>> 

首先来调试一下 - 运行 print int(False) 的结果是什么?如果上面的情况发生了,你应该得到 1。试试这个:

>>> False = bool(0)
>>> a = False
>>> b = False
>>> a | b
False

至于为什么会发生这种情况 - 也许有人在捉弄你,改变了 False 的值(可以看看 这个回答)?我实在想不出还有什么其他原因会导致这种情况。你可以在需要的模块中把 False 设置为 bool(0),以防万一。

或者换用 Python 3,这样 TrueFalse 就是保留字,不能被改变。

撰写回答