跟我讀python3文檔:013_流程控制語句(4. More Control Flow Tools)中

貫穿始終的理念:別廢話拖刃,就是干删壮!


往期回顧

  • 分片
  • 索引
  • 對象
  • 字符串為什么是特殊的列表?
  • if語句

文檔解讀

python3文檔第四小節(jié)鏈接地址:4. More Control Flow Tools

本章主要講解4.2. for Statements(for語句)4.3. The range( ) Function(range()函數(shù))這個(gè)小節(jié)


上一期我們講了if語句兑牡,知道他是分支判斷語句央碟。
這期,我們講解for語句发绢,他是循環(huán)語句硬耍。

依舊用舉例的方式來說明。
假如你是一個(gè)清潔工边酒,你的老板讓你到如下人家去打掃房間经柴。
張三家、李四家墩朦、王二麻子家坯认、小明家。
并且規(guī)定了如下的打掃細(xì)節(jié):
1氓涣、掃地
2牛哺、墩地
3、擦桌子
4劳吠、給人家留言:已經(jīng)打掃完畢

你會(huì)發(fā)現(xiàn)引润,你在不同的人家重復(fù)相同的動(dòng)作。
那么如果用for語句痒玩,如何表達(dá)呢淳附?

for 地點(diǎn) in [ "張三家"、"李四家"蠢古、"王二麻子家"奴曙、"小明家" ] :
    掃地
    墩地
    擦桌子
    print(地點(diǎn)+“已經(jīng)打掃完畢”)  #還記得加號(hào)操作符在字符串中的作用嗎?它可以連接兩個(gè)字符串草讶。

如果當(dāng)作一個(gè)程序運(yùn)行會(huì)得到什么結(jié)果呢洽糟?
你會(huì)得到如下數(shù)據(jù):

張三家已經(jīng)打掃完畢
李四家已經(jīng)打掃完畢
王二麻子家已經(jīng)打掃完畢
小明家已經(jīng)打掃完畢

能看明白嗎?
for語句每次按順序取in后邊的列表里的值堕战,把這個(gè)值賦值給名為地點(diǎn)的變量坤溃,然后取執(zhí)行操作;執(zhí)行完之后嘱丢,for 語句會(huì)把列表里第二個(gè)值賦值給地點(diǎn)變量浇雹,然后執(zhí)行操作。然后在下一個(gè)值屿讽,直到列表里的值都用過一邊(一般稱為遍歷)昭灵。

學(xué)過其他語言的同學(xué)要注意一點(diǎn)吠裆,python的for語句和其他語言的for語句區(qū)別還是很大的,不要搞混~

讓我們看下面的代碼來實(shí)際說明for語句的框架結(jié)構(gòu):

>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words:
...     print(w)
...
cat 3
window 6
defenestrate 12
  1. for烂完、in關(guān)鍵字
  2. 列表 注意:這里其實(shí)有一個(gè)更適合的詞试疙,叫可迭代對象,列表只是其中一種抠蚣。
  3. 分號(hào)
  4. 縮進(jìn)

本期拓展:
上一期我們說if語句可以嵌套祝旷,那么for語句是否可以嵌套?for語句和if語句可以一起用嗎嘶窄?
試試輸入如下代碼怀跛,看看結(jié)果和你想象中的一樣嗎?

>>> for i in [1, 2, 3, 4, 5]:
...    for j in [6, 7, 8, 9]:
...        print(i, j)
...

思考下這里柄冲,兩個(gè)for語句的執(zhí)行順序吻谋。


4.3. The range( ) Function

我們來學(xué)習(xí)幾個(gè)常用的函數(shù)。我們在學(xué)習(xí)編程時(shí)现横,很大一部分是在學(xué)習(xí)函數(shù)的運(yùn)用漓拾。
學(xué)習(xí)函數(shù)一般要注意以下五點(diǎn):

  1. 函數(shù)名
  2. 函數(shù)功能
  3. 函數(shù)參數(shù)
  4. 函數(shù)返回值
  5. 函數(shù)返回值類型

我們以range( )函數(shù)舉例。

range( )函數(shù)會(huì)返回一個(gè)可迭代序列戒祠,比如:range(5),會(huì)從0開始生成5個(gè)數(shù)字:0~4 骇两。
range( )函數(shù)其實(shí)是提供了一個(gè)范圍,我們可以指定這個(gè)范圍的起始和結(jié)束姜盈,也可以指定這個(gè)范圍取值的間隔低千。并且我們也能用列表把它顯示出來:

>>> list(range(5))
[0, 1, 2, 3, 4]

我們用for語句遍歷他,并且用print( )函數(shù)打印他們馏颂,就會(huì)得到下面代碼的結(jié)果示血。

>>> for i in range(5):
...     print(i)
...
0
1
2
3
4

以上說的是函數(shù)名、函數(shù)功能饱亮、函數(shù)返回值與類型。
下面來說函數(shù)的參數(shù)舍沙。

range( ) 函數(shù)有3個(gè)參數(shù)近上。分別指定了起始范圍與間隔。
例如:

>>> list(range(5, 10))        #兩個(gè)參數(shù)表示范圍拂铡,注意包括左值壹无,不包括右值。
[5,6,7,8,9]

>>> list(range(0, 10, 3))     #三個(gè)參數(shù)感帅,前兩個(gè)表示范圍斗锭,第三個(gè)表示間隔。
[0, 3, 6, 9]

>>> list(range(-1, -10, -3))  #負(fù)數(shù)表示的是間隔方向,
[ -1, -4, -7]

range( )函數(shù)是非常常用的函數(shù)失球,記得背下來喲~包括三個(gè)參數(shù)~

思考題:
我們常聽說算法這個(gè)詞岖是,什么是算法呢帮毁?千萬別想的太高深莫測,其實(shí)說白了就是執(zhí)行順序豺撑。舉個(gè)最簡單的例子:把大象關(guān)進(jìn)冰箱里需要幾步烈疚??聪轿?
你沒有看錯(cuò)爷肝!理解算法就是這么簡單。
下面就是貨真價(jià)實(shí)的算法陆错!
算法:打開冰箱灯抛,把大象塞進(jìn)去,關(guān)上冰箱音瓷。
明白算法是什么了吧对嚼。但是往往實(shí)際問題要比這復(fù)雜的多得多。
而算法比拼的就是外莲,誰的步驟更精減猪半,誰的效率更高。

大家是否聽說過冒泡排序法偷线?
可以先來通過視頻感受下:https://www.bilibili.com/video/av13977395/

提示:(以下內(nèi)容可以自行g(shù)oogle)
冒泡排序算法的流程如下:
比較相鄰的元素磨确。 如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)声邦。
對每一對相鄰元素作同樣的工作乏奥,從開始第一對到結(jié)尾的最后一對。 在這一點(diǎn)亥曹,最后的元素應(yīng)該會(huì)是最大的數(shù)邓了。
針對所有的元素重復(fù)以上的步驟,除了最后一個(gè)媳瞪。
持續(xù)每次對越來越少的元素重復(fù)上面的步驟骗炉,直到?jīng)]有任何一對數(shù)字需要比較。

這里蛇受,我們降低難度句葵,試試用冒泡排序下面這個(gè)列表:

[5, 432, 23, 73, 98, 23, 765, 11, 90, 69, 4]

記得使用我們新學(xué)的東西,比如for語句兢仰,range( )函數(shù)乍丈。
補(bǔ)充:len( ) 函數(shù)可以得出列表內(nèi)部有多少個(gè)值。
比如:

>>> a = [5, 432, 23, 73, 98, 23, 765, 11, 90, 69, 4]
>>> len(a)
>>> 11

一定要自己動(dòng)手喲~
為了防止你們不思考把将,答案我會(huì)晚點(diǎn)更新轻专。
你也可以在評(píng)論區(qū)回復(fù)自己的答案~


寫這個(gè)答案之前,給大家講一個(gè)知識(shí)點(diǎn):

>>> a = 1,b = 2
#數(shù)值互換
>>> c = a
>>> a = b
>>> b = c
#可以簡寫為如下形式:
>>> a, b = b, a

答案:

>>> a = [5, 432, 23, 73, 98, 23, 765, 11, 90, 69, 4]
>>> b = len(a) - 1
>>> while b :
···    for i in range(len(a)-1):
···         j = i + 1
···         if a[i]>a[j]:
···             a[i], a[j] = a[j], a[i]
···     b -= 1
···
>>> print(a)
[4, 5, 11, 23, 23, 69, 73, 90, 98, 432, 765]

不知道大家有沒有成功寫出來察蹲。
也許這樣看不夠直觀请垛,你可以試試在每次循環(huán)時(shí)都打印出列表催训。
代碼就像下面這樣:

>>> a = [5, 432, 23, 73, 98, 23, 765, 11, 90, 69, 4]
>>> b = len(a) - 1
>>> while b :
···     for i in range(len(a)-1):

···         j = i + 1

···         if a[i]>a[j]:
···             a[i], a[j] = a[j], a[i]

···     b -= 1
···     print(a)                               #唯一的區(qū)別在這里。print語句前的縮進(jìn)叼屠。
···
[5, 23, 73, 98, 23, 432, 11, 90, 69, 4, 765]
[5, 23, 73, 23, 98, 11, 90, 69, 4, 432, 765]
[5, 23, 23, 73, 11, 90, 69, 4, 98, 432, 765]
[5, 23, 23, 11, 73, 69, 4, 90, 98, 432, 765]
[5, 23, 11, 23, 69, 4, 73, 90, 98, 432, 765]
[5, 11, 23, 23, 4, 69, 73, 90, 98, 432, 765]
[5, 11, 23, 4, 23, 69, 73, 90, 98, 432, 765]
[5, 11, 4, 23, 23, 69, 73, 90, 98, 432, 765]
[5, 4, 11, 23, 23, 69, 73, 90, 98, 432, 765]
[4, 5, 11, 23, 23, 69, 73, 90, 98, 432, 765]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞳腌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子镜雨,更是在濱河造成了極大的恐慌嫂侍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,919評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荚坞,死亡現(xiàn)場離奇詭異挑宠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)颓影,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,567評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門各淀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人诡挂,你說我怎么就攤上這事碎浇。” “怎么了璃俗?”我有些...
    開封第一講書人閱讀 163,316評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵奴璃,是天一觀的道長。 經(jīng)常有香客問我城豁,道長苟穆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,294評(píng)論 1 292
  • 正文 為了忘掉前任唱星,我火速辦了婚禮雳旅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘间聊。我一直安慰自己攒盈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,318評(píng)論 6 390
  • 文/花漫 我一把揭開白布哎榴。 她就那樣靜靜地躺著型豁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪叹话。 梳的紋絲不亂的頭發(fā)上偷遗,一...
    開封第一講書人閱讀 51,245評(píng)論 1 299
  • 那天墩瞳,我揣著相機(jī)與錄音驼壶,去河邊找鬼。 笑死喉酌,一個(gè)胖子當(dāng)著我的面吹牛热凹,可吹牛的內(nèi)容都是我干的泵喘。 我是一名探鬼主播,決...
    沈念sama閱讀 40,120評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼般妙,長吁一口氣:“原來是場噩夢啊……” “哼纪铺!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碟渺,我...
    開封第一講書人閱讀 38,964評(píng)論 0 275
  • 序言:老撾萬榮一對情侶失蹤鲜锚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后苫拍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芜繁,經(jīng)...
    沈念sama閱讀 45,376評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,592評(píng)論 2 333
  • 正文 我和宋清朗相戀三年绒极,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了骏令。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,764評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垄提,死狀恐怖榔袋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情铡俐,我是刑警寧澤凰兑,帶...
    沈念sama閱讀 35,460評(píng)論 5 344
  • 正文 年R本政府宣布,位于F島的核電站高蜂,受9級(jí)特大地震影響聪黎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜备恤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,070評(píng)論 3 327
  • 文/蒙蒙 一稿饰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧露泊,春花似錦喉镰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,697評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沉噩,卻和暖如春捺宗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背川蒙。 一陣腳步聲響...
    開封第一講書人閱讀 32,846評(píng)論 1 269
  • 我被黑心中介騙來泰國打工蚜厉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畜眨。 一個(gè)月前我還...
    沈念sama閱讀 47,819評(píng)論 2 370
  • 正文 我出身青樓昼牛,卻偏偏與公主長得像术瓮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子贰健,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,665評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容