本问题已经有最佳答案,请猛点这里访问。
在c中,我们可以使用&&(布尔和),如下所示:
int i = 5;
int ii = 10;
if(i == 5 && ii == 10) {
Console.WriteLine("i is 5, and ii is 10");
}
Console.ReadKey(true);
但是用python试试:
i = 5
ii = 10
if i == 5 && ii == 10:
print"i is 5 and ii is 10";
我得到一个错误:SyntaxError: invalid syntax。
如果我使用单个&,至少不会出现语法错误。如何在python中执行布尔值&&?
试试这个:
i = 5
ii = 10
if i == 5 and ii == 10:
print"i is 5 and ii is 10"
编辑:哦,你在最后一行不需要分号(编辑将其从我的代码中删除)。
如果我们想合并代码行,分号很有用。
不过,组合线条不是"Python式"的方式
正如罗德里戈所说,虽然你可以组合线条,但它不是"Python式的"。因为在这个特殊的例子中,分号根本没有作用,所以我对它的冗余性做了评论。我认为提问者对python来说是个新手,不想夸大我的答案,"pythonic"是什么,分号是什么。
如前所述,"&;"在python中执行按位和操作,就像在c中一样。and是相当于&&运算符的适当值。
由于我们处理的是布尔型(i == 5是True,ii == 10也是True,所以您可能会想,为什么这两种方法都不起作用(真值被视为整数仍然意味着真值,真值是真值),或者抛出异常(例如,禁止对布尔型执行位操作)。
原因是运算符优先级。"and操作符比==绑定得更松散,因此表达式"i==5 and ii==10相当于"EDOCX1〔13]
但是,按位&比"==优先级更高(因为您不希望像"a & 0xff == ch这样的表达式表示"a & (0xff == ch)这样的表达式),因此该表达式实际上被解释为:
if i == (5 & ii) == 10:
这就是使用python的操作符chaining的意思:i i和5的值等于i和10吗?显然,这永远不会是真的。
如果你用括号来强制优先级,你会得到(表面上)正确的答案,所以:
if (i==5) & (ii=10)
会导致报表被打印。但是,这是错误的,因为"EDOCX1"(0)与"EDOCX1"(1)有许多不同的语义(优先级、简短的推理、带有整型参数的行为等),所以幸运的是,您在这里抓住了这个问题,而不是被愚弄,直到它产生不那么明显的错误为止。
要使用的正确运算符是关键字"或"和"and",在您的示例中,正确的表示方法是:
if i == 5 and ii == 10:
print"i is 5 and ii is 10"
您可以在语言引用的"布尔操作"部分中引用详细信息。
每当我看到and时,我都会问我的括号。
您也可以将它们作为一对进行测试。
if (i,ii)==(5,10):
print"i is 5 and ii is 10"
我的书呆子想指出你应该说"tuple"而不是"couple",但我知道你的意思。:)
一对不是一对吗?
&用于位比较。用and代替。顺便说一句,在print语句的末尾不需要分号。
在python中,使用and而不是&&,如下所示:
#!/usr/bin/python
foo = True;
bar = True;
if foo and bar:
print"both are true";
印刷品:
both are true
更准确地说,我们将"&;&;"拼写为"and"。我们将"&;"拼写为"&;",在C和python中,它们执行的是位操作,而不是逻辑操作。
当然,你是对的。道歉。