如何在Python中使用boolean'和'

43 python boolean-logic

在C#中我们可以&&像这样使用(boolean和):

int i = 5;
int ii = 10;
if(i == 5 && ii == 10) {
    Console.WriteLine("i is 5, and ii is 10");
}
Console.ReadKey(true);
Run Code Online (Sandbox Code Playgroud)

但尝试使用python:

i = 5
ii = 10
if i == 5 && ii == 10:
    print "i is 5 and ii is 10";      
Run Code Online (Sandbox Code Playgroud)

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

如果我使用单个&,至少我没有语法错误.我如何&&在Python中执行布尔值?

Miz*_*zor 68

试试这个:

i = 5
ii = 10
if i == 5 and ii == 10:
      print "i is 5 and ii is 10"
Run Code Online (Sandbox Code Playgroud)

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


Bri*_*ian 27

正如所指出的,python中的"&"执行按位和操作,就像在C#中一样.and是适当的&&运营商等价物.

既然我们正在处理布尔值(i == 5Trueii == 10也是True),你可能想知道为什么这个都没有工作(真的被视为整数量应该仍然意味着True和True是一个真值),或抛出异常(例如,通过禁止对布尔类型的按位运算

原因是运算符优先级." and"运算符的绑定比松散==,因此表达式:" i==5 and ii==10"相当于:" (i==5) and (ii==10)"

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

if i == (5 & ii) == 10:
Run Code Online (Sandbox Code Playgroud)

哪个使用python的运算符链接意味着:ii和5的值是否等于i和10.显然这将永远不会成立.

如果您使用括号来强制优先级,那么您实际上会得到(看似)正确的答案,因此:

if (i==5) & (ii=10)
Run Code Online (Sandbox Code Playgroud)

会导致声明打印.这是错误的做法,但是 - " &"有许多不同的语义来表达" and" - (优先级,短暂的cirtuiting,带有整数参数的行为等),所以幸运的是你在这里抓住了这个而不是被愚弄直到它产生不那么明显错误.


Seh*_*ong 15

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

if i == 5 and ii == 10:
    print "i is 5 and ii is 10"
Run Code Online (Sandbox Code Playgroud)

您可以在语言参考"布尔运算"部分中查阅详细信息.


ful*_*ton 7

您也可以将它们作为一对来测试.

if (i,ii)==(5,10):
    print "i is 5 and ii is 10"
Run Code Online (Sandbox Code Playgroud)


Sil*_*ost 6

&用于逐位比较.使用and来代替.顺便说一句,在print语句结束时你不需要分号.


Tim*_*ger 6

在python中,使用and而不是&&这样:

#!/usr/bin/python
foo = True;
bar = True;
if foo and bar:
    print "both are true";
Run Code Online (Sandbox Code Playgroud)

这打印:

both are true
Run Code Online (Sandbox Code Playgroud)