为什么我没有得到布尔值?

时间:2015-03-04 03:20:23

标签: python operators boolean-expression

>>> 'a' in 'aeiou' or 'steve'
True
>>> 'S' in 'Sam' and 'Steve'
'Steve'
>>> 'a' in 'aeiou' and 'steve'
'steve'
>>> 's' in 'aeiou' or 'AEIOU'
'AEIOU'

我正在为一些学生上课,并对最后三项输出感到惊讶。我期待一个布尔值。任何人都可以对此有所了解吗?

5 个答案:

答案 0 :(得分:5)

布尔操作

  1. x或y |如果x为假,则为y,否则为x

    演示

    >>> 0 or 1
    1
    >>> 0 or 0
    0
    
    1. x和y |如果x为假,则为x,否则为y

      演示

      >>> 0 and 1
      0
      >>> 1 and 0
      0
      >>> 1 and 1
      1
      >>> 
      

      注意:  如果他们的结果需要,他们只评估他们的第二个论点。


      1. 当条件满足时,这将返回True False

        演示:

        >>> "a" in "abc"
        True
        >>> "a" in "xyz"
        False
        >>> 
        

        关于我们的声明:

        1。'a' in 'aeiou'返回True值时,我们正在执行or操作,因此这将返回True,因为First(Left)表达式的值为True

        演示:

        >>> 'a' in 'aeiou'
        True
        >>> 'a' in 'aeiou' or 'steve'
        True
        >>> 
        

        2。'S' in 'Sam'返回True并且我们正在执行and操作时,这将从表达式中返回第二个值。

        演示:

        >>> 'S' in 'Sam'
        True
        >>> 'S' in 'Sam' and 'Steve'
        'Steve'
        >>> 
        

        3. 与第二句话相同。

        4。's' in 'aeiou'返回False并且我们正在执行or操作时,这将从表达式中返回第二个值。

        演示:

        >>> 's' in 'aeiou'
        False
        >>> 's' in 'aeiou' or 'AEIOU'
        'AEIOU'
        >>> 
        

答案 1 :(得分:4)

您的表达式会像这样评估

>>> ('a' in 'aeiou') or ('steve')
True
>>> ('S' in 'Sam') and ('Steve')
'Steve'
>>> ('a' in 'aeiou') and ('steve')
'steve'
>>> ('s' in 'aeiou') or ('AEIOU')
'AEIOU'

orand运算符,评估表达式并返回评估结果。

因此,or将首先评估LHSE(左手侧表达式),如果它是Truthy(见下文),它将立即返回评估结果(短路)。只有当它是Falsy(见下文)时,它才会评估并返回RHSE的结果。

同样地,and将评估LHSE,如果是Falsy,它将立即返回该值,否则它将返回RHSE的评估结果。

Truthy and Falsy

引用official documentation

  

在布尔运算的上下文中,以及控制流语句使用表达式时,以下值被解释为false:FalseNone,所有类型的数字零和空字符串和容器(包括字符串,元组,列表,字典,集合和frozensets)。所有其他值都被解释为true。

因此,在第一种情况下,('a' in 'aeiou')True,因此会立即返回True

在第二种情况下,('S' in 'Sam')False,因此它返回的评估结果('Steve')仅为Steve

在第三种情况下,('a' in 'aeiou')True,因此它会返回仅('steve')评估steve的结果。

在最后一种情况下,('s' in 'aeiou')False,因此它会返回评估('AEIOU')的结果,该结果仅为AEIOU

除此之外,您可以通过bool函数了解您的表达式是否真的是Truthy或Falsy,就像这样

>>> bool('a' in 'aeiou' or 'steve')
True
>>> bool('S' in 'Sam' and 'Steve')
True
>>> bool('a' in 'aeiou' and 'steve')
True
>>> bool('s' in 'aeiou' or 'AEIOU')
True

答案 2 :(得分:1)

由于:

'a' in somestring or 'steve'

被解释为:

('a' in somestring) or 'steve'

会向您True'steve'提供,具体取决于a是否在somestring中。它适用于'aeiou',但不适用于'xyzzy'

>>> 'a' in 'aeiou' or 'steve'
True
>>> 'a' in 'xyzzy' or 'steve'
'steve'

如果要检查字母是否在任何一个单词中,请使用:

('a' in 'aeiou') or ('a' in 'steve')

答案 3 :(得分:0)

我相信此页面会解释http://anh.cs.luc.edu/python/hands-on/3.1/handsonHtml/boolean.html。您正在运行有趣的BODMAS规则以及将逻辑运算应用于bool和字符串时会发生什么(字符串计算结果为true - https://docs.python.org/2/library/stdtypes.html)。

操作和订单都很重要:

  • ' S'和False = False #False,x始终为False
  • 错误'' =错误
  • ' S'或者False = s#False或x总是x
  • 错误或者是' = s
  • ' S'和True = True#!false和True = 2的最后一个
  • 真实' = s
  • ' S'或True = s#!false或True = 2的最后一个
  • 真或者' =真
  • ' S'和' a' =#!false和!false = 2的最后一个
  • ' S'或者' a' = s

答案 4 :(得分:0)

在Python中

  • 或:从左到右,如果value为boolean,如果value为true,则返回this或if value all false返回最后一项。 例如:False或3返回3,4或3返回3,''或False或 - 1返回-1。

  • 和:从左到右评估并返回最后一个值!=如果值为False,则为假或第一个值。

示例:

1和2以及3和4和5返回5:因为1,2,3,4,5都不是False然后返回最后一个值是5.

-1和3和4返回4; -1不是假; 3,4也不是假,然后返回最后一个。请记住,负值不是假:D。    0和3返回0. 0为False然后返回False

>>> 'a' in 'aeiou' or 'steve'
True
'aeiou'中的'a'不是假的; '史蒂夫'并非虚假 在或者操作符返回时,第一个值不是False,那么'aeiou'中的'a'是真的。

>>> 'S' in 'Sam' and 'Steve'
'Steve'
     'Sam'中的'S'是真的; '史蒂夫'并非虚假   在和操作符返回的最后一个值不是False这是'Steve'然后resule是'Steve'

>>> 'a' in 'aeiou' and 'steve'
'steve'
'aeiou'中的'a'是真的,'史蒂夫'不是假的 然后返回最后一个值不是False是'steve'

>>> 's' in 'aeiou' or 'AEIOU'
'AEIOU'
'aeiou'中的's'是假的; 'AEIOU'并非虚假 然后返回第一个值不是False是'AEIOU'

更多链接:http://www.diveintopython.net/power_of_introspection/and_or.html