if語句
>>通用格式
if語句一般形式如下:
1
2
3
4
5
6
|
if <test1>: <statements1> elif <test2>: <statements2> else : <statements3> |
另外需要注意的是,Python中是沒有switch/case語句的
while循環
while語句是Python語言中最通用的迭代結構,簡而言之,只要頂端測試一直計算到真值,就會重復執行一個語句塊。
>>一般格式
1
2
3
4
5
|
while <test>: <statements1> else : <statements2> >> break , continue , pass 和循環 else |
break
跳出最近所在的循環(跳過整個循環語句)。
continue
跳到最近所在循環的開頭處(來到循環的首行)。
pass
什么事也不做,只是空占位符語句。
循環else塊
只有當前循環正常離開時才會執行(也就是沒有碰到break語句)
>>一般循環格式
加入break和continue語句后,while的一般格式變為:
1
2
3
4
5
6
7
|
while <test1>: <statements1> if <test2>: break if <test3>: continue else : <statements2> >> pass |
pass語句是無運算的占位符,當語法需要語句并且還沒有任何實用的語句可寫時,就可以使用它。
>>循環else
在while語句中加入else和C/C++中的語法不太一樣,這里詳細說明一下。else后面的代碼只有當循環正常結束時才會執行,如果是用break跳出循環的,這部分代碼就不會運行,具體看一個求質數的例子:
1
2
3
4
5
6
7
8
|
x = y / / 2 while x > 1 : if y % x = = 0 : print (y, 'has factor' ,x) break x - = 1 else : print (y, 'is prime' ) |
再看一個對比的例子,沒有使用else的情況:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
found = False while x and not found: if (matchx[ 0 ]): print ( 'Ni' ) found = True else : x = x[ 1 :] if not found: print ( 'not found' ) 使用 else 后的情況: while x: if (match(x[ 0 ])): print ( 'Ni' ) break else : print ( 'not found' ) |
for循環
for循環在Python中是一個通用的序列迭代器:可以遍歷任何有序的序列對象內元素。for語句可以用于字符串、列表、元組、其他內置可迭代對象。
>>一般格式
1
2
3
4
|
for <target> in < object >: <statements> else : <statements> |
此處的else的作用和while語句中的一樣。另外需要注意的是,當Python運行for循環時,會逐個將序列對象中的元素賦值給目標,然后為每個元素執行循環體。
編寫循環的技巧
內置range函數:返回一系列連續增加的整數,可作為for中的索引
內置zip函數:返回并行元素的元組的列表,可用于在for中遍歷數個數列
>>循環計數器:while和range
range
當range函數只有一個參數時,會返回從零算起的整數列表,但其中不包括該參數的值。如果傳進兩個參數,那第一個參數是上邊界,第二個參數是下邊界。如果傳進三個參數時,第三個參數表示步進值。
range提供了一種簡單的方法,重復特定次數的動作:
1
2
|
for i in range ( 5 ): print (i, 'Pythons' ) |
相應的C++代碼則是:
1
2
3
4
5
|
int i; for (i = 0;i < 5;++i) { std::cout<<i<< "Python" ; } |
>>并行遍歷:zip和map
zip會取得一個或多個序列為參數,然后返回元組的列表,將這些序列中的并排的元素配成對。
1
2
3
|
L1 = [ 1 , 2 , 3 , 4 ] L2 = [ 5 , 6 , 7 , 8 ] list ( zip (L1,L2)) |
上述代碼的執行結果是:
1
|
[(1,5),(2,6),(3,7),(4,8)] |
當參數的長度不同時,zip會以最短序列的長度為準來截斷所得到的元組。
使用zip構造字典:
1
2
3
|
keys = [ 'spam' , 'eggs' , 'totast' ] values = [ 1 , 2 , 5 ] D = dict ( zip (keys,values)) |
>>產生偏移和元素:enumerate
enumerate函數一個比較新的內置函數,它能同時返回元素值和偏移值:
1
2
3
|
s = 'spam' for (offset,item) in enumerate (s): print (item, 'appears at offset' ,offset) |