非布尔变量的布尔运算

时间:2020-05-07 11:57:06

标签: python boolean boolean-logic boolean-expression

a = 5
b = -1
c = 2

print((c) and (b<0) and (a>0))

以下代码的输出为True。但是,(c) and (b<0)and不是用于or是整数的布尔型变量的含义吗?

3 个答案:

答案 0 :(得分:2)

在诸如C之类的语言中,没有布尔类型或值。而是使用整数代替它们。零为假,其他所有整数为真。

Python将其概括为 all 个值。的确,有一个布尔类型,但是它是int的子类,并且TrueFalse在字面上是1和{{ 1}}。通过调用0,可以将任何值转换为布尔值。

bool

值的“真实性”取决于它的类型,但是粗略地说,零和空的类似于容器的值是False,而其他所有值都是True。此外,>>> bool(5) True >>> bool(0) False >>> bool("foo"), bool([1,2,3]) True, True >>> bool(""), bool([]) False, False and不一定返回布尔值:

or

x and y == y if bool(x) else x x or y == x if bool(x) else y 用于确定bool是否正确,但结果是两个实际值xx之一。

使用与y的等价关系,我们可以将您的表达式评估为

and

我没有一次全部替换c and b<0 and a>0 == (b < 0 if bool(c) else c) and a > 0 == b < 0 if bool(2) else c) and a > 0 == (b < 0 if True else c) and a > 0 == b < 0 and a > 0 == a > 0 if bool(b < 0) else b < 0 == a > 0 if bool(-1 < 0) else b < 0 == a > 0 if bool(True) else b < 0 == a > 0 if True else b < 0 == a > 0 == 5 > 0 == True ab的值,因为cand和条件表达式是全部 lazy ;除非绝对必要,否则它们不会评估操作数,我们稍后将对此进行介绍。

如果更改or,则评估过程将产生c = 0的值,而不是c的布尔值。请注意,我们需要查看c的值,因为从未评估过a

a > 0

答案 1 :(得分:1)

在python中,可以测试任何对象的真值。对于数字类型,任何非零值都被视为true。您可以看到不同类型here的真值。

答案 2 :(得分:1)

当变量不是布尔变量并且您检查它是True还是False时,python检查此变量是否为None。

例如:

    a = 'any_value'
    print(a == True)

此语句显示True

但是:

    b = None
    print(a == True)

结果为False