官术网_书友最值得收藏!

3.5 Python的編程結構

程序控制是編程語言的基礎。Python的編程結構有順序結構、分支結構和循環結構。本節將對其做詳細的講解。

3.5.1 三種基本的編程結構簡介

Python的編程結構包括順序結構、分支結構和循環結構,如圖3-8所示。

045-01

圖3-8 Python的編程結構

  • 順序結構的特點是依照次序執行代碼,并返回相應的結果。這種結構較為簡單,易于理解。
  • 分支結構的特點是有條件判斷,即滿足某種條件就繼續執行,否則跳轉到另外的條件上執行。
  • 循環結構程序用于處理可以迭代的對象,比如元組、列表。

在這些結構中,分支結構往往需要條件判斷語句進行控制,比如if、else等,而循環結構需要循環語句for進行控制。當然,分支結構與循環結構完全可以混合,這時就可以通過條件循環語句while進行控制。

3.5.2 順序結構

1. 順序結構簡介

現在創建一個列表:

>a = [1,2,3,4,5]

如果要打印列表中的所有元素,可以使用如下寫法:

> print (a[0])
> print (a[1])
> print (a[2])
> print (a[3])
> print (a[4])
1
2
3
4
5

這種順序執行的編程結構就是順序結構。

2. 邏輯行與物理行

在Python中,代碼被逐行提交給解釋器并進行編譯。物理行是指編輯器里看到的一行,邏輯行是指代碼經過編譯后所在的行。Python中,每個物理行對應著一個邏輯行。例如上述print代碼的邏輯行和物理行是對應的。

但某些情況下,一個邏輯行的代碼過長時,可以分拆為多個物理行,例如:

>tuple(set(list([1,2,3,4,5,6,7,8])))
(1, 2, 3, 4, 5, 6, 7, 8)

可以寫成如下方式,

> tuple(set(list([1,2,3,\
    4,5,6,7,8])))
(1, 2, 3, 4, 5, 6, 7, 8)

符號“\”是換行的標識,此時代碼是一個邏輯行,但有兩個物理行。

當多個邏輯行代碼過短時,如:

>x = 1
> y = 2
> z = 3
> print(x,y,z)
(1, 2, 3)

可以使用分號“;”將多個邏輯行轉化為一個物理行:

> x = 1;y = 2;z = 3;print(x,y,z)
(1, 2, 3)

3.5.3 分支結構

分支結構的分支用于進行條件判斷。在Python中,我們使用if、elif、else、冒號與縮進表達分支。以下是一個示例:

若數值x小于0,令x等于0,且打印信息Negative changed to zero;

若第一個條件不成立,判斷x是否為0,若成立,打印Zero;

若第一、第二個條件不成立,再判斷x是否為1,若成立,打印single;

若第一、第二、第三個條件都不成立,打印more。

我們將x賦初值-2,并測試以上邏輯的輸出結果。

>x = -2
>if x < 0:
> x = 0
> print('Negative changed to zero')
>elif x == 0:
> print('Zero')
>elif x == 1:
> print('Single')
>else:
>     print('More')
'Negative changed to zero'

這里,if、elif、else組成的邏輯是一個完整的邏輯,即任何條件成立時,程序會停止后面的條件判斷。這里需注意多個if語句存在時的條件判斷結果:若把上述代碼中的elif改為if,程序執行的結果會發生變化,如下所示:

> x = -2
>if x < 0:
>     x = 0
>     print('Negative changed to zero')
>if x == 0:
>     print('Zero')
>if x == 1:
>     print('Single')
>else:
>     print('More')
'Negative changed to zero'
'Zero'
'More'

上述程序的多個if語句是串行的關系,即上一個if語句的判斷結果即使成立,下一個if語句也不會跳過,仍然會進行條件判斷。所以,x=-2在第一個if語句處會被賦值為0并繼續執行,在第二個if語句判斷為真,第三個if語句判斷為假時,再跳到else語句。

3.5.4 循環結構

這里介紹Python中的for循環結構和while循環結構。循環語句用于遍歷可迭代對象的所有取值或元素,每一個被遍歷到的取值或元素執行指定的程序并輸出。這里,可迭代對象指可以被遍歷的對象,比如列表、元組、字典等。

1. for循環

下面是一個for循環例子,i指代可迭代對象a中的一個元素。for循環條件以冒號結束,并換行縮進。第二行是每次循環執行的語句,這里是打印列表a中的每一個元素。

> a = [1,2,3,4,5]
> for i in a:
> print(i)
1
2
3
4
5

上述操作也可以通過遍歷可迭代對象的索引來完成。列表a一共有5個元素,range(len(a))表示生成列表a的索引序列,這里打印索引并打印向量a索引下的取值。

> a = ['Mary', 'had', 'a', 'little', 'lamb']
> for i in range(len(a)):
>    print(i, a[i])
(0, 'Mary')
(1, 'had')
(2, 'a')
(3, 'little')
(4, 'lamb')
2. while循環

while循環一般會設定一個終止條件,中間輸出值會隨著程序運行而發生變化。當輸出滿足條件時,循環終止。while循環可以通過條件制定循環次數,例如通過計數器來終止循環,如下所示。計數器count每循環一次自增1,當count為5時,while條件為假,終止循環。

>count = 1
>while count < 5:
>    count = count + 1
>    print(count)
2
3
4
5

下面是一個比較特殊的示例,演示如何按照指定條件循環而不考慮循環的次數,例如編寫循環程序使x不斷減少,當x小于0.0001時,終止循環,代碼如下。

>x=10
>count = 0
>while True:
>    count = count + 1
>    x = x - 0.02*x
>    if x< 0.0001:
>        break
>print (x,count)
(9.973857171889038e-05, 570)

上例中,while循環代碼中使用了break語句,表示滿足條件時終止循環。此外,我們也可通過continue、pass對循環進行控制。continue表示繼續進行循環,如下代碼嘗試使用continue和break語句打印10以內能夠被3整除的整數。

1)使用continue語句,示例如下:

>count = 0
>while count < 10:
>    count = count + 1
>    if count % 3 == 0:
>        print(count)
>        continue
    3
    6
    9

2)使用break語句,示例如下:

>count = 0
>while count < 10:
>    count = count + 1
>if count % 3 == 0:
>        print(count)
>        break
    3

3)使用pass語句,示例如下:

>count = 0
>while count < 10:
>    count = count + 1
>    if count % 3 == 0:
>        pass
>else:
>        print(count)
    1
    2
    4
    5
    7
    8
    10
3. 表達式

在Python中,諸如列表、元組、集合、字典都是可迭代對象。Python為這些對象的遍歷提供了更加簡潔的寫法。例如對列表對象x的遍歷,且每個元素除以10:

>x = [1,2,3,4,5]
>[i/10 for i in x]
[0.1, 0.2, 0.3, 0.4, 0.5]

上述[i/10 for i in x]的寫法稱為列表表達式,這種寫法比for循環更加簡便。此外,對于元組對象、集合對象、字典對象,這種寫法依舊適用,且最終會產生一個列表對象。

>x = (1,2,3,4,5)    #元組
>[i/10 for i in x]
[0.1, 0.2, 0.3, 0.4, 0.5]
>x = set((1,2,3,4,5))  #集合
>[i/10 for i in x]
[0.1, 0.2, 0.3, 0.4, 0.5]
>x = {'a':2,'b':2,'c':5}  #字典
>[i for i in x.keys()]
['a', 'c', 'b']
>[i for i in x.values()]
[1, 3, 2]
主站蜘蛛池模板: 广丰县| 定边县| 荔浦县| 高淳县| 南江县| 宣威市| 雷山县| 昭觉县| 开远市| 八宿县| 阳西县| 镇远县| 勐海县| 沁阳市| 周口市| 光泽县| 固安县| 满城县| 新巴尔虎右旗| 彭州市| 浦北县| 顺义区| 台前县| 彩票| 株洲县| 额济纳旗| 河池市| 文昌市| 西乌珠穆沁旗| 天津市| 仁化县| 曲麻莱县| 珲春市| 布尔津县| 忻州市| 汤原县| 桓台县| 宜城市| 四会市| 三亚市| 侯马市|