在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ Python/ exercise38.列表操作
附錄 A-練習(xí) 9:生成一個(gè)空文件(Touch, New-Item)
附錄 A-練習(xí) 10:復(fù)制文件 (cp)
exercise44.繼承 Vs.包含
附錄 A-練習(xí) 14:刪除文件 (rm)
附錄 A-練習(xí) 11:移動(dòng)文件 (mv)
exercise46.項(xiàng)目骨架
附錄 A-練習(xí) 3:如果你迷路了
exercise37.復(fù)習(xí)符號(hào)
exercise47.自動(dòng)化測(cè)試
exercise3.數(shù)字和數(shù)學(xué)計(jì)算
附錄 A-練習(xí) 1:安裝
exercise32.循環(huán)和列表
exercise31.做出決定
exercise42.對(duì)象、類、以及從屬關(guān)系
exercise48.更復(fù)雜的用戶輸入
下一步
簡(jiǎn)介
附錄 A-練習(xí) 7:刪除路徑 (rmdir)
exercise49.寫代碼語(yǔ)句
exercise18.命名, 變量, 代碼, 函數(shù)
exercise12.提示別人
exercise14.提示和傳遞
exercise40.模塊, 類和對(duì)象
附錄 A-練習(xí) 12:查看文件 (less, MORE)
exercise9.打印, 打印, 打印
exercise13.參數(shù), 解包, 變量
exercise30. Else 和 If
exercise28. 布爾表達(dá)式
附錄 A-練習(xí) 4:創(chuàng)建一個(gè)路徑 (mkdir)
附錄 A-練習(xí) 15:退出命令行 (exit)
exercise25. 更多更多的練習(xí)
exercise6.字符串和文本
exercise2.注釋和井號(hào)“#”
exercise21. 函數(shù)的返回值
附錄 A-下一步
exercise1.第一個(gè)程序
exercise23. 閱讀代碼
附錄 A-練習(xí) 5:改變當(dāng)前路徑 (cd)
exercise17.更多文件操作
exercise24. 更多的練習(xí)
exercise19.函數(shù)和變量
exercise51.從瀏覽器獲取輸入
exercise22. 到目前為止你學(xué)到了什么?
exercise41.學(xué)會(huì)說(shuō)面向?qū)ο?/span>
exercise52.開(kāi)始你的 web 游戲
exercise20. 函數(shù)和文件
exercise15.讀文件
exercise45.你來(lái)制作一個(gè)游戲
exercise10.那是什么?
exercise8.打印, 打印
exercise35.分支和函數(shù)
exercise26. 恭喜你,可以進(jìn)行一次考試了
exercise33.while 循環(huán)
exercise29. IF 語(yǔ)句
exercise36.設(shè)計(jì)和調(diào)試
exercise0.安裝和準(zhǔn)備
exercise50.你的第一個(gè)網(wǎng)站
附錄 A-練習(xí) 2:路徑, 文件夾, 名錄 (pwd)
exercise38.列表操作
附錄 A-練習(xí) 6:列出當(dāng)前路徑 (ls)
exercise16.讀寫文件
exercise4.變量和命名
exercise34.訪問(wèn)列表元素
exercise11.提問(wèn)
exercise43.基本的面向?qū)ο蟮姆治龊驮O(shè)計(jì)
附錄 A-簡(jiǎn)介
附錄 A-練習(xí) 8:目錄切換(pushd, popd)
來(lái)自老程序員的建議
exercise27. 記住邏輯
exercise5.更多的變量和打印
exercise7.更多的打印(輸出)
附錄 A-練習(xí) 13:輸出文件 (cat)
exercise39.字典,可愛(ài)的字典

exercise38.列表操作

你已經(jīng)學(xué)過(guò)了列表。在你學(xué)習(xí)“while 循環(huán)”的時(shí)候,你對(duì)列表進(jìn)行過(guò)“追加(append)”操作,而且將列表的內(nèi)容打印了出來(lái)。另外你應(yīng)該還在附加題里研究過(guò) Python 文檔,看了列表支持的其他操作。這已經(jīng)是一段時(shí)間以前了,所以如果你不記得了的話,就回到本書(shū)的前面再?gòu)?fù)習(xí)一遍把。

找到了嗎?還記得嗎?很好。那時(shí)候你對(duì)一個(gè)列表執(zhí)行了 append 函數(shù)。不過(guò),你也許還沒(méi)有真正明白發(fā)生的事情,所以我們?cè)賮?lái)看看我們可以對(duì)列表進(jìn)行什么樣的操作。

當(dāng)你看到像 mystuff.append('hello') 這樣的代碼時(shí),你事實(shí)上已經(jīng)在 Python 內(nèi)部激發(fā)了一個(gè)連鎖反應(yīng)。以下是它的工作原理:

1.Python 看到你用到了 mystuff,于是就去找到這個(gè)變量。也許它需要倒著檢查看你有沒(méi)有在哪里用=創(chuàng)建過(guò)這個(gè)變量,或者檢查它是不是一個(gè)函數(shù)參數(shù),或者看它是不是一個(gè)全局變量。不管哪種方式,它得先找到 mystuff 這個(gè)變量才行。 2.一旦它找到了 mystuff,就輪到處理句點(diǎn).(period)這個(gè)操作符,而且開(kāi)始查看 mystuff 內(nèi)部的一些變量了。由于 mystuff 是一個(gè)列表,Python 知道它支持一些函數(shù)。 3.接下來(lái)輪到了處理 append。Python 會(huì)將“append”和 mystuff 支持的所有函數(shù)的名稱一一對(duì)比,如果確實(shí)其中有一個(gè)叫 append 的函數(shù),那么 Python 就會(huì)去使用這個(gè)函數(shù)。 4.接下來(lái) Python 看到了括號(hào)( (parenthesis) 并且意識(shí)到, “噢,原來(lái)這應(yīng)該是一個(gè)函數(shù)”,到了這里,它就正常會(huì)調(diào)用這個(gè)函數(shù)了,不過(guò)這里的函數(shù)還要多一個(gè)參數(shù)才行。 5.這個(gè)額外的參數(shù)其實(shí)是……mystuff!我知道,很奇怪是不是?不過(guò)這就是 Python 的工作原理,所以還是記住這一點(diǎn),就當(dāng)它是正常的好了。真正發(fā)生的事情其實(shí)是 append(mystuff, 'hello') ,不過(guò)你看到的只是 mystuff.append('hello') 。

大部分時(shí)候你不需要知道這些細(xì)節(jié),不過(guò)如果你看到一個(gè)像這樣的 Python 錯(cuò)誤信息的時(shí)候,上面的細(xì)節(jié)就對(duì)你有用了:

$ python
Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class Thing(object):
...     def test(hi):
...             print "hi"
...
>>> a = Thing()
>>> a.test("hello")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: test() takes exactly 1 argument (2 given)
>>>

就是這個(gè)嗎?嗯,這個(gè)是我在 Python 命令行下展示給你的一點(diǎn)魔法。你還沒(méi)有見(jiàn)過(guò) class 不過(guò)后面很快就要碰到了?,F(xiàn)在你看到 Python 說(shuō) test() takes exactly 1 argument (2 given) (test() 只可以接受 1 個(gè)參數(shù),實(shí)際上給了兩個(gè))。它意味著 python 把 a.test("hello") 改成了 test(a,"hello"),而有人弄錯(cuò)了,沒(méi)有為它添加 a 這個(gè)參數(shù)。

一下子要消化這么多可能有點(diǎn)難度,我們將做幾個(gè)練習(xí),讓你頭腦中有一個(gè)深刻的印象。下面的練習(xí)將字符串和列表混在一起,看看你能不能在里邊找出點(diǎn)樂(lè)子來(lái):

ten_things = "Apples Oranges Crows Telephone Light Sugar"

print "Wait there are not 10 things in that list. Let's fix that."

stuff = ten_things.split(' ')
more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"]

while len(stuff) != 10:
    next_one = more_stuff.pop()
    print "Adding: ", next_one
    stuff.append(next_one)
    print "There are %d items now." % len(stuff)

print "There we go: ", stuff

print "Let's do some things with stuff."

print stuff[1]
print stuff[-1] # whoa! fancy
print stuff.pop()
print ' '.join(stuff) # what? cool!
print '#'.join(stuff[3:5]) # super stellar!

你看到的結(jié)果

$ python ex38.py
Wait there are not 10 things in that list. Let's fix that.
Adding:  Boy
There are 7 items now.
Adding:  Girl
There are 8 items now.
Adding:  Banana
There are 9 items now.
Adding:  Corn
There are 10 items now.
There we go:  ['Apples', 'Oranges', 'Crows', 'Telephone', 'Light', 'Sugar', 'Boy', 'Girl', 'Banana', 'Corn']
Let's do some things with stuff.
Oranges
Corn
Corn
Apples Oranges Crows Telephone Light Sugar Boy Girl Banana
Telephone#Light

列表能實(shí)現(xiàn)什么

假設(shè)你打算創(chuàng)建一個(gè)基于釣魚(yú)的電腦游戲。如果你不知道什么是釣魚(yú),花點(diǎn)時(shí)間在網(wǎng)上找到相關(guān)資料看一看。要做到這些,你需要里了解一些關(guān)于“撲克牌”的概念,并將它們變成你的 Python 程序。你必須用 python 寫出知道如何玩一副虛擬撲克牌的代碼,這樣人們就能把你的游戲當(dāng)成真實(shí)的游戲來(lái)玩,即使它不是真的。你需要的是一副“撲克牌”結(jié)構(gòu),而程序員就稱之為“數(shù)據(jù)結(jié)構(gòu)”。

什么是數(shù)據(jù)結(jié)構(gòu)呢?如果你仔細(xì)想想,數(shù)據(jù)結(jié)構(gòu)其實(shí)就是一種正式的構(gòu)造(組織)一些數(shù)據(jù)(事實(shí))的方法。真的就是這么簡(jiǎn)單,盡管一些數(shù)據(jù)結(jié)構(gòu)十分錯(cuò)綜復(fù)雜,它們也僅僅是在程序中存儲(chǔ)數(shù)據(jù)的方式而已,這樣你就能用不同的方式訪問(wèn)它們。

我將在下一節(jié)練習(xí)中更深入的講解這些,但是列表是程序員常用的數(shù)據(jù)結(jié)構(gòu)之一。它們只是數(shù)據(jù)的有序列表,你可以通過(guò)線性索引來(lái)存儲(chǔ)或訪問(wèn)它們。什么?記住我說(shuō)過(guò)的話,只是因?yàn)橐粋€(gè)程序員說(shuō)過(guò)“列表是一個(gè)列表”并不意味著它比真實(shí)世界中的列表復(fù)雜多少。 讓我們以撲克牌為例:

1.你有一堆有值的卡片。 2.這些卡片式一堆,一列,或者可以從頭到尾排列這些卡片。 3.你可以隨機(jī)的從頂部、中部或者底部取出卡片。 4.如果你想找到某張?zhí)厥獾目ㄆ? 你必須一張一張的檢索這些卡片。

讓我們看看我說(shuō)過(guò)什么:

“一個(gè)有序的列表” 是的,撲克牌有第一張和最后一張 "有一些你要存儲(chǔ)的事物" 是的,卡片就是我要存儲(chǔ)的東西 "可以隨機(jī)訪問(wèn)" 是的,在這副牌中我可以任意取出一張. "是線性的" 是的,如果我想找到特定的一張牌,我必須從頭開(kāi)始按順序查找。 "有索引的" 差不多, 如果我讓你找到一副撲克牌的第 19 張,你就必須按照順序去數(shù),直到你找到這一張。在 python 的列表中,計(jì)算機(jī)可以直接跳到你給出的索引處。這就是一個(gè)列表做的所有的事情,這么解釋應(yīng)該給了你一個(gè)在編程中找到列表概念的方法吧。編程中的每一個(gè)概念通常都有與真實(shí)世界相關(guān)聯(lián),至少在真實(shí)世界是有用的。如果你能找出虛擬的概念在真實(shí)世界中對(duì)應(yīng)的概念,那你也可以通過(guò)這些找到數(shù)據(jù)結(jié)構(gòu)到底是做什么的。

什么情況可以使用列表

當(dāng)你有一些有東西能匹配列表數(shù)據(jù)結(jié)構(gòu)的有用特性時(shí),使用列表:

1.如果你需要維護(hù)一組次序,記住,這是把次序編成列表,而不是給次序排序,列表不會(huì)幫你排序。 2.如果你需要根據(jù)一個(gè)隨機(jī)數(shù)訪問(wèn)列表內(nèi)容,記住,這時(shí)候基數(shù)從 0 開(kāi)始。 3.如果你需要從頭到尾操作列表內(nèi)容,記住,這就是 for 循環(huán)。

附加題

1.將每一個(gè)被調(diào)用的函數(shù)以上述的方式翻譯成 Python 實(shí)際執(zhí)行的動(dòng)作。比如 more_stuff.pop() 是 pop(more_stuff). 2.將這兩種方式翻譯為自然語(yǔ)言。 3.上網(wǎng)閱讀一些關(guān)于“面向?qū)ο缶幊?Object Oriented Programming)”的資料。暈了吧?嗯,我以前也是。別擔(dān)心。你將從這本書(shū)學(xué)到足夠用的關(guān)于面向?qū)ο缶幊痰幕A(chǔ)知識(shí),而以后你還可以慢慢學(xué)到更多。 4.查一下 Python 中的 “class” 是什么東西。不要閱讀關(guān)于其他語(yǔ)言的 “class” 的用法,這會(huì)讓你更糊涂。 5.如果你不知道我講的是些什么東西,別擔(dān)心。程序員為了顯得自己聰明,于是就發(fā)明了 Opject Oriented Programming,簡(jiǎn)稱為 OOP,然后他們就開(kāi)始濫用這個(gè)東西了。如果你覺(jué)得這東西太難,你可以開(kāi)始學(xué)一下 “函數(shù)編程(functional programming)”。 6.找出 10 種可以放在列表中的例子,并用它們寫一些腳本。

常見(jiàn)問(wèn)題

Q:你沒(méi)有說(shuō)說(shuō)不要用 while 循環(huán)?

是的,請(qǐng)記住,當(dāng)需要的時(shí)候,你可以打破規(guī)則,只有蠢人才會(huì)一直一味的遵從規(guī)則。

Q:join(' ', stuff)為什么沒(méi)有生效?

文檔中關(guān)于 join 的內(nèi)容,寫的沒(méi)有意義,join 是使用一個(gè)字符串將列表內(nèi)容鏈接起來(lái)的一個(gè)方法,你可以試試這么寫' '.join(stuff)..

Q: 為什么你用了一個(gè) while 循環(huán)?

試著用 for 循環(huán)改寫一下,看看哪個(gè)更簡(jiǎn)單

Q: stuff[3:5]實(shí)現(xiàn)了什么功能?

這句代碼從 stuff 中獲取了一個(gè)子集,包含 stuff 的第 3 和第 4 個(gè)元素,沒(méi)有包含第 5 個(gè)元素。它和 range(3,5)的工作原理相近。