三、控制流
1.if, elif和else
一個if語句可以接多個elif代碼塊和一個else代碼塊,如果所有elif條件均為False, 則執(zhí)行else代碼塊:
if x < 0:
print('It`s negative')
elif x == 0:
print('Equal to zero')
elif 0 < x < 5:
print('Positive but smaller than 5')
else:
print('Positive and larger than or equal to 5')
如果某個條件為True, 則后面的elif和else代碼塊不會執(zhí)行。
當(dāng)使用and和or進行混合條件判斷時,條件判斷是從左到右的并且在and或or兩側(cè)的條件會有“短路”現(xiàn)象:
a = 5; b = 7
c = 8; d = 4
if a < b or c > d:
print('Made it')
### 本例中c>d是不會去判斷的,因為第一個比較判斷為True
2.for循環(huán)
for循環(huán)用于遍歷一個集合(例如列表或元組)或一個迭代器。標(biāo)準(zhǔn)的for循環(huán)語法如下:
for value in collection:
# 用值做些什么
-
continue關(guān)鍵字可以跳過continue后面的代碼進入下一次循環(huán):
###對列表中的非None值進行累加:
sequence = [1, 2, None, 4, None, 5]
total = 0
for value in sequence:
if value is None:
continue
total += value
-
break關(guān)鍵字可以結(jié)束一個for循環(huán):
### 對列表元素累加直到5出現(xiàn)
sequence = [1, 2, 0, 4, 6, 5, 2, 1]
total_until_5 = 0
for value in sequence:
if value == 5:
break
total_until_5 += value
### break 關(guān)鍵字只結(jié)束最內(nèi)層的for循環(huán);
### 外層的for循環(huán)會繼續(xù)運行:
for i in range(4):
for j in range(4):
if j > i:
break
print((i, j))
......:
(0, 0)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
(2, 2)
(3, 0)
(3, 1)
(3, 2)
(3, 3)
- 如果集合或迭代器中的元素是一個序列(比如元組或列表),它們可以在for循環(huán)語句中很方便地通過拆包成為變量:
for a, b, c in iterator:
# 做些什么
3. while循環(huán)
while循環(huán)會在條件符合時一直執(zhí)行代碼塊,直到條件判斷為False或顯式地以break結(jié)尾時才結(jié)束:
x = 256
total = 0
while x > 0:
if total > 500:
break
total += x
x = x // 2
4. pass
pass就是什么都不做的語句,表示不執(zhí)行任何操作:
if x < 0:
print('negative!')
elif x == 0:
pass
else:
print('positive!')
5. range
range函數(shù)返回一個迭代器,該迭代器生成一個等差整數(shù)序列:
range(10)
Out[39]: range(0, 10)
list(range(10))
Out[40]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
### 起始/結(jié)尾/步進(可以是負(fù)的)可以傳參給range函數(shù):
list(range(0, 20, 2))
Out[41]: [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
list(range(5, 0, -1))
Out[42]: [5, 4, 3, 2, 1]
range產(chǎn)生的整數(shù)包含起始但不包含結(jié)尾。range常用于根據(jù)序列的索引遍歷序列:
seq = [1, 2, 3, 4]
for i in range(len(seq)):
val = seq[i]
將0到99,999中所有可以被3或5整除的整數(shù)相加:
sum = 0
for i in range(100000):
#%是求模(余數(shù))操作符
if i % 3 == 0 or i % 5 ==0:
sum += i
sum
Out[44]: 2333316668
6. 三元表達式
三元表達式允許你將一個if-else代碼塊聯(lián)合起來,在一行代碼或一個語句中生成數(shù)據(jù)。語法如下:
value = treu-expr if condition else false-expr
它與以下更詳細(xì)的代碼效果一致:
if condition:
value = true-expr
else:
value = false-expr
以下是具體例子:
'Non-negative' if x >= 0 else 'Negative'
三元表達式可以壓縮代碼量,但是可能會犧牲可讀性。