- 本教程為python3文檔解讀
- 本教程面向完全型小白,只要你會(huì)在電腦上打字典唇,那你就可以看懂侯勉。
- 參考視頻觀看,味道更加:https://space.bilibili.com/186584185/#!/video
- 建議優(yōu)先閱讀本系列的《編程的本質(zhì)》這一章節(jié)。
貫穿始終的理念:別廢話拖刃,就是干删壮!
往期回顧:
- 分片
- 索引
- 對象
- 字符串為什么是特殊的列表?
- 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
- for烂完、in關(guān)鍵字
- 列表 注意:這里其實(shí)有一個(gè)更適合的詞试疙,叫可迭代對象,列表只是其中一種抠蚣。
- 分號(hào)
- 縮進(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):
- 函數(shù)名
- 函數(shù)功能
- 函數(shù)參數(shù)
- 函數(shù)返回值
- 函數(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]