【问题标题】:How to use boolean 'and' in Python [duplicate]如何在 Python 中使用布尔“和”[重复]
【发布时间】:2010-10-11 05:34:25
【问题描述】:

在 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 中处理布尔值&&

【问题讨论】:

    标签: python boolean-logic


    【解决方案1】:

    试试这个:

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

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

    【讨论】:

    • 如果我们想组合代码行,分号很有用。
    • 虽然合并行不是“pythonic”方式
    • 虽然你可以组合线条,正如罗德里戈所说,它不是“pythonic”。由于在这种特殊情况下,分号根本没有任何作用,我对它的冗余发表了评论。我认为提问者是 python 的新手,不想夸大我的回答关于什么是“pythonic”以及分号的作用。
    【解决方案2】:

    正如所指出的,python 中的“&”执行按位与操作,就像它在 C# 中一样。 and&& 运算符的适当等效项。

    由于我们正在处理布尔值(i == 5Trueii == 10 也是 True),您可能想知道为什么这无论如何都不起作用(True 被视为整数应该仍然表示 True & True 是一个 True 值),或抛出异常(例如,通过禁止对布尔类型进行按位运算)

    原因是运算符优先级。 “and”运算符的绑定比== 更松散,因此表达式:“i==5 and ii==10”等价于:“(i==5) and (ii==10)

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

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

    这是使用python的运算符链接来表示:ii的值与5是否等于i和10。显然这永远不会是真的。

    如果你包含括号来强制优先级,你实际上会得到(看似)正确的答案,所以:

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

    将导致打印语句。然而,这是错误的做法——“&”与“and”有许多不同的语义——(优先级、短路、整数参数的行为等),所以很幸运你在这里发现了这一点而不是被被愚弄,直到它产生不那么明显的错误。

    【讨论】:

      【解决方案3】:

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

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

      详情可参考"Boolean Operations" section in the language reference

      【讨论】:

      • 每当我看到 and 时,我都会为我的括号找到答案
      【解决方案4】:

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

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

      【讨论】:

      • 我的书呆子想指出你应该说“元组”而不是“夫妇”,但我知道你的意思。 :)
      • 一对不是元组吗?
      【解决方案5】:

      & 用于逐位比较。请改用and。顺便说一句,您不需要在 print 语句的末尾使用分号。

      【讨论】:

        【解决方案6】:

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

        #!/usr/bin/python
        foo = True;
        bar = True;
        if foo and bar:
            print "both are true";
        

        打印出来:

        both are true
        

        【讨论】:

        • 更准确地说,我们将“&&”拼写为“and”。我们将“&”拼写为“&”,因为在 C# 和 python 中它们执行的是按位而不是逻辑和操作。
        • 你是对的,当然。道歉。
        猜你喜欢
        • 1970-01-01
        • 2023-03-11
        • 2010-12-17
        • 1970-01-01
        • 2015-08-04
        • 1970-01-01
        • 2016-11-21
        • 2016-07-17
        • 2020-08-14
        相关资源
        最近更新 更多