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,將會看到如下執行結果: 從上面程式碼可以看出,如果輸入的年齡大於 20 ,則程式會執行整體縮排的程式碼塊。 程式碼塊一定要縮排,否則就不是程式碼塊。例如如下程式: 上面程式的 if 條件與下面的 print 語句位於同一條豎線上,這樣在 if 條件下就沒有受控制的程式碼塊了。因此,上面程式執行時會報出如下錯誤: if 條件後的條件執行體一定要縮排。只有縮排後的程式碼才能算條件執行體。 接下來讀者會產生一個疑問:程式碼塊(條件執行體)到底要縮排多少呢?這個隨意。你可以縮排 1 個空格、2 個空格、3 個空格…… 或 1 個 Tab 位,這都是符合語法要求的。但從程式設計習慣來看,Python 通常建議縮排 4 個空格。 有些時候,Python 直譯器不會報錯,但並不代表程式沒有錯誤。例如如下程式碼: 解釋執行上面程式,程式不會報任何錯誤。但如果輸入一個小於 20 的年齡,則可看到如下執行過程: 如果忘記正確地縮排,很可能導致程式的執行結果超出我們的預期。例如如下程式: 上面程式碼中,最後一行程式碼總會執行,因為這行程式碼沒有縮排,因此它就不屬於 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 直譯器還是會報錯。執行上面程式碼,則會報出如下錯誤:請輸入您的年齡:24
年齡已經大於20歲了
20歲以上的人應該學會承擔責任...
s_age = input("請輸入您的年齡:")
age = int(s_age)
if age > 20 :
print("年齡已經大於20歲了")
IndentationError: expected an indented block
s_age = input("請輸入您的年齡:")
age = int(s_age)
if age > 20 :
print("年齡已經大於20歲了")
print("20歲以上的人應該學會承擔責任...")
請輸入您的年齡:12
20歲以上的人應該學會承擔責任...
從執行過程可以看出,我們輸入的年齡明明小於20,但執行結果還是會列印“20歲以上…”。這是為什麼呢?就是因為這條 print 語句沒有縮排。如果這行程式碼不縮排,那麼 Python 就不會把這行程式碼當成條件執行體,它就不受 if 條件的控制,因此無論使用者輸入什麼年齡,print 語句總會執行。#定義變數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 就不知道條件執行體的開始點。執行上面程式,將會報出如下錯誤:
從前面的示例可以看到,Python 執行 if 語句時,會判斷 if 條件是 True 還是 False 。那麼 if 條件是不是隻能使用 bool 型別的表示式呢? 不是。if 條件可以是任意型別,當下面的值作為 bool 表示式時,會被直譯器當作 False 處理: 從上面介紹可以看出,除了 False 本身,各種代表“空”的 None、空字串、空元組、空列表、空字典都會被當成 False 處理。 例如如下程式碼:SyntaxError : invalid syntax
if 條件的型別False、None、0、""、()、[]、{}
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 處理。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1916/viewspace-2837336/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python if else條件語句Python
- C 語言教程:條件和 if...else 語句
- PLSQL Language Referenc-PL/SQL控制語句-條件選擇語句-IF THEN ELSESQL
- Python 中else的基本用法是在條件控制語句迴圈Python
- Python:條件分支 if 語句全講解Python
- MySQL條件判斷IF,CASE,IFNULL語句詳解MySqlNull
- Python 基礎起步 (九) 條件語句 if elif else 其實很簡單Python
- Swift 條件語句講解Swift
- python-條件控制(if語句)Python
- Python-條件語句和迴圈語句Python
- 條件語句
- Python條件語句與迴圈Python
- Python 入門 :基本條件語句Python
- GO 條件語句Go
- javaScript條件語句JavaScript
- Lua流程控制語句if else的使用詳解
- 草根學Python(五) 條件語句和迴圈語句Python
- python學習:for else語句Python
- Python學習筆記3(條件語句+迴圈語句)Python筆記
- Python學習筆記(三)——條件語句、迴圈語句Python筆記
- Go:條件控制語句Go
- if條件語句sed命令
- 04.條件語句
- Python中if else語句出錯Python
- python 中的 for-else 和 while-else 語句PythonWhile
- JavaScript if else 語句JavaScript
- PL/SQL 條件控制語句SQL
- 學習Rust 條件語句Rust
- oracle中的條件語句Oracle
- 7、條件結構語句
- Python中if條件判斷語句怎麼用?Python
- 『無為則無心』Python基礎 — 13、Python流程控制語句(條件語句)Python
- Python 中的for,if-else和while語句PythonWhile
- golang常用手冊:運算子、條件語句、迴圈語句Golang
- 最簡潔的python條件判斷語句寫法Python
- 條件迴圈語句組成了Python程式碼的骨架Python
- python最簡潔的條件判斷語句寫法Python
- C語言的條件編譯#if, #elif, #else, #endif、#ifdef, #ifndefC語言編譯