Python中的循環(huán)語句詳細(xì)代碼示例
導(dǎo)讀
大家好,很高興又和大家見面啦?。?!
在上一篇內(nèi)容中我們介紹了條件語句的相關(guān)內(nèi)容,我們先簡(jiǎn)單的回顧一下:
在Python中有兩種條件語句——if語句和match……case語句。其中if語句是由關(guān)鍵字if、elif、else引導(dǎo)的特定語句塊,而match……case是在Python 3.10之后新增的一種條件語句,并且match與case并不是Python中的關(guān)鍵字,也就是說我們?cè)跊]有使用match……case語法結(jié)構(gòu)時(shí),是可以定義重名的變量的。
在if語句中有三種形式的分支語句:
- 單分支語句——由
if引導(dǎo)的條件語句,其語法格式為:
if True: # True代表的是語句中的判斷語句
pass # pass——空語句,代表的是if語句塊中的語句
- 雙分支語句——由
if……else引導(dǎo)的條件語句,其語法格式為:
if True: # if后帶有判斷語句
pass
else: # else后不帶判斷語句
pass
- 多分支語句——由
if……elif……else引導(dǎo)的條件語句,其語法格式為:
if 1:
pass
elif 2: # elif可以存在多個(gè)
pass
else:
pass
if條件語句還有兩種使用方式:
- if嵌套使用,嵌套格式如下所示:
if True:
if True: # 在if語句的任一分支中都能繼續(xù)使用if語句
# ……
pass
else:
pass
pass
else:
pass
pass
- 省略else,在兩種情況下可以省略else語句:
- 不需要借助
else語句的判斷邏輯,可以省略else,其語法結(jié)構(gòu)如下:
# 雙分支或多分支語句中不需要使用else的判斷邏輯時(shí)可以省略else
if True:
pass
pass # 雙分支語句省略else變?yōu)閱畏种дZ句
if 1:
pass
elif 2:
pass
pass # 三分支語句省略else變?yōu)殡p分支語句
- 在
if、elif語句中存在轉(zhuǎn)向語句的情況,可以省略else,其語法結(jié)構(gòu)如下:
def ignoreElse():
# 在函數(shù)中if、elif分支中存在轉(zhuǎn)向語句return,可以省略else
if True:
return True
return False
while True:
# 在循環(huán)語句中,if、elif分支中存在轉(zhuǎn)向語句break、continue,可以省略else
if 1:
continue
elif 2:
break
pass
match……case語句的用法與C/C++中的開關(guān)語句(Switch語句)的使用方式一致,通過match作為語句的引導(dǎo)詞,case作為語句中各分支的引導(dǎo)詞,其語法格式如下所示:
a = 1
match a + 1: # match 引導(dǎo)詞后跟一個(gè)表達(dá)式
case 1: # case 引導(dǎo)詞后可以跟常量、變量、函數(shù)、通配符等
pass # case 語句塊中的內(nèi)容都是獨(dú)立的語句塊
case 2:
pass
case _: # 通配符_ 可以指代一切內(nèi)容,相當(dāng)于default
pass
但是match……case語句要比Switch語句的功能強(qiáng)大:
Switch引導(dǎo)詞后只能跟一個(gè)整型表達(dá)式,而match引導(dǎo)詞后可以跟一個(gè)任一類型的表達(dá)式Switch語句中case引導(dǎo)詞后只能跟整型常量表達(dá)式,而match語句中case引導(dǎo)詞后可以跟常量、變量、函數(shù)……Switch語句中case分支是連通的需要借助break將分支給獨(dú)立出來,match語句中case分支是相互獨(dú)立的
復(fù)習(xí)完了Python中的分支語句的內(nèi)容,下面我們來看一下Python中的第二類控制語句——循環(huán)語句,
一、基本概念
循環(huán)語句指的是能夠重復(fù)執(zhí)行同一件事情的語句,是循環(huán)結(jié)構(gòu)的具體體現(xiàn)。
1.1 循環(huán)語句的執(zhí)行流程
循環(huán)語句的執(zhí)行流程如下所示:

在循環(huán)語句中循環(huán)體中可以是空語句,但是下面三條語句是一個(gè)循環(huán)語句中必不可少的內(nèi)容:
- 循環(huán)對(duì)象語句——在循環(huán)語句中參與循環(huán)的對(duì)象
- 循環(huán)判斷語句——通過判斷語句的值來決定是否進(jìn)入循環(huán)
- 循環(huán)遞進(jìn)語句——循環(huán)對(duì)象通過遞進(jìn)語句逐漸向循環(huán)的結(jié)束條件靠近
1.2 循環(huán)語句的分類
C/C++中有三種循環(huán)語句——while循環(huán)語句、for循環(huán)語句以及do……while循環(huán)語句除了這三種循環(huán)語句外我們還可以通過goto語句來實(shí)現(xiàn)循環(huán);
但是在Python中,只存在兩種形式的循環(huán)語句——while循環(huán)語句和for循環(huán)語句。Python中的循環(huán)語句與C/C++中所對(duì)應(yīng)的while循環(huán)語句與for循環(huán)語句有相同點(diǎn)也有不同點(diǎn),接下來我們就分別來看一下這兩種語言中的while語句與for語句之間的差異;
二、while語句
在C/C++中while語句的語法結(jié)構(gòu)如下所示:
int i = 1;//循環(huán)對(duì)象語句
while (i != 100) {
//while——語句引導(dǎo)詞
//i != 100——循環(huán)判斷語句
printf("%d\n", i);//循環(huán)體語句——循環(huán)語句需要執(zhí)行的具體內(nèi)容,可以為空語句
i++;//循環(huán)遞進(jìn)語句——對(duì)象語句根據(jù)遞進(jìn)語句逐漸靠近循環(huán)的介紹條件
}
在Python中while語句的語法結(jié)構(gòu)與該結(jié)構(gòu)相似,但還是會(huì)有些許區(qū)別:
i = 1 # 循環(huán)對(duì)象語句
while i != 100:
# while——語句引導(dǎo)詞
# i != 100——循環(huán)判斷語句
print(i) # 循環(huán)體語句——循環(huán)語句中需要執(zhí)行的具體內(nèi)容
i += 1 # 循環(huán)遞進(jìn)語句——循環(huán)對(duì)象根據(jù)遞進(jìn)語句逐漸靠近循環(huán)的介紹條件
while語句的語法結(jié)構(gòu)在兩種語言中唯一的不同在于判斷語句的表示,在C/C++中,判斷語句會(huì)通過圓括號(hào)'()'括起來,但是在Python中,判斷語句則是通過冒號(hào)':'來表示判斷語句的結(jié)束。
需要注意的是,在C/C++中如果遞進(jìn)語句是逐個(gè)遞進(jìn),那我們可以通過前置'++'/'--'或者后置'++'/'--'來完成語句的遞進(jìn),但是在Python中舍棄了這類操作符,在自增自減的遞進(jìn)語句中,可以通過賦值運(yùn)算符來實(shí)現(xiàn)自增自減的操作。
while語句是循環(huán)語句的最基礎(chǔ)的一種語法,語法的使用上也比較簡(jiǎn)單,這里就不再繼續(xù)贅述,下面我們繼續(xù)來看一下for語句在兩種語言中的異同點(diǎn);
三、for語句
在while語句中,語句的循環(huán)對(duì)象位于語句的外部,循環(huán)遞進(jìn)語句則位于循環(huán)體中,它們?nèi)咴谖恢蒙铣尸F(xiàn)的是一種上下關(guān)系,這樣就容易出現(xiàn)一種情況——當(dāng)循環(huán)對(duì)象語句與while引導(dǎo)詞中間的語句內(nèi)容過多或者循環(huán)體中的語句比較多時(shí),導(dǎo)致循環(huán)對(duì)象語句、判斷語句以及循環(huán)遞進(jìn)語句間隔太遠(yuǎn)。
在這種情況下如果在循環(huán)語句中出現(xiàn)問題時(shí),我們想要修改這三者中的其中之一,則會(huì)需要花費(fèi)大量的時(shí)間去一一尋找這三條語句。因此如果我們?cè)诰帉懷h(huán)語句時(shí),需要盡可能的讓這三條語句靠近一些。
在計(jì)算機(jī)語言中,for循環(huán)語句就很好的彌補(bǔ)了while語句中的這個(gè)問題,下面我們先來看一下C/C++中的for語句的語法結(jié)構(gòu),如下所示:
for (int i = 1; i != 100; i++) {
printf("%d\n", i);
}
可以看到,在C/C++的for語句中,循環(huán)對(duì)象語句、循環(huán)判斷語句、循環(huán)遞進(jìn)語句都位于引導(dǎo)詞for后面的圓括號(hào)內(nèi)'()',這樣就能在我們需要修改這三者中的任一一條語句時(shí),就能通過循環(huán)語句引導(dǎo)詞for很輕松的找到這三條語句。
在Python中,for語句的語法結(jié)構(gòu)與C/C++的for語句的語法結(jié)構(gòu)有很大的不同,如下所示:
for i in range(1, 101):
print(i)
# i——循環(huán)對(duì)象
# in——成員運(yùn)算符
# range()——可迭代對(duì)象,也可以是字符串、元組、列表……
在Python中,for循環(huán)語句的判斷語句與遞進(jìn)語句都被整合到了可迭代對(duì)象中??傻鷮?duì)象指的是一種特殊的變量~內(nèi)部包含了很多其他的值。循環(huán)體在執(zhí)行時(shí),可以通過成員運(yùn)算符'in'將可迭代對(duì)象中的值一個(gè)一個(gè)的取出來并存放在循環(huán)對(duì)象變量中。
這里展示的可迭代對(duì)象range(),是一個(gè)可以依次獲取參數(shù)區(qū)間內(nèi)整數(shù)的內(nèi)建函數(shù),該函數(shù)的區(qū)間為前閉后開區(qū)間,也就是說對(duì)于區(qū)間1~101我們通過成員運(yùn)算符'in'可以從函數(shù)中獲取到的內(nèi)容為1~100的所有整數(shù)。
在循環(huán)語句中我們還可以通過轉(zhuǎn)向語句來控制循環(huán)體語句的執(zhí)行邏輯,在C/C++中循環(huán)體中的轉(zhuǎn)向語句有兩種——break與continue,在Python中,這兩種轉(zhuǎn)向語句同樣適用,下面我們就來看一下Python中的break與continue的用法
四、break與continue
在循環(huán)語句中,break可以用來立即結(jié)束循環(huán)并跳出循環(huán),continue可以用來立即結(jié)束當(dāng)前循環(huán)開始進(jìn)入下一次循環(huán),具體用法如下所示:

從測(cè)試中可以看到,通過for循環(huán)語句我們完成了從1到100 的打印,當(dāng)在循環(huán)中加入break與continue之后,循環(huán)的執(zhí)行邏輯發(fā)生了變化:
- 在
i == 10時(shí),第一個(gè)if語句能夠正常執(zhí)行,也就是說此時(shí)循環(huán)體中執(zhí)行的是轉(zhuǎn)向與continue,可以看到continue后的print語句并沒有執(zhí)行,而是直接進(jìn)入了下一次循環(huán)打印i == 11; - 在
i == 20時(shí),在完成打印后,第二個(gè)if語句能夠正常執(zhí)行,也就是說此時(shí)循環(huán)體中執(zhí)行的是轉(zhuǎn)向語句break,可以看到在執(zhí)行完break后,循環(huán)并未繼續(xù)執(zhí)行,而是執(zhí)行了循環(huán)外的print語句;
這個(gè)例子很好的說明了這兩個(gè)轉(zhuǎn)向語句在循環(huán)中的用法:
continue——用于結(jié)束當(dāng)前循環(huán),continue后的語句不再執(zhí)行,程序立即進(jìn)入下一次循環(huán)break——用于結(jié)束循環(huán),程序直接跳出循環(huán),執(zhí)行循環(huán)外的語句
五、死循環(huán)
死循環(huán)也就是無線循環(huán)——循環(huán)無法停止,會(huì)一直運(yùn)行。當(dāng)我們?cè)趯懗绦驎r(shí),最怕的就是遇到死循環(huán),會(huì)導(dǎo)致死循環(huán)的原因主要有以下幾點(diǎn):
- 判斷語句的值永遠(yuǎn)為真
- 缺少遞進(jìn)語句導(dǎo)致判斷語句恒成立
- 遞進(jìn)語句的遞進(jìn)方向錯(cuò)誤,導(dǎo)致循環(huán)對(duì)象逐漸遠(yuǎn)離循環(huán)的結(jié)束條件
下面我們通過一個(gè)最簡(jiǎn)單的死循環(huán)來認(rèn)識(shí)什么是死循環(huán):

可以看到此時(shí)程序已經(jīng)運(yùn)行到了i==1622878任然未停止運(yùn)行,之所以無法停止,正是因?yàn)樵谠撗h(huán)中判斷條件一直成立,且循環(huán)體內(nèi)沒有轉(zhuǎn)向語句break來結(jié)束循環(huán),因此循環(huán)進(jìn)入了死循環(huán)。
那是不是說所有的死循環(huán)都是不合理的呢?
實(shí)際上并不是這樣,比如一款游戲的運(yùn)行,當(dāng)我們?cè)诮Y(jié)束一句游戲后,如果游戲就直接退出了,那我們想要開啟下一句游戲,只能夠重新啟動(dòng)該游戲,顯然這種設(shè)計(jì)是不合理的,因此我們就可以設(shè)置死循環(huán),并通過轉(zhuǎn)向語句來控制循環(huán)的結(jié)局,如下所示:

可以看到,同樣的代碼,當(dāng)我們?cè)谘h(huán)體中添加了轉(zhuǎn)向語句后循環(huán)變不再是死循環(huán)了。
設(shè)想一下,如果我們是將條件語句的判斷條件改為輸入某個(gè)值,或者檢測(cè)鍵盤按下了某個(gè)按鍵,或者鼠標(biāo)點(diǎn)擊了某個(gè)按鍵,才會(huì)執(zhí)行轉(zhuǎn)向語句,這樣我們是不是就能夠保證即使一局游戲結(jié)束后,不會(huì)第一時(shí)間退出程序,而是會(huì)繼續(xù)運(yùn)行了。
因此合理的利用死循環(huán)和轉(zhuǎn)向語句,能夠幫助我們實(shí)現(xiàn)更多的操作。
六、循環(huán)中的else語句
在Python中對(duì)于循環(huán)語句而言,新增了一個(gè)語法——else語句:
- while……else語句
- for……else語句
這種語法就是在雙分支語句的基礎(chǔ)上將if語句替換成了循環(huán)語句,如下所示:

看到這里,有朋友就會(huì)好奇了,這跟不加else有什么區(qū)別?不一樣的都是在不滿足循環(huán)條件時(shí)運(yùn)行循環(huán)體外的語句嗎?
如果我們只是看這個(gè)測(cè)試代碼,確實(shí),循環(huán)語句后加一個(gè)else語句與不加else語句并無區(qū)別,但是當(dāng)我們?cè)谘h(huán)體中加入了轉(zhuǎn)向語句后,我們就能知道他們的區(qū)別在哪里了,如下所示:

從測(cè)試結(jié)果中大家應(yīng)該能夠明白在循環(huán)語句后加了else語句與不加else語句的區(qū)別了。
循環(huán)……else語句就像雙分支條件語句一樣,它們是一個(gè)整體,對(duì)于轉(zhuǎn)向語句break與continue而言,它們的作用是用來結(jié)束循環(huán)語句,因此,當(dāng)循環(huán)體中出現(xiàn)轉(zhuǎn)向語句時(shí),會(huì)直接結(jié)束整個(gè)循環(huán),包括else語句。
下面我們通過一個(gè)例子來說明該語法的運(yùn)用場(chǎng)景:

可以看到實(shí)現(xiàn)同樣功能的代碼,第一次加了else,第二次沒有加else,但是輸出的結(jié)果卻不相同,第二次比第一次多輸出了一行信息。
導(dǎo)致這種錯(cuò)誤的原因是因?yàn)閷?duì)于該功能而言,我們?cè)趯?shí)際的運(yùn)行中只會(huì)嘗試兩種結(jié)果——是質(zhì)數(shù)與不是質(zhì)數(shù),也就是說這兩種判斷結(jié)果我們只需要輸出其中之一。
- 當(dāng)我們通過
else語句來控制時(shí),能完美的實(shí)現(xiàn)二者輸出其一的操作; - 但是當(dāng)我們不加
else時(shí),第二個(gè)print語句屬于第一層循環(huán)的循環(huán)體中的內(nèi)容,因此第二層循環(huán)的循環(huán)體中的break語句無法對(duì)其生效,所以會(huì)導(dǎo)致進(jìn)行重復(fù)輸出的情況。
也就是說這種語法結(jié)構(gòu)比較適合需要根據(jù)判斷條件進(jìn)行不同輸出的結(jié)果,并且其中一種判斷條件需要通過循環(huán)來實(shí)現(xiàn)。
七、range()函數(shù)
range()函數(shù)作為Python中的內(nèi)置函數(shù),它的作用是生成一組數(shù)字序列,并將其以可迭代的對(duì)象進(jìn)行返回,其返回值的類型為對(duì)象類型。該函數(shù)語法如下所示:
range(stop) range(start, stop[, step])
函數(shù)中的參數(shù)的含義依次為:
- start: 計(jì)數(shù)從 start 開始。默認(rèn)是從 0 開始。例如 range(5) 等價(jià)于 range(0, 5)
- stop: 計(jì)數(shù)到 stop 結(jié)束,但不包括 stop。例如:range(0, 5) 是 [0, 1, 2, 3, 4] 沒有 5
- step:步長(zhǎng),默認(rèn)為 1。例如:range(0, 5) 等價(jià)于 range(0, 5, 1)
這里我們需要了解的是函數(shù)的第三個(gè)參數(shù)——步長(zhǎng)(step)。
所謂的步長(zhǎng),我們可以理解為對(duì)象語句遞進(jìn)的方式,函數(shù)默認(rèn)的步長(zhǎng)為1,其對(duì)象語句會(huì)依次增加1,當(dāng)步長(zhǎng)為n時(shí),其對(duì)象語句依次增加n,如下所示:

下面我們來簡(jiǎn)單總結(jié)一下range函數(shù)的用法:
- range函數(shù)可以用于生成一組數(shù)字序列,并將其作為可迭代對(duì)象返回,返回值的類型為對(duì)象類型;
- range中的三個(gè)參數(shù)分別是序列開始值、序列結(jié)束值以及序列步長(zhǎng);
- 開始值默認(rèn)為0,序列步長(zhǎng)默認(rèn)為1
- 當(dāng)步長(zhǎng)為負(fù)數(shù)時(shí),傳入的序列開始值需要大于結(jié)束值
結(jié)語
到此這篇關(guān)于Python中的循環(huán)語句的文章就介紹到這了,更多相關(guān)Python循環(huán)語句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pyecharts X軸標(biāo)簽太長(zhǎng)被截?cái)嗟膯栴}及解決
這篇文章主要介紹了pyecharts X軸標(biāo)簽太長(zhǎng)被截?cái)嗟膯栴}及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
python讀取csv文件并把文件放入一個(gè)list中的實(shí)例講解
下面小編就為大家分享一篇python讀取csv文件并把文件放入一個(gè)list中的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04
Flask進(jìn)階之構(gòu)建RESTful?API和數(shù)據(jù)庫交互操作
這篇文章主要為大家介紹了Flask進(jìn)階之構(gòu)建RESTful API和數(shù)據(jù)庫交互操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
新手如何發(fā)布Python項(xiàng)目開源包過程詳解
這篇文章主要介紹了新手如何發(fā)布Python項(xiàng)目開源包過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07
Django Admin后臺(tái)添加數(shù)據(jù)庫視圖過程解析
這篇文章主要介紹了Django Admin后臺(tái)添加數(shù)據(jù)庫視圖過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Python使用Tkinter制作一個(gè)進(jìn)制轉(zhuǎn)換工具
在平時(shí)工作學(xué)習(xí)當(dāng)中,我們經(jīng)常會(huì)編寫一些簡(jiǎn)單的 Python GUI 工具,以此來完成各種各樣的自動(dòng)化任務(wù),下面我們就來看看如何使用Python制作一個(gè)進(jìn)制轉(zhuǎn)換工具吧2024-01-01
Python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu)類型詳解(內(nèi)置數(shù)據(jù)容器)
在?Python?中,字典(dict)是一種非常常用的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)鍵值對(duì),這篇文章給大家介紹Python中內(nèi)置的數(shù)據(jù)結(jié)構(gòu)類型詳解(內(nèi)置數(shù)據(jù)容器),感興趣的朋友一起看看吧2025-04-04

