03-04程序結構

程序結構

程序結構定義就是語句和表達式按照什麼樣的順序執行

順序結構

python3的默認結構, 從上到下一行一行執行

分支結構

分支結構永遠只有一個或者0個分支會被執行:在分支結構中,有了elif可以不用寫else,所以纔會有0個分支會被執行
條件只能夠是bool類型或者可以隱式轉換爲bool類型

單分支

In [59]: a = 5
    ...: if a < 10:
    ...:     print('a less than 10')
    ...: print(a)
    ...: 
a less than 10
5

雙分支

雙分支結構裏, 永遠只有一個分支會被執行

In [60]: a = 5
    ...: if a < 10:
    ...:     print('a less than 10')
    ...: else:
    ...:     print('a not less than 10')
    ...: print(a)
    ...: 
a less than 10
5

In [61]: a = 50
    ...: if a < 10:
    ...:     print('a less than 10')
    ...: else:
    ...:     print('a not less than 10')
    ...: print(a)
    ...:
a not less than 10
50

多分支

通過解構嵌套可以實現多分支, 但是不建議
建議用elif語法來進行多分支

In [62]: a = 50
    ...: if a < 10:
    ...:     print('a < 10')
    ...: else:
    ...:     if a < 20:
    ...:         print('10 <= a < 20')
    ...:     else:
    ...:         print('a >= 20')
    ...:
a >= 20

可以通過嵌套可以實現多分支
上述例子另一種寫法

In [63]: a = 50
    ...: if a < 10:
    ...:     print('a < 10')
    ...: elif a < 20:
    ...:     print('10 <= a < 20')
    ...: else:
    ...:     print('a >=20')
    ...:
a >=20

In [48]: if a < 10: 
    ...:     print('a < 10') 
    ...: elif a < 20:                        # 有了elif可以不寫else
    ...:     print('10 <= 10 < 20') 
    ...:  

循環結構

while循環(死循環)

條件爲真時死循環執行,條件爲假時,結束

In [65]: i = 0
    ...: while i < 10:
    ...:     print(i)
    ...:     i += 1
    ...:
0
1
2
3
4
5
6
7
8
9
一定要有某種機制修改調製使其退出循環, 通常是在循環體裏修改條件

for in 循環

文字描述

開始
for 元素 in 可迭代對象:
    操作
結束

for in 循環裏永遠不要修改可迭代對象,被循環的可迭代對象會報錯
In [70]: for i in range(0, 10):
    ...:     print(i)
0
1
2
3
4
5
6
7
8
9

break終止與continue跳過

提前終止:break,這個循環終止了,已經退出了當前for或者while循環。
跳過::continue,跳過當前循環,處於continue後面的語句都不會再執行。

break和continue只針對最近的一層
break和continue只能用在循環裏

例21:提前終止
    In [71]: for i in range(0, 10):
        ...:     if i % 2 != 0:
        ...:         print(i)
        ...:         break     # 遇到break這個循環就全部終止了
        ...:
    1

    In [72]: for i in range(0, 10):
        ...:     print(i)
        ...:     if i % 2 != 0:
        ...:         print('find it')
        ...:         break
        ...:
    0
    1
    find it

例22:跳過
    In [73]: for i in range(0, 10):
        ...:     print(i)
        ...:     if i % 2 != 0:
        ...:         continue
        ...:     print(i + 1)
        ...:
    0
    1
    1
    2
    3
    3
    4
    5
    5
    6
    7
    7
    8
    9
    9

    In [74]: for i in range(0, 10):
        ...:     print(i)
        ...:     if i % 2 != 0:
        ...:         continue
        ...:     print('i is {}, i+1 is {}'.format(i, i + 1))    # 會將後面的循環體全部跳過
        ...:
    0
    i is 0, i+1 is 1
    1           # 1對2取模不等於0, 返回爲True, 就執行continue跳過, 那麼後面的print也跳過了,所以後續直接顯示2
    2
    i is 2, i+1 is 3
    3
    4
    i is 4, i+1 is 5
    5
    6
    i is 6, i+1 is 7
    7
    8
    i is 8, i+1 is 9
    9

    continue用於跳過循環體剩下的部分

    In [38]: for i in range(0, 10):      # 和上個示例對比, 沒有continue的部分
        ...:     print(i)
        ...:     if i % 2 != 0:
        ...:         print('if % 2 is {}'.format(i))
        ...:     print('i is {}, i+1 is {}'.format(i, i + 1))
        ...:
    0
    i is 0, i+1 is 1
    1
    if % 2 is 1
    i is 1, i+1 is 2
    2
    i is 2, i+1 is 3
    3
    if % 2 is 3
    i is 3, i+1 is 4
    4
    i is 4, i+1 is 5
    5
    if % 2 is 5
    i is 5, i+1 is 6
    6
    i is 6, i+1 is 7
    7
    if % 2 is 7
    i is 7, i+1 is 8
    8
    i is 8, i+1 is 9
    9
    if % 2 is 9
    i is 9, i+1 is 10

例23:多層循環的break
    In [75]: for i in range(0, 5):
        ...:     for j in range(0, 10):
        ...:         if j > 5:
        ...:             break
        ...:         print('i is {}, j is {}'.format(i, j))
        ...:
    i is 0, j is 0
    i is 0, j is 1
    i is 0, j is 2
    i is 0, j is 3
    i is 0, j is 4
    i is 0, j is 5    # 只有內部的for循環終止, 外部的for循環並不終止
    ...
    i is 4, j is 4
    i is 4, j is 5

    In [76]: for i in range(0, 5):
        ...:     for j in range(0, 10):
        ...:         if j != 5:
        ...:             continue
        ...:         print('i is {}, j is {}'.format(i, j))
        ...:
    i is 0, j is 5
    i is 1, j is 5
    i is 2, j is 5
    i is 3, j is 5
    i is 4, j is 5

    break和continue只針對最近的一層
    break和continue只能用在循環裏

else子句

在python中,不管是if還是for還有while循環都有else語句。
當循環沒有提前退出時, 都會執行else字句(也就是說,如果提前退出就不會執行else語句)

In [42]: for x in range(0, 5): 
    ...:     print(x) 
    ...:     break         # 因爲是終止,所以else都終止了
    ...: else: 
    ...:     print('ok') 
    ...:                                                                                                                                                                          
0

In [41]: for x in range(0, 5): 
    ...:     print(x)        # continue是僅僅針對這個循環, 所以else會有效
    ...:     continue 
    ...: else: 
    ...:     print('ok') 
    ...:                                                                                                                                                                          
0
1
2
3
4
ok
In [43]: for x in range(0, 5): 
    ...:     print(x) 
    ...: else:  
    ...:     print('ok')    # for執行完後依然會執行else語句
    ...:                                                                                                                                                                          
0
1
2
3
4
ok

In [46]: a = 1 
    ...: while a == 1:
    ...:     print(a) 
    ...:     a+=1 
    ...: else:                      # while循環後依然會執行else語句
    ...:     print('2') 
    ...:                                                                                                                                                                                     
1
2
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章