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

《Python從小白到大牛》已經上市!
《Python從小白到大牛》第8章 控制語句
程序設計中的控制語句有三種,即順序、分支和循環語句。Python程序經過控制語句來管理程序流,完成必定的任務。程序流是由若干個語句組成的,語句能夠是一條單一的語句,也能夠是複合語句。Python中的控制語句有如下幾類:html

  • 分支語句:ifpython

  • 循環語句:while和for微信

  • 跳轉語句:break、continue和return

分支語句

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

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所示。code

python ch8.1.1.py 80

圖8‑1 命令行參數

若是在程序須要獲取sys.argv[0]元素返回值是ch8.1.1.py。orm

注意 使用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所示。

圖8‑2 循環中的else語句

示例代碼以下:

# 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/sd/f907b

配套源代碼

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

電子書

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

做者微博:@tony_關東昇br/>郵箱:eorient@sina.com智捷課堂微信公共號:zhijieketangPython讀者服務QQ羣:628808216

相關文章
相關標籤/搜索