您好,登錄后才能下訂單哦!
怎么理解Python if else條件語句?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
if 分支使用布爾表達式或布爾值作為分支條件來進行分支控制。Python 的 if 分支既可作為語句使用,也可作為表達式使用。下面先介紹 if 分支作為語句使用的情形。
if 語句可使用任意表達式作為分支條件來進行分支控制。Python 的 if 語句有如下三種形式:
第一種形式:
if expression: statements...
第二種形式:
if expression statements... else: statements...
第三種形式:
if expression: statements... elif expression: statements... ...//可以有零條或多條elif語句 else: statement...
在上面 if 語句的三種形式中,第二種形式和第三種形式是相通的,如果第三種形式中的 elif 塊不出現,則變成了第二種形式。
對于上面的 if 分支語句,執行過程是非常簡單的,即如果 if 條件為“真”,程序就會執行 if 條件后面的多條語句;否則就會依次判斷 elif 條件,如果 elif 條件為“真”,程序就會執行 elif 條件后面的多條語句……如果前面所有條件都為“假”,程序就會執行 else 后的代碼塊(如果有)。
在上面的條件語句中,if expression:、elif expression:及 else:后縮進的多行代碼被稱為代碼塊,一個代碼塊通常被當成一個整體來執行(除非在運行過程中遇到return、break、continue等關鍵字),因此這個代碼塊也被稱為條件執行體。
Python是一門很“獨特”的語言,它的代碼塊是通過縮進來標記的(大部分語言都使用花括號或 end 作為代碼塊的標記),具有相同縮進的多行代碼屬于同一個代碼塊。如果代碼莫名其妙地亂縮進,Python 解釋器會報錯(前文說過,Python 不是格式自由的語言)。
例如如下程序:
s_age = input("請輸入您的年齡:") age = int(s_age) if age > 20 : # 只有當age > 20時,下面用整體縮進的代碼塊才會執行 # 整體縮進的語句是一個整體,要么一起執行,要么一起不執行 print("年齡已經大于20歲了") print("20歲以上的人應該學會承擔責任...")
運行上面代碼,如果輸入年齡小于 20,將會看到如下運行結果:
請輸入您的年齡:18
從上面代碼可以看出,如果輸入的年齡小于 20,則程序沒有任何輸出,整體縮進的語句作為整體都不會執行。
運行上面代碼,如果輸入年齡大于 20,將會看到如下運行結果:
請輸入您的年齡:24 年齡已經大于20歲了 20歲以上的人應該學會承擔責任...
從上面代碼可以看出,如果輸入的年齡大于 20 ,則程序會執行整體縮進的代碼塊。
代碼塊一定要縮進,否則就不是代碼塊。例如如下程序:
s_age = input("請輸入您的年齡:") age = int(s_age) if age > 20 : print("年齡已經大于20歲了")
上面程序的 if 條件與下面的 print 語句位于同一條豎線上,這樣在 if 條件下就沒有受控制的代碼塊了。因此,上面程序執行時會報出如下錯誤:
IndentationError: expected an indented block
if 條件后的條件執行體一定要縮進。只有縮進后的代碼才能算條件執行體。
接下來讀者會產生一個疑問:代碼塊(條件執行體)到底要縮進多少呢?這個隨意。你可以縮進 1 個空格、2 個空格、3 個空格…… 或 1 個 Tab 位,這都是符合語法要求的。但從編程習慣來看,Python 通常建議縮進 4 個空格。
有些時候,Python 解釋器不會報錯,但并不代表程序沒有錯誤。例如如下代碼:
s_age = input("請輸入您的年齡:") age = int(s_age) if age > 20 : print("年齡已經大于20歲了") print("20歲以上的人應該學會承擔責任...")
解釋執行上面程序,程序不會報任何錯誤。但如果輸入一個小于 20 的年齡,則可看到如下運行過程:
請輸入您的年齡:12 20歲以上的人應該學會承擔責任...
從運行過程可以看出,我們輸入的年齡明明小于20,但運行結果還是會打印“20歲以上…”。這是為什么呢?就是因為這條 print 語句沒有縮進。如果這行代碼不縮進,那么 Python 就不會把這行代碼當成條件執行體,它就不受 if 條件的控制,因此無論用戶輸入什么年齡,print 語句總會執行。 如果忘記正確地縮進,很可能導致程序的運行結果超出我們的預期。例如如下程序: 上面代碼中,最后一行代碼總會執行,因為這行代碼沒有縮進,因此它就不屬于 else 后的條件執行體,else 后的條件執行體只有 b -= 1 這一行代碼。 如果要讓 print("b不大于4") 語句也處于 else 控制之下,則需要讓這行代碼也縮進 4 個空格。 if、else、elif 后的條件執行體必須使用相同縮進的代碼塊,將這個代碼塊整體作為條件執行體。當if后有多條語句作為條件執行體時,如果忘記了縮進某一行代碼,則會引起語法錯誤。看下面代碼: 在上面代碼中,因為 if 后的條件執行體的最后一條語句沒有縮進,所以系統只把 c-= 1 一行代碼作為條件執行體,當 c-=1 語句執行結束后,if 語句也就執行結束了。后面的 print("c大于4") 己經是一行普通代碼,不再屬于條件執行體,從而導致 else 語句沒有if語句,引發編譯錯誤。 運行上面代碼,將看到如下錯誤: 不要隨意縮進 需要說明的是,雖然 Python 語法允許代碼塊隨意縮進 N 個空格,但同一個代碼塊內的代碼必須保持相同的縮進,不能一會縮進 2 個空格,一會縮進 4 個空格。 例如如下代碼: 上面程序中第 2 個 print 語句縮進了 5 個空格,在這樣的情況下,Python 解釋器認為這條語句與前一條語句(縮進了 4 個空格)不是同一個代碼塊(這就是游標卡尺笑話的由來),因此 Python 解釋器會報錯。運行上面代碼,將會報出如下錯誤: 把代碼改為如下形式: 上面程序中第二條 print 語句只縮進了 3 個空格,它與前一條 print 語句(縮進了 4 個空格)同樣不屬于同一個代碼塊,因此 Python 解釋器還是會報錯。運行上面代碼,則會報出如下錯誤:#定義變量b,并為其賦值
b = 5
if b > 4 :
#如果b>4,則執行下面的條件執行體,只有一行代碼作為代碼塊
print("b大于4")
else:
#否則,執行下面的條件執行體,只有一行代碼作為代碼塊
b -= 1
#對于下面代碼而言,它己經不再是條件執行體的一部分,因此總會執行
print("b不大于4")
# 定義變量c,并為其賦值
c = 5
if c > 4:
# 如果c>4,則執行下面的執行體,將只有c--一行代碼為執行體
c -= 1
# 下面是一行普通代碼,不屬于執行體
print("c大于4")
# 此處的else將沒有if語句,因此編譯出錯
else
# 否則,執行下面的執行體,只有一行代碼作為代碼塊
print("c不大于4")
SyntaxError : invalid syntax
s_age = input("請輸入您的年齡:")
age = int(s_age)
if age > 20 :
print("年齡已經大于20歲了")
print("20歲以上的人應該學會承擔責任...")
IndentationError : unexpected indent
s_age = input("請輸入您的年齡:")
age = int(s_age)
if age > 20 :
print("年齡已經大于20歲了")
print("20歲以上的人應該學會承擔責任...")
IndentationError: unindent does not match any outer indentation level
通過上面介紹可以看出,Python 代碼塊中的所有語句必須保持相同的縮進,既不能多,也不能少。
不要遺忘冒號
從 Python 語法解釋器的角度來看,Python 冒號精確表示代碼塊的開始點這個功能不僅在條件執行體中如此,后面的循環體、方法體、類體全部遵守該規則。
如果程序遺忘了冒號,那么 Python 解釋器就無法識別代碼塊的開始點。例如如下程序:
age = 24 if age > 20 print("年齡已經大于20歲了") print("20歲以上的人應該學會承擔責任...")
上面 if 條件后忘了寫冒號,因此 Python 就不知道條件執行體的開始點。運行上面程序,將會報出如下錯誤:
SyntaxError : invalid syntax
if 條件的類型
從前面的示例可以看到,Python 執行 if 語句時,會判斷 if 條件是 True 還是 False 。那么 if 條件是不是只能使用 bool 類型的表達式呢?
不是。if 條件可以是任意類型,當下面的值作為 bool 表達式時,會被解釋器當作 False 處理:
False、None、0、""、()、[]、{}
從上面介紹可以看出,除了 False 本身,各種代表“空”的 None、空字符串、空元組、空列表、空字典都會被當成 False 處理。
例如如下代碼:
s = "" if s : print('s不是空字符串') else: print('s是空字符串') # 定義空列表 my_list = [] if my_list: print('my_list不是空列表') else: print('my_list是空列表') # 定義空字典 my_dict = {} if my_dict: print('my_dict不是空字典') else: print('my_dict是空字典')
從上面的粗體字代碼可以看出,這些 if 條件分別使用了 str 類型、list 類型、dict 類型,由于這些 str、list、dict 都是空值,因此 Python 會把它們當成 False 處理。
看完上述內容,你們掌握怎么理解Python if else條件語句的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。