刷題翻車:python 布爾運算操做符的優先級

前兩天在 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 ,顯示結果爲 Trueblog

true

但我心算答案是 False
我是如何心算的呢?get

  • True or False 等於 True
  • True and False 等於 False

布爾值僅有 TrueFalse 兩個,布爾值操做符也僅有 與and, 或or, 非not 三個。我原本覺得本身所有掌握,怎麼還作錯,並且還不知道錯在哪兒?class

最簡單的運算,自測一下,我均已掌握,並沒有錯漏。
true1基礎

太奇怪了,錯在哪兒?想不明白,那就打開《自學是門手藝》的「入口」和「值及相應的運算」 兩個章節,重複讀布爾運算操做符部分,才發現關鍵是:im

優先級最低的是或 or,而後是與 and, 優先級最高的是非 notdb

而上述心算時,我把 andor 視爲同等優先級,並從左往右順序計算。——務必留意:這個認識是錯誤的!這倆優先級不一樣!

True or False and False 的計算順序,應該是:

  • 沒有括號,也沒有not,那就先算and
  • False and False 等於 False,如今語句是 True or False
  • 最後算 or,True or False 等於 True

再找個題目True and False or not True 自測一下:

  • 沒有括號,最早算 notnot True 等於 False ,如今語句是True and False or False
  • 其次算 andTrue and False 等於False,如今語句是 False or False
  • 最後算 orFalse or False結果是False

如今想一想真的很奇怪,當初我是如何想固然地把 andor 視爲同等優先級呢!——幸虧還有機會能經過刷題發現本身的知識點錯漏!

相關文章
相關標籤/搜索