1. 程式人生 > >《Python從小白到大牛》第8章 控制語句

《Python從小白到大牛》第8章 控制語句

r語 重復執行 字符串轉換 聲明 imageview nsh 開始 數列 java語言

程序設計中的控制語句有三種,即順序、分支和循環語句。Python程序通過控制語句來管理程序流,完成一定的任務。程序流是由若幹個語句組成的,語句可以是一條單一的語句,也可以是復合語句。Python中的控制語句有以下幾類:

  • 分支語句:if

  • 循環語句:while和for

  • 跳轉語句:break、continue和return

分支語句

分支語句提供了一種控制機制,使得程序具有了“判斷能力”,能夠像人類的大腦一樣分析問題。分支語句又稱條件語句,條件語句使部分程序可根據某些表達式的值被有選擇地執行。

Python中的分支語句只有if語句。if語句有三種結構:if結構、if-else結構和elif結構三種。

if結構

如果條件計算為True就執行語句組,否則就執行if結構後面的語句。語法結構如下:

if 條件 :
  語句組

if結構示例代碼如下:

# coding=utf-8
# 代碼文件:chapter8/8.1.1/hello.py

import sys

score = int(sys.argv[1]) # 獲得命令行傳入的參數 ①

if score >= 85:
    print("您真優秀!")

if score < 60:
    print("您需要加倍努力!")

if (score >= 60) and (score < 85):
    print("您的成績還可以,仍需繼續努力!")

為了靈活輸入分數(score)本例中使用了sys.argv,sys.argv能夠返回命令行參數列表,見代碼第①行。sys.argv[1]返回參數列表的第二個元素,因為第一個元素(sys.argv[0])是執行的Python文件名。由於參數列表中元素的字符串,所以還需要使用int函數將字符串轉換為int類型。另外,為了使用sys.argv命令行參數列表,還需要在文件開始通過import
sys語句導入sys模塊。

執行時需要打開Windows命令行提示符,輸入如下指令,如圖8-1所示。

python ch8.1.1.py 80

技術分享圖片

如果在程序需要獲取sys.argv[0]元素返回值是ch8.1.1.py。

註意 使用sys.argv獲取命令行參數列表的程序代碼,不能在Python
Shell環境下運行獲得參數列表。

if-else結構

幾乎所有的計算機語言都有這個結構,而且結構的格式基本相同,語句如下:

if 條件 :
   語句組1 
else :
   語句組2 

當程序執行到if語句時,先判斷條件,如果值為True,則執行語句組1,然後跳過else語句及語句組2,繼續執行後面的語句。如果條件為False,則忽略語句組1而直接執行語句組2,然後繼續執行後面的語句。

if-else結構示例代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.1.2.py

import sys

score = int(sys.argv[1])  # 獲得命令行傳入的參數

if score >= 60:
    print("及格")
    if score >= 90:
        print("優秀")
else:
print("不及格")

示例執行過程參考8.1.1節,這裏不再贅述。

elif結構

elif結構如下:

if 條件1 : 
    語句組1 
elif 條件2 :
    語句組2
elif 條件3 :
    語句組3 
... 
elif 條件n :
    語句組n
else :
    語句組n+1

可以看出,elif結構實際上是if-else結構的多層嵌套,它明顯的特點就是在多個分支中只執行一個語句組,而其他分支都不執行,所以這種結構可以用於有多種判斷結果的分支中。

elif結構示例代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.1.3.py

import sys

score = int(sys.argv[1])  # 獲得命令行傳入的參數

if score >= 90:
    grade = ‘A‘
elif score >= 80:
    grade = ‘B‘
elif score >= 70:
    grade = ‘C‘
elif score >= 60:
    grade = ‘D‘
else:
    grade = ‘F‘

print("Grade = " + grade)

示例執行過程參考8.1.1節,這裏不再贅述。

三元運算符替代品——條件表達式

在前面學習運算符時,並沒有提到類似Java語言的三元運算符[^1]。為提供類似的功能Python提供了條件表達式,條件表達式語法如下:
[^1]: 三元運算符的語法形式:條件 ? 表達式1 :
表達式2,當條件為真時,表達式1返回,否則表達式2返回。

>   表達式1 if 條件 else 表達式2

其中,當條件計算為True時,返回表達式1,否則返回表達式2。

條件表達式例代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.1.4.py

import sys

score = int(sys.argv[1])  # 獲得命令行傳入的參數

result = ‘及格‘ if score >= 60 else ‘不及格‘
print(result)

示例執行過程參考8.1.1節,這裏不再贅述。

從示例可見,條件表達式事實上就是if-else結構,而普通的if-else結構不是表達式,不會有返回值,而條件表達式比較進行條件判斷,而且還會有返回值。

循環語句

循環語句能夠使程序代碼重復執行。Python支持兩種循環構造類型:while和for。

while語句

while語句是一種先判斷的循環結構,格式如下:

while 循環條件 : 
    語句組 
[else:    
    語句組]

while循環沒有初始化語句,循環次數是不可知的,只要循環條件滿足,循環就會一直執行循環體。while循環中可以帶有else語句,else語句將在8.3節詳細介紹。

下面看一個簡單的示例,代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.2.1.py

i = 0

while i * i < 100_000:
    i += 1

print("i = {0}".format(i))
print("i * i = {0}".format(i * i))

輸出結果如下:

i = 317
i * i = 100489

上述程序代碼的目的是找到平方數小於100_000的最大整數。使用while循環需要註意幾點,while循環條件語句中只能寫一個表達式,而且是一個布爾型表達式,那麽如果循環體中需要循環變量,就必須在while語句之前對循環變量進行初始化。本例中先給i賦值為0,然後在循環體內部必須通過語句更改循環變量的值,否則將會發生死循環。

提示
為了閱讀方便,整數和浮點數均可添加多個0或下劃線以提高可讀性,如000.01563和_360_000,兩種格式均不會影響實際值。下劃線一般是每三位加一個。

for語句

for語句是應用最廣泛、功能最強的一種循環語句。Python語言中沒有C語言風格的for語句,它的for語句相等於Java中增強for循環語句,只用於對序列,序列包括字符串、列表和元組進行遍歷。

for語句一般格式如下:

for 叠代變量 in 序列 :
  語句組
[else:    
    語句組]

“序列”表示所有的實現序列的類型都可以使用for循環。“叠代變量”是從序列中叠代取出的元素,然後執行循環體。for循環中也可以帶有else語句,else語句將在8.3節詳細介紹。

示例代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.2.2.py

print("----範圍-------")
for num in range(1, 10):  # 使用範圍    ①
    print("{0} x {0} = {1}".format(num, num * num))

print("----字符串-------")
#  for語句
for item in ‘Hello‘:    ②
    print(item)

# 聲明整數列表
numbers = [43, 32, 53, 54, 75, 7, 10]   ③

print("----整數列表-------")

#  for語句
for item in numbers:    ④   
    print("Count is : {0}".format(item))

輸出結果:

----範圍-------
1 x 1 = 1
2 x 2 = 4
3 x 3 = 9
4 x 4 = 16
5 x 5 = 25
6 x 6 = 36
7 x 7 = 49
8 x 8 = 64
9 x 9 = 81
----字符串-------
H
e
l
l
o
----整數列表-------
Count is : 43
Count is : 32
Count is : 53
Count is : 54
Count is : 75
Count is : 7
Count is : 10

上述代碼第①行range(1, 10)函數是創建範圍(range)對象,它的取值是1 ≤ range(1, 10)
\< 10,步長為1,總共10整數。範圍也一種整數序列,關於範圍會在8.4節詳細介紹。

代碼第②行是循環字符串Hello,字符串也是一個序列,所以可以用for循環變量。

代碼第③行是定義整數列表,關於列表會在後面第9章詳細介紹。代碼第④行是遍歷列表numbers。

跳轉語句

跳轉語句能夠改變程序的執行順序,可以實現程序的跳轉。Python有3種跳轉語句:break、continue和return。本節重點介紹break和continue語句的使用。return將後面章節介紹。

break語句

break語句可用於上一節介紹的while和for循環結構,它的作用是強行退出循環體,不再執行循環體中剩余的語句。

下面看一個示例,代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.3.1.py

for item in range(10):
    if item == 3:
        # 跳出循環
        break
    print("Count is : {0}".format(item))

在上述程序代碼中,當條件item
==3的時候執行break語句,break語句會終止循環。range(10)函數省略了開始參數,默認是從0開始的。程序運行的結果如下:

Count is : 0
Count is : 1
Count is : 2

continue語句

continue語句用來結束本次循環,跳過循環體中尚未執行的語句,接著進行終止條件的判斷,以決定是否繼續循環。

下面看一個示例,代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.3.2.py

for item in range(10):
    if item == 3:
        continue
    print("Count is : {0}".format(item))

在上述程序代碼中,當條件item
==3的時候執行continue語句,continue語句會終止本次循環,循環體中continue之後的語句將不再執行,接著進行下次循環,所以輸出結果中沒有3。程序運行結果如下:

Count is: 0
Count is: 1
Count is: 2
Count is: 4
Count is: 5
Count is: 6
Count is: 7
Count is: 8
Count is: 9

while和for中的else語句

在前面8.2節介紹while和for循環時,還提到他們都可以跟有else語句,它與if語句中的else不同。這裏的else是在循環體正常結束時才運行的代碼,當循環被中斷時不執行,break、return和異常拋出都會中斷循環。循環中的else語句流程圖如圖8-2所示。

技術分享圖片

示例代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.3.3.py

i = 0

while i * i < 10:
    i += 1
    # if i == 3:
    #     break
    print("{0} * {0} = {1}".format(i, i * i))
else:
    print(‘While Over!‘)

print(‘-------------‘)

for item in range(10):
    if item == 3:
        break
    print("Count is : {0}".format(item))
else:
    print(‘For Over!‘)

運行結果如下:

1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
While Over!
-------------
Count is : 0
Count is : 1
Count is : 2

上述代碼中在while循環中break語句被註釋了,因此會進入else語句,所以最後輸出While
Over!。而在for循環中當條件滿足時break語句執行,程序不會進入else語句,最後沒有輸出For
Over!。

使用範圍

在前面的學習過程中多次需要使用範圍,範圍在Python中類型是range,表示一個整數序列,創建範圍對象使用range()函數,range()函數語法如下:

range([start,] stop[, step])

三個參數全部是整數類型,其中start是開始值,可以省略,表示從0開始;stop是結束值;step是步長。註意start
≤ 整數序列取值 \< stop,步長step可以為負數,可以創建遞減序列。

示例代碼如下:

# coding=utf-8
# 代碼文件:chapter8/ch8.3.4.py

for item in range(1, 10, 2):        ①
    print("Count is : {0}".format(item))

print(‘--------------‘)

for item in range(1, -10, -3):  ②
    print("Count is : {0}".format(item))

輸出結果如下:

Count is : 1
Count is : 3
Count is : 5
Count is : 7
Count is : 9
--------------
Count is : 0
Count is : -3
Count is : -6
Count is : -9

上述代碼第①行是創建一個範圍,步長是2,包含的元素見輸出結果,有5個元素。代碼第②行是創建一個遞減範圍,步長是-3,包含的元素見輸出結果,有4個元素,包含的元素見輸出結果。

本章小結

通過對本章內容的學習,讀者可以了解到Python語言的控制語句,其中包括分支語句if、循環語句(while和for)和跳轉語句(break和continue)等。最後還介紹了範圍。

配套視頻

http://edu.51cto.com/topic/1507.html

配套源代碼

http://www.zhijieketang.com/group/8

電子書

https://yuedu.baidu.com/ebook/5823871e59fafab069dc5022aaea998fcc2240fc

作者微博:@tony_關東升郵箱:[email protected]
br/>郵箱:[email protected]
Python讀者服務QQ群:628808216

《Python從小白到大牛》第8章 控制語句