Python 101 基礎教學 (3) - 條件判斷 if else

條件判斷是所有程式語言最重要的觀念之一。程式的目的就是有邏輯地自動化幫我們處理資料,沒有判斷選擇就不算邏輯了吧!所以 if else 語法幫助我們在程式裡面可以做出選擇。

條件判斷語法就只有 ifelifelse,解釋就照著字面就行:如果、否則如果、否則。使用之前我們需要知道 條件運算式 conditional expressions。

條件運算式

條件運算式的結果一定為真偽值(或是布林值:Boolean, bool),也就是 True/False。一些可用的運算符號包含 >>=<<===!=notandor

== 代表做又兩個值是否相等,用兩個等號是因為 = 已經被用來表示了變數賦值了。 != 表示為不等於。

not 代表"否"的意思,也就是原本是 True 的東西加上驚嘆號就會倒過來變成 False

and  的左右兩邊要都會 True 才會使整體為 Trueor 則是只要任一為 True,整體就會為 True

print(2 > 1) # output: True
print(2 > 3) # output: False
print(2 == 2) # output: True
print(2 >= 2) # output: True

a = 1 == 1 # 1==1返回True,True再assign給a (=的右邊會先執行,再assign給左邊)
print(a) # output: True

print(True == 2 == 2) 
# output: False, (True==2)==2 => False==2 => False

print(True == (2 == 2)) 
# output: True, True==(2==2) => True==True => True

print(not 1 == 1) 
# output: False, not (1==1) => not True => False

print(True and False) # False
print(True or False) # True

a = 3
print(a > 2 and a < 4) # True
print(2 < a and a < 4) # True
print(2 < a < 4) # True
print(a == 3 and a < 2) # False, a不小於2
print(a == 3 or a == 2) # True, or左右其一條件滿足即可
print(True or False and True) # True

# 註:and 的優先級別比 or 高,所以同一式子裡 and 的會先執行
# a and b or c and d 的時候會變成 (a and b) or (c and d) 

不同型態也可以做比較,Python 會先試著幫你轉換去比,但要注意的是這種做法會使可讀性降低,而且容易出錯,比較好的方式是自己使用型態轉換 (bool, int, str...),轉不了會直接報錯,有助於減少非預期結果發生。

print(1 == 1.0) # output: True
print(2 == 2.01) # output: False
print(1 == True) # output: True
print(0 == False) # output: True
print(2 == True) # output: False

# 字串轉boolean時,空字串被轉成 False,其他被轉為 True
print(bool('')) # output: False
print(bool('123')) # output: True

print('123' == 123) # output: False, 比較時字串不會自動轉換成數字
print(int('123') == 123) # output: True 
print(float('123') == 123) # output: True, 123.0 == 123

print('1' == True) # output: False
print(bool('1') == True) # output: True

if、elif、else 使用方式

暸解了條件運算式以後,把if else套進去就很直觀了。if 是必須,而 elif 與 else 可有可無,但必須要接在 if 後:

# 語法如下:
# if [條件運算式]:
# 	  [陳述式...]
# elif [條件運算式]:
#	  [陳述式...]
# else:
#	  [陳述式...]

# 程式執行時,只會進入其中一條件,如果符合if條件,就執行if裡的陳述式,
# 否則如果符合elif條件,就執行elif裡的陳述式,否則就執行else裡的陳述式。

# 基本例子
# 因為b > a,所以此條件不符合if也不符合elif,因此進入else
# 會印出 b is greater
a = 1
b = 2
if a > b:
	print('a is greater')
elif a == b:
	print('a is equal to b')
else:
	print('b is greater')

# 可以只if
# 以下印出 a is 3
a = 3
if a == 3:
	print('a is 3')
    
# 以下因為a不等於3,不會印出任何東西
a = 4
if a == 3:
	print('a is 3')
    

# 可以只有if與else,沒有elif
# 以下印出 a is not 3
a = 4
if a == 3:
	print('a is 3')
else:
	print('a is not 3')
    

# 可以有多個elif
# 以下會印出 it's a cat
animal = 'cat'
if animal == 'dog':
	print('it\'s a dog')
elif animal == 'cat':
	print('it\'s a cat')
elif animal == 'bird':
	print('it\'s a bird')
else:
	print('I don\'t know what it is')

特別要注意的是 縮排(Indentation) 在 Python 裡面很重要,Indentation 在 Python 裡面表示了 Scope,有時候一不注意沒縮排好就會報錯:

if True:
	print(123)
   print(123)
   
# 以上縮排會導致報錯:
# IndentationError: unindent does not match any outer indentation level

# 不同的Indentation表示不同的Scope 
if False:
	print(1) # 在if底下的scope,if條件不滿足,不會執行
print(2) # indentation與if在同一個level,不屬於if的scope,會執行
 

繼續閱讀:

Python 101 基礎教學 (4) - 運算符號優先順序
Python 的陳述式因為包含多種可能的運算符號,所以要制定一定的優先順序,才能避免衝突,讓程式在執行的時候有規則可循。