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。
另请注意,如果 a
或 b
中的任何一个大于 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')
如果您要表达条件以测试 a
或 b
是否大于 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 条件由两部分组成 a
和 b>25
,而 or
运算符意味着您至少需要其中之一是 True
打印 First
.
那么if a
是什么意思呢?实际上,这意味着如果 a 等于不同于 None
、0
、""
和 False
的值。所以在你的例子中,a 等于 35,因此第一部分的评估是 True
。第二部分被评估为 False
因为 b 不大于 35。这就是它打印 First
.
的原因
对于第四个示例,您需要将它们都计算为 True 才能执行打印语句。
我希望这能帮助你更好地理解它。
我正在学习 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。
另请注意,如果 a
或 b
中的任何一个大于 35
。
(a or b or c or ... or n) > 35
仅当析取中的第一个非零数大于35
"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')
如果您要表达条件以测试 a
或 b
是否大于 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 条件由两部分组成 a
和 b>25
,而 or
运算符意味着您至少需要其中之一是 True
打印 First
.
那么if a
是什么意思呢?实际上,这意味着如果 a 等于不同于 None
、0
、""
和 False
的值。所以在你的例子中,a 等于 35,因此第一部分的评估是 True
。第二部分被评估为 False
因为 b 不大于 35。这就是它打印 First
.
对于第四个示例,您需要将它们都计算为 True 才能执行打印语句。
我希望这能帮助你更好地理解它。