前兩天在 xue.cn 體驗答題挑戰,我有道題作錯了,卻不明白錯在哪裏。題目大概以下,代碼運行後將打印什麼?html
if True or False and False: print('1') else: print('2')
這個題目考察兩個簡單的知識點,一個是布爾運算,另外一個是流程控制語句。結果是 1,我則選了2。python
覆盤個人解題思路。先是布爾運算部分,我把 True or False and False
的結果算成 False
,因而代碼簡化爲:code
if False: print('1') else: print('2')
我短暫發懵,後來回過神來,整理了一篇筆記《和35歲劉阿姨一塊兒自測 Python 流程控制基本功》用於鞏固基礎功。htm
流程控制之if 分支控制語句,僅會執行條件爲真的那個分支,因此上述代碼段的結果爲 2。而後這才發現,我錯在布爾運算部分。在 xue.cn 網頁上直接輸入並運行True or False and False
,顯示結果爲 True
。blog
但我心算答案是 False
。
我是如何心算的呢?get
True or False
等於 True
True and False
等於 False
布爾值僅有 True
和 False
兩個,布爾值操做符也僅有 與and
, 或or
, 非not
三個。我原本覺得本身所有掌握,怎麼還作錯,並且還不知道錯在哪兒?class
最簡單的運算,自測一下,我均已掌握,並沒有錯漏。
基礎
太奇怪了,錯在哪兒?想不明白,那就打開《自學是門手藝》的「入口」和「值及相應的運算」 兩個章節,重複讀布爾運算操做符部分,才發現關鍵是:im
優先級最低的是或 or,而後是與 and, 優先級最高的是非 notdb
而上述心算時,我把 and
、 or
視爲同等優先級,並從左往右順序計算。——務必留意:這個認識是錯誤的!這倆優先級不一樣!
True or False and False
的計算順序,應該是:
not
,那就先算and
False and False
等於 False
,如今語句是 True or False
True or False
等於 True
再找個題目True and False or not True
自測一下:
not
,not True
等於 False
,如今語句是True and False or False
and
,True and False
等於False
,如今語句是 False or False
or
,False or False
結果是False
如今想一想真的很奇怪,當初我是如何想固然地把 and
和 or
視爲同等優先級呢!——幸虧還有機會能經過刷題發現本身的知識點錯漏!