溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

《Python從小白到大?!返?章 控制語(yǔ)句

發(fā)布時(shí)間:2020-04-11 10:00:02 來(lái)源:網(wǎng)絡(luò) 閱讀:460 作者:tony關(guān)東升 欄目:編程語(yǔ)言

《Python從小白到大?!芬呀?jīng)上市!
《Python從小白到大?!返?章 控制語(yǔ)句
程序設(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

  • 跳轉(zhuǎn)語(yǔ)句:break、continue和return

分支語(yǔ)句

分支語(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)三種。

if結(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

《Python從小白到大?!返?章 控制語(yǔ)句

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

注意 使用sys.argv獲取命令行參數(shù)列表的程序代碼,不能在Python
Shell環(huán)境下運(yùn)行獲得參數(shù)列表。

if-else結(jié)構(gòu)

幾乎所有的計(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)

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é),這里不再贅述。

三元運(yùn)算符替代品——條件表達(dá)式

在前面學(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ǔ)句

循環(huán)語(yǔ)句能夠使程序代碼重復(fù)執(zhí)行。Python支持兩種循環(huán)構(gòu)造類型:while和for。

while語(yǔ)句

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ǔ)句

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ǔ)句

跳轉(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ǔ)句

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ǔ)句

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

while和for中的else語(yǔ)句

在前面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所示。

《Python從小白到大?!返?章 控制語(yǔ)句

示例代碼如下:

# 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é)果。

本章小結(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

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI