python 的语法问题

>>> if('合并') or ("并购") in ("C轮"):
...     print 2
... else:
...     print 3
...     
2

这是为啥呢?我写的有问题吗?

阅读 2.8k
5 个回答

非空字符串是真值,所以'合并' 是为真
or表达式只要一个为真就为真,所以为真
所以执行print 2,打印 值2

'合并'True 啊,没毛病。

or表达式满足一个为真就为真,这里'合并'是真值。所以输出2

你的if语句部分是这个意思:

if ('合并') or (("并购") in ("C轮")):

上面已经讲了很清楚了,一共3个知识点:

1.Python中那些为False

判断为假的情况有:

None
False
数值中的零,包括0,0.0,0j(虚数)
空序列,包括空字符串(”),空元组(()),空列表([])
空的字典{}
自定义的对象的实例,该对象的__bool__方法返回False或者__len__方法返回0
除了以上的情况外,所有的对象在if或者while语句中的表现都为真。

除此之外,都是真。

2.python中运算符的优先级

以下列出了从最高到最低优先级的所有运算符:

运算符    描述
**    指数 (最高优先级)
~ + -    按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % //    乘,除,取模和取整除
+ -    加法减法
>> <<    右移,左移运算符
&    位 'AND'
^ |    位运算符
<= < > >=    比较运算符
<> == !=    等于运算符
= %= /= //= -= += *= **=    赋值运算符
is is not    身份运算符
in not in    成员运算符
not or and    逻辑运算符

优先级的意思是,如果有高一级的运算符,先运算高一级的。

3.python真值表

NOT
not False <=> True
not True <=> False
(not的结果与原值相反)

OR
True or False <=> True
True or True <=> True
False or True <=> True
False or False <=> False
(只要有一个值为True,OR的结果就是True)

AND
True and False <=> False
True and True <=> True
False and True <=> False
False and False <=> False
(只要有一个值为False,AND的结果就是False)

NOT OR
not (True or False) <=> False
not (True or True) <=> False
not (False or True) <=> False
not (False or False) <=> True

NOT AND
not (True and False) <=> True
not (True and True) <=> False
not (False and True) <=> True
not (False and False) <=> True

4.总结一下
if('合并') or ("并购") in ("C轮")
先利用运算符优先级,判断运算顺序为:

  • ("并购") in ("C轮")部分逻辑值为 False
  • ('合并') 部分逻辑值为 True
  • if True or False 真值表判断为 True
  • print 2
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题