鍍金池/ 問答/Python/ python 的語法問題

python 的語法問題

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

這是為啥呢?我寫的有問題嗎?

回答
編輯回答
笨尐豬

'合并'True 啊,沒毛病。

2017年11月4日 09:50
編輯回答
兔囡囡

or表達式滿足一個為真就為真,這里'合并'是真值。所以輸出2

2017年4月27日 04:05
編輯回答
瘋浪

上面已經(jīng)講了很清楚了,一共3個知識點:

1.Python中那些為False

判斷為假的情況有:

None
False
數(shù)值中的零,包括0,0.0,0j(虛數(shù))
空序列,包括空字符串(”),空元組(()),空列表([])
空的字典{}
自定義的對象的實例,該對象的__bool__方法返回False或者__len__方法返回0
除了以上的情況外,所有的對象在if或者while語句中的表現(xiàn)都為真。

除此之外,都是真。

2.python中運算符的優(yōu)先級

以下列出了從最高到最低優(yōu)先級的所有運算符:

運算符    描述
**    指數(shù) (最高優(yōu)先級)
~ + -    按位翻轉(zhuǎn), 一元加號和減號 (最后兩個的方法名為 +@ 和 -@)
* / % //    乘,除,取模和取整除
+ -    加法減法
>> <<    右移,左移運算符
&    位 'AND'
^ |    位運算符
<= < > >=    比較運算符
<> == !=    等于運算符
= %= /= //= -= += *= **=    賦值運算符
is is not    身份運算符
in not in    成員運算符
not or and    邏輯運算符

優(yōu)先級的意思是,如果有高一級的運算符,先運算高一級的。

3.python真值表

NOT
not False <=> True
not True <=> False
(not的結(jié)果與原值相反)

OR
True or False <=> True
True or True <=> True
False or True <=> True
False or False <=> False
(只要有一個值為True,OR的結(jié)果就是True)

AND
True and False <=> False
True and True <=> True
False and True <=> False
False and False <=> False
(只要有一個值為False,AND的結(jié)果就是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.總結(jié)一下
if('合并') or ("并購") in ("C輪")
先利用運算符優(yōu)先級,判斷運算順序為:

  • ("并購") in ("C輪")部分邏輯值為 False
  • ('合并') 部分邏輯值為 True
  • if True or False 真值表判斷為 True
  • print 2
2017年11月11日 04:31
編輯回答
瘋子范

你的if語句部分是這個意思:

if ('合并') or (("并購") in ("C輪")):
2018年6月2日 20:04
編輯回答
薄荷綠

非空字符串是真值,所以'合并' 是為真
or表達式只要一個為真就為真,所以為真
所以執(zhí)行print 2,打印 值2

2017年3月8日 17:17