如何在Python中使用boolean’和’

How to use boolean 'and' in Python

本问题已经有最佳答案,请猛点这里访问。

在c中,我们可以使用&&(布尔和),如下所示:

1
2
3
4
5
6
int i = 5;
int ii = 10;
if(i == 5 && ii == 10) {
    Console.WriteLine("i is 5, and ii is 10");
}
Console.ReadKey(true);

但是用python试试:

1
2
3
4
i = 5
ii = 10
if i == 5 && ii == 10:
    print"i is 5 and ii is 10";

我得到一个错误:SyntaxError: invalid syntax

如果我使用单个&,至少不会出现语法错误。如何在python中执行布尔值&&


试试这个:

1
2
3
4
i = 5
ii = 10
if i == 5 and ii == 10:
      print"i is 5 and ii is 10"

编辑:哦,你在最后一行不需要分号(编辑将其从我的代码中删除)。


如前所述,"&;"在python中执行按位和操作,就像在c中一样。and是相当于&&运算符的适当值。

由于我们处理的是布尔型(i == 5Trueii == 10也是True,所以您可能会想,为什么这两种方法都不起作用(真值被视为整数仍然意味着真值,真值是真值),或者抛出异常(例如,禁止对布尔型执行位操作)。

原因是运算符优先级。"and操作符比==绑定得更松散,因此表达式"i==5 and ii==10相当于"EDOCX1〔13]

但是,按位&比"==优先级更高(因为您不希望像"a & 0xff == ch这样的表达式表示"a & (0xff == ch)这样的表达式),因此该表达式实际上被解释为:

1
if i == (5 & ii) == 10:

这就是使用python的操作符chaining的意思:i i和5的值等于i和10吗?显然,这永远不会是真的。

如果你用括号来强制优先级,你会得到(表面上)正确的答案,所以:

1
if (i==5) & (ii=10)

会导致报表被打印。但是,这是错误的,因为"EDOCX1"(0)与"EDOCX1"(1)有许多不同的语义(优先级、简短的推理、带有整型参数的行为等),所以幸运的是,您在这里抓住了这个问题,而不是被愚弄,直到它产生不那么明显的错误为止。


要使用的正确运算符是关键字"或"和"and",在您的示例中,正确的表示方法是:

1
2
if i == 5 and ii == 10:
    print"i is 5 and ii is 10"

您可以在语言引用的"布尔操作"部分中引用详细信息。


您也可以将它们作为一对进行测试。

1
2
if (i,ii)==(5,10):
    print"i is 5 and ii is 10"


&用于位比较。用and代替。顺便说一句,在print语句的末尾不需要分号。


在python中,使用and而不是&&,如下所示:

1
2
3
4
5
#!/usr/bin/python
foo = True;
bar = True;
if foo and bar:
    print"both are true";

印刷品:

1
both are true