Python中的条件

时间:2017-12-28 20:33:03

标签: python

我很难理解这个逻辑:

>>> text = 'ay_118724981.jpg'
>>> 'jpg' in text
True
>>> 'png' in text
False
>>> if 'png' not in text or 'jpg' not in text or 'jpeg' not in text:
...     print('True')
... else:
...     print('False')
... 
True
>>> 

我很困惑'因为if声明会导致错误,因为' jpg' 在文中。当文本中没有任何内容时,它应该给我True only 。正确吗?

2 个答案:

答案 0 :(得分:3)

它解析为('png' not in text) or ('jpg' not in text) or ('jpeg' not in text)

其中一个条件为真('png'不在text中),因此它的计算结果为true。您可以使用and

获得您期望的行为

答案 1 :(得分:0)

  

我很困惑[因为] if语句应该导致False,因为'jpg'在文本中。它只有在文本中没有一个时才能给我真实。正确吗?

不,如果操作数中的一个或两个or,则True运算符为True。所以从现在起,'jpg'不在文本中,或'png'不在文本中,或者jpeg不在文本中,测试成功

您想要的是and运算符。 x and y为True,仅当两个操作数(xy)不在文本中时。所以我们可以使用:

if 'png' not in text and 'jpg' not in text and 'jpeg' not in text:
    print('True')
else:
    print('False')

由于它可能令人困惑,因为这是一个长表达式,我们也可以在这里使用all(..)内置函数:

if all(part not in s for part in ['png', 'jpg', 'jpeg']):
    print('True')
else:
    print('False')

因此,只有当所有这些part不在s中时,条件才会成功。