【问题标题】:True and 'True' in python conditionpython条件下的True和'True'
【发布时间】:2009-12-17 16:14:21
【问题描述】:

如果:

x = 0
b = x==0

我打印b,它会打印'true'

但如果我这样做了:

x = 0  
b = x ==3

我打印了b,那将是错误的。 我将如何使用布尔值 b 来打印我想要的文本,而不是打印 false?

让我进一步解释:

bool = all(n > 0 for n in list) 

if bool != 'True':
    print 'a value is not greater than zero'

但它什么也没打印?

【问题讨论】:

  • -1:请不要使用内置类型名称(boollist),就好像它们是变量名称一样。请使用独特的变量名称。

标签: python syntax boolean


【解决方案1】:

你的意思是这样的吗?

x = 0
if x != 3:
    print "x does not equal 3"

【讨论】:

  • 虽然很好,但问题变了;也许这不再合适了。
【解决方案2】:

我认为以下内容可能有助于减轻您的一些困惑:

>>> 0==0
True
>>> 'True'
'True'
>>> (0==0) == 'True'
False
>>> (0==0) == True
True

【讨论】:

    【解决方案3】:

    正如其他答案所暗示的那样,if 语句是一种可能性(您可以添加一个else 子句来打印每种情况下的特定内容)。更直接的是if/else 运营商

    print('equality' if b else 'diversity')
    

    您也可以使用索引,因为 False 的 int 值为 0,而 True 的 int 值为 1:

    print(['different', 'the same'][b])
    

    但我发现它比 if 变体的可读性差一些。

    【讨论】:

      【解决方案4】:

      去掉True周围的引号:

      bool = all(n > 0 for n in list) 
      
      if bool != True:
          print 'a value is not greater than zero'
      

      或者,您也可以查看False

      bool = all(n > 0 for n in list) 
      
      if bool == False:
          print 'a value is not greater than zero'
      

      还有其他几种“捷径”的书写方式,但既然您是初学者,请不要过度混淆主题。

      【讨论】:

        【解决方案5】:
        >>> x = 0
        >>> if not x == 3: print 'x does not equal 3'
        x does not equal 3
        

        让我进一步解释:

        >>> list = [-1, 1, 2, 3]
        >>> if not all(n > 0 for n in list): print 'a value is not greater than zero'
        a value is not greater than zero
        
        # => or shorter ...
        >>> if min(list) < 0: print 'a value is not greater than zero'
        a value is not greater than zero
        

        请注意,list 是内置函数,不应用作变量名。

        >>> list
        <type 'list'>
        >>> list = [1, 2, "value not greater than 0"]
        >>> list
        [1, 2, "value not greater than 0"]
        >>> del list
        >>> list
        <type 'list'>
        ...
        

        【讨论】:

          【解决方案6】:
          a = lambda b :("not true","true")[b == 3]
          print a(3)
          

          如果你想把它放在lambda 中,会为你做。

          【讨论】:

          • 这是我在OP进一步解释问题时想到的第一件事。
          • 如果 OP 不确定如何正确使用布尔变量,lambdas 的概念可能有点高级。
          • 在我看来,他对布尔值理解得很好,但对它们与字符串的关系以及赋值感到困惑。
          【解决方案7】:

          您需要自己进行打印,正如这里每个人所建议的那样。

          值得注意的是,某些语言(例如 Scala、Ruby、Groovy)具有使您能够编写的语言功能:

          x should be(3)
          

          这将报告:

          0 should be 3 but is not.
          

          在 Groovy 中,使用 Spock testing framework,您可以编写:

          def "my test":
            when: x = 0
            expect: x == 3
          

          那会输出:

          条件不满足:

          x == 3
          | |  |
          0 |  3
           false
          

          我认为这在 python 中可能不是很干净。

          【讨论】:

            【解决方案8】:
            >>> 'True' is not True
            True
            

            'True' 是一个字符串

            True 是一个布尔值

            除了巧合之外,他们彼此没有任何关系。字符串值恰好与布尔文字具有相同的字母。但这只是巧合。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2021-11-07
              • 1970-01-01
              • 2020-12-10
              • 2019-11-28
              • 2015-07-28
              • 1970-01-01
              • 2016-05-16
              相关资源
              最近更新 更多