您好,登錄后才能下訂單哦!
《Python從小白到大?!芬呀?jīng)上市!
程序設(shè)計(jì)中的控制語(yǔ)句有三種,即順序、分支和循環(huán)語(yǔ)句。Python程序通過(guò)控制語(yǔ)句來(lái)管理程序流,完成一定的任務(wù)。程序流是由若干個(gè)語(yǔ)句組成的,語(yǔ)句可以是一條單一的語(yǔ)句,也可以是復(fù)合語(yǔ)句。Python中的控制語(yǔ)句有以下幾類:
分支語(yǔ)句:if
循環(huán)語(yǔ)句:while和for
分支語(yǔ)句提供了一種控制機(jī)制,使得程序具有了“判斷能力”,能夠像人類的大腦一樣分析問(wèn)題。分支語(yǔ)句又稱條件語(yǔ)句,條件語(yǔ)句使部分程序可根據(jù)某些表達(dá)式的值被有選擇地執(zhí)行。
Python中的分支語(yǔ)句只有if語(yǔ)句。if語(yǔ)句有三種結(jié)構(gòu):if結(jié)構(gòu)、if-else結(jié)構(gòu)和elif結(jié)構(gòu)三種。
如果條件計(jì)算為True就執(zhí)行語(yǔ)句組,否則就執(zhí)行if結(jié)構(gòu)后面的語(yǔ)句。語(yǔ)法結(jié)構(gòu)如下:
if 條件 :
語(yǔ)句組
if結(jié)構(gòu)示例代碼如下:
# coding=utf-8
# 代碼文件:chapter8/8.1.1/hello.py
import sys
score = int(sys.argv[1]) # 獲得命令行傳入的參數(shù) ①
if score >= 85:
print("您真優(yōu)秀!")
if score < 60:
print("您需要加倍努力!")
if (score >= 60) and (score < 85):
print("您的成績(jī)還可以,仍需繼續(xù)努力!")
為了靈活輸入分?jǐn)?shù)(score)本例中使用了sys.argv,sys.argv能夠返回命令行參數(shù)列表,見(jiàn)代碼第①行。sys.argv[1]返回參數(shù)列表的第二個(gè)元素,因?yàn)榈谝粋€(gè)元素(sys.argv[0])是執(zhí)行的Python文件名。由于參數(shù)列表中元素的字符串,所以還需要使用int函數(shù)將字符串轉(zhuǎn)換為int類型。另外,為了使用sys.argv命令行參數(shù)列表,還需要在文件開(kāi)始通過(guò)import
sys語(yǔ)句導(dǎo)入sys模塊。
執(zhí)行時(shí)需要打開(kāi)Windows命令行提示符,輸入如下指令,如圖8-1所示。
python ch8.1.1.py 80
如果在程序需要獲取sys.argv[0]元素返回值是ch8.1.1.py。
注意 使用sys.argv獲取命令行參數(shù)列表的程序代碼,不能在Python
Shell環(huán)境下運(yùn)行獲得參數(shù)列表。
幾乎所有的計(jì)算機(jī)語(yǔ)言都有這個(gè)結(jié)構(gòu),而且結(jié)構(gòu)的格式基本相同,語(yǔ)句如下:
if 條件 :
語(yǔ)句組1
else :
語(yǔ)句組2
當(dāng)程序執(zhí)行到if語(yǔ)句時(shí),先判斷條件,如果值為True,則執(zhí)行語(yǔ)句組1,然后跳過(guò)else語(yǔ)句及語(yǔ)句組2,繼續(xù)執(zhí)行后面的語(yǔ)句。如果條件為False,則忽略語(yǔ)句組1而直接執(zhí)行語(yǔ)句組2,然后繼續(xù)執(zhí)行后面的語(yǔ)句。
if-else結(jié)構(gòu)示例代碼如下:
# coding=utf-8
# 代碼文件:chapter8/ch8.1.2.py
import sys
score = int(sys.argv[1]) # 獲得命令行傳入的參數(shù)
if score >= 60:
print("及格")
if score >= 90:
print("優(yōu)秀")
else:
print("不及格")
示例執(zhí)行過(guò)程參考8.1.1節(jié),這里不再贅述。
elif結(jié)構(gòu)如下:
if 條件1 :
語(yǔ)句組1
elif 條件2 :
語(yǔ)句組2
elif 條件3 :
語(yǔ)句組3
...
elif 條件n :
語(yǔ)句組n
else :
語(yǔ)句組n+1
可以看出,elif結(jié)構(gòu)實(shí)際上是if-else結(jié)構(gòu)的多層嵌套,它明顯的特點(diǎn)就是在多個(gè)分支中只執(zhí)行一個(gè)語(yǔ)句組,而其他分支都不執(zhí)行,所以這種結(jié)構(gòu)可以用于有多種判斷結(jié)果的分支中。
elif結(jié)構(gòu)示例代碼如下:
# coding=utf-8
# 代碼文件:chapter8/ch8.1.3.py
import sys
score = int(sys.argv[1]) # 獲得命令行傳入的參數(shù)
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)
示例執(zhí)行過(guò)程參考8.1.1節(jié),這里不再贅述。
在前面學(xué)習(xí)運(yùn)算符時(shí),并沒(méi)有提到類似Java語(yǔ)言的三元運(yùn)算符[^1]。為提供類似的功能Python提供了條件表達(dá)式,條件表達(dá)式語(yǔ)法如下:
[^1]: 三元運(yùn)算符的語(yǔ)法形式:條件 ? 表達(dá)式1 :
表達(dá)式2,當(dāng)條件為真時(shí),表達(dá)式1返回,否則表達(dá)式2返回。
> 表達(dá)式1 if 條件 else 表達(dá)式2
其中,當(dāng)條件計(jì)算為True時(shí),返回表達(dá)式1,否則返回表達(dá)式2。
條件表達(dá)式例代碼如下:
# coding=utf-8
# 代碼文件:chapter8/ch8.1.4.py
import sys
score = int(sys.argv[1]) # 獲得命令行傳入的參數(shù)
result = '及格' if score >= 60 else '不及格'
print(result)
示例執(zhí)行過(guò)程參考8.1.1節(jié),這里不再贅述。
從示例可見(jiàn),條件表達(dá)式事實(shí)上就是if-else結(jié)構(gòu),而普通的if-else結(jié)構(gòu)不是表達(dá)式,不會(huì)有返回值,而條件表達(dá)式比較進(jìn)行條件判斷,而且還會(huì)有返回值。
循環(huán)語(yǔ)句能夠使程序代碼重復(fù)執(zhí)行。Python支持兩種循環(huán)構(gòu)造類型:while和for。
while語(yǔ)句是一種先判斷的循環(huán)結(jié)構(gòu),格式如下:
while 循環(huán)條件 :
語(yǔ)句組
[else:
語(yǔ)句組]
while循環(huán)沒(méi)有初始化語(yǔ)句,循環(huán)次數(shù)是不可知的,只要循環(huán)條件滿足,循環(huán)就會(huì)一直執(zhí)行循環(huán)體。while循環(huán)中可以帶有else語(yǔ)句,else語(yǔ)句將在8.3節(jié)詳細(xì)介紹。
下面看一個(gè)簡(jiǎn)單的示例,代碼如下:
# 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))
輸出結(jié)果如下:
i = 317
i * i = 100489
上述程序代碼的目的是找到平方數(shù)小于100_000的最大整數(shù)。使用while循環(huán)需要注意幾點(diǎn),while循環(huán)條件語(yǔ)句中只能寫一個(gè)表達(dá)式,而且是一個(gè)布爾型表達(dá)式,那么如果循環(huán)體中需要循環(huán)變量,就必須在while語(yǔ)句之前對(duì)循環(huán)變量進(jìn)行初始化。本例中先給i賦值為0,然后在循環(huán)體內(nèi)部必須通過(guò)語(yǔ)句更改循環(huán)變量的值,否則將會(huì)發(fā)生死循環(huán)。
提示
為了閱讀方便,整數(shù)和浮點(diǎn)數(shù)均可添加多個(gè)0或下劃線以提高可讀性,如000.01563和_360_000,兩種格式均不會(huì)影響實(shí)際值。下劃線一般是每三位加一個(gè)。
for語(yǔ)句是應(yīng)用最廣泛、功能最強(qiáng)的一種循環(huán)語(yǔ)句。Python語(yǔ)言中沒(méi)有C語(yǔ)言風(fēng)格的for語(yǔ)句,它的for語(yǔ)句相等于Java中增強(qiáng)for循環(huán)語(yǔ)句,只用于對(duì)序列,序列包括字符串、列表和元組進(jìn)行遍歷。
for語(yǔ)句一般格式如下:
for 迭代變量 in 序列 :
語(yǔ)句組
[else:
語(yǔ)句組]
“序列”表示所有的實(shí)現(xiàn)序列的類型都可以使用for循環(huán)。“迭代變量”是從序列中迭代取出的元素,然后執(zhí)行循環(huán)體。for循環(huán)中也可以帶有else語(yǔ)句,else語(yǔ)句將在8.3節(jié)詳細(xì)介紹。
示例代碼如下:
# 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語(yǔ)句
for item in 'Hello': ②
print(item)
# 聲明整數(shù)列表
numbers = [43, 32, 53, 54, 75, 7, 10] ③
print("----整數(shù)列表-------")
# for語(yǔ)句
for item in numbers: ④
print("Count is : {0}".format(item))
輸出結(jié)果:
----范圍-------
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
----整數(shù)列表-------
Count is : 43
Count is : 32
Count is : 53
Count is : 54
Count is : 75
Count is : 7
Count is : 10
上述代碼第①行range(1, 10)函數(shù)是創(chuàng)建范圍(range)對(duì)象,它的取值是1 ≤ range(1, 10)
\< 10,步長(zhǎng)為1,總共10整數(shù)。范圍也一種整數(shù)序列,關(guān)于范圍會(huì)在8.4節(jié)詳細(xì)介紹。
代碼第②行是循環(huán)字符串Hello,字符串也是一個(gè)序列,所以可以用for循環(huán)變量。
代碼第③行是定義整數(shù)列表,關(guān)于列表會(huì)在后面第9章詳細(xì)介紹。代碼第④行是遍歷列表numbers。
跳轉(zhuǎn)語(yǔ)句能夠改變程序的執(zhí)行順序,可以實(shí)現(xiàn)程序的跳轉(zhuǎn)。Python有3種跳轉(zhuǎn)語(yǔ)句:break、continue和return。本節(jié)重點(diǎn)介紹break和continue語(yǔ)句的使用。return將后面章節(jié)介紹。
break語(yǔ)句可用于上一節(jié)介紹的while和for循環(huán)結(jié)構(gòu),它的作用是強(qiáng)行退出循環(huán)體,不再執(zhí)行循環(huán)體中剩余的語(yǔ)句。
下面看一個(gè)示例,代碼如下:
# coding=utf-8
# 代碼文件:chapter8/ch8.3.1.py
for item in range(10):
if item == 3:
# 跳出循環(huán)
break
print("Count is : {0}".format(item))
在上述程序代碼中,當(dāng)條件item
==3的時(shí)候執(zhí)行break語(yǔ)句,break語(yǔ)句會(huì)終止循環(huán)。range(10)函數(shù)省略了開(kāi)始參數(shù),默認(rèn)是從0開(kāi)始的。程序運(yùn)行的結(jié)果如下:
Count is : 0
Count is : 1
Count is : 2
continue語(yǔ)句用來(lái)結(jié)束本次循環(huán),跳過(guò)循環(huán)體中尚未執(zhí)行的語(yǔ)句,接著進(jìn)行終止條件的判斷,以決定是否繼續(xù)循環(huán)。
下面看一個(gè)示例,代碼如下:
# coding=utf-8
# 代碼文件:chapter8/ch8.3.2.py
for item in range(10):
if item == 3:
continue
print("Count is : {0}".format(item))
在上述程序代碼中,當(dāng)條件item
==3的時(shí)候執(zhí)行continue語(yǔ)句,continue語(yǔ)句會(huì)終止本次循環(huán),循環(huán)體中continue之后的語(yǔ)句將不再執(zhí)行,接著進(jìn)行下次循環(huán),所以輸出結(jié)果中沒(méi)有3。程序運(yùn)行結(jié)果如下:
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
在前面8.2節(jié)介紹while和for循環(huán)時(shí),還提到他們都可以跟有else語(yǔ)句,它與if語(yǔ)句中的else不同。這里的else是在循環(huán)體正常結(jié)束時(shí)才運(yùn)行的代碼,當(dāng)循環(huán)被中斷時(shí)不執(zhí)行,break、return和異常拋出都會(huì)中斷循環(huán)。循環(huán)中的else語(yǔ)句流程圖如圖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!')
運(yùn)行結(jié)果如下:
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
While Over!
-------------
Count is : 0
Count is : 1
Count is : 2
上述代碼中在while循環(huán)中break語(yǔ)句被注釋了,因此會(huì)進(jìn)入else語(yǔ)句,所以最后輸出While
Over!。而在for循環(huán)中當(dāng)條件滿足時(shí)break語(yǔ)句執(zhí)行,程序不會(huì)進(jìn)入else語(yǔ)句,最后沒(méi)有輸出For
Over!。
在前面的學(xué)習(xí)過(guò)程中多次需要使用范圍,范圍在Python中類型是range,表示一個(gè)整數(shù)序列,創(chuàng)建范圍對(duì)象使用range()函數(shù),range()函數(shù)語(yǔ)法如下:
range([start,] stop[, step])
三個(gè)參數(shù)全部是整數(shù)類型,其中start是開(kāi)始值,可以省略,表示從0開(kāi)始;stop是結(jié)束值;step是步長(zhǎng)。注意start
≤ 整數(shù)序列取值 \< stop,步長(zhǎng)step可以為負(fù)數(shù),可以創(chuàng)建遞減序列。
示例代碼如下:
# 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))
輸出結(jié)果如下:
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
上述代碼第①行是創(chuàng)建一個(gè)范圍,步長(zhǎng)是2,包含的元素見(jiàn)輸出結(jié)果,有5個(gè)元素。代碼第②行是創(chuàng)建一個(gè)遞減范圍,步長(zhǎng)是-3,包含的元素見(jiàn)輸出結(jié)果,有4個(gè)元素,包含的元素見(jiàn)輸出結(jié)果。
通過(guò)對(duì)本章內(nèi)容的學(xué)習(xí),讀者可以了解到Python語(yǔ)言的控制語(yǔ)句,其中包括分支語(yǔ)句if、循環(huán)語(yǔ)句(while和for)和跳轉(zhuǎn)語(yǔ)句(break和continue)等。最后還介紹了范圍。
http://edu.51cto.com/sd/f907b
http://www.zhijieketang.com/group/8
https://yuedu.baidu.com/ebook/5823871e59fafab069dc5022aaea998fcc2240fc
作者微博:@tony_關(guān)東升郵箱:eorient@sina.com
br/>郵箱:eorient@sina.com
Python讀者服務(wù)QQ群:628808216
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。