python 逻辑运算符 '' 或 '' 的技巧?

trick of python logical operator '' or ''?

我正在学习 python,但逻辑运算符 'or' 有问题。无法找到信息并理解为什么各种写作中的代码解释不同(#First 和#Second 示例有什么区别)。因此,#First 示例不等于 #Second,当运算符 'and' 在代码的所有变体中都相等时

# First
a=35
b=35
if a or b>35:
    print('First')

'''with code like above python have printed 'First' even if statement false, like i understand it. 
But in other examples, statement are false too, and 'print' wasn't done, like it must be.'''

# Second
c=35
d=35
if c>35 or d>35:
    print('Second')

#Third    
e=35
f=35
if e>35 and f>35:
    print('Third')

#Fourth    
g=35
h=35
if g and h>35:
    print('Fourth')
a or b > 35

等同于

a or (b > 35)

a 是真实的,因为除了 0 之外的所有整数都是真实的。您可以验证:

>>> a or b > 35
35
>>> (a or b) > 35  
False

truth testing and operator precedence

另请注意,如果 ab 中的任何一个大于 35

(a or b or c or ... or n) > 35

仅当析取中的第一个非零数大于35

时才为真
如果 a != 0,

"if a" 将始终对 int 求值为真。

当您在条件中直接使用数字 X 时,Python 通过应用比较 X != 0

隐式将其转换为布尔值

因此,对于您的示例:

第一个

a=35
b=35
if a or b>35:        # same as if a!=0 or b>35:   True or False --> True
    print('First')

第二个

c=35
d=35
if c>35 or d>35:     # False or False --> False
    print('Second')

第三

e=35
f=35
if e>35 and f>35:    # False and False --> False
    print('Third')

第四个

g=35
h=35
if g and h>35:       # same as if g!=0 and h>35:  True and False --> False
    print('Fourth')

如果您要表达条件以测试 ab 是否大于 35,则不能将其写为 a or b > 35
虽然用英文你可能很清楚,但 Python 读起来却不是这样。

Python 要求您更明确,因此您将不得不重复 > 35 :

a > 35 or b > 35.

如果您想避免重复 35,可以使用以下技巧:

if max(a,b) > 35:  
   # either a or b is > 35  (i.e. the highest of the two is > 35)

if min(a,b) > 35:
   # both a and b are > 35  (i.e. the lowest of the two is > 35)

实际上你必须拆分它才能更好地理解它。 我们来看第一种情况:

a=35
b=35
if a or b>35:
  print('First')

在这种情况下,您的 if 条件由两部分组成 ab>25,而 or 运算符意味着您至少需要其中之一是 True 打印 First.

那么if a是什么意思呢?实际上,这意味着如果 a 等于不同于 None0""False 的值。所以在你的例子中,a 等于 35,因此第一部分的评估是 True。第二部分被评估为 False 因为 b 不大于 35。这就是它打印 First.

的原因

对于第四个示例,您需要将它们都计算为 True 才能执行打印语句。

我希望这能帮助你更好地理解它。