乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      第一章:程序之道 — 《Think Python 2e》中譯本 1.0 文檔

       西北望msm66g9f 2020-04-13

      本書的目標(biāo)是教你像計算機科學(xué)家一樣思考。這一思考方式集成了數(shù)學(xué)、工程以及自然科學(xué)的一些最好的特點。像數(shù)學(xué)家一樣,計算機科學(xué)家使用形式語言表示思想(具體來說是計算)。像工程師一樣,計算機科學(xué)家設(shè)計東西,將零件組成系統(tǒng),在各種選擇之間尋求平衡。像科學(xué)家一樣,計算機科學(xué)家觀察復(fù)雜系統(tǒng)的行為,形成假設(shè)并且對預(yù)測進(jìn)行檢驗。

      對于計算機科學(xué)家,最重要的技能是 解決問題的能力 。解決問題(problem solving)意味著對問題進(jìn)行形式化,尋求創(chuàng)新型的解決方案,并且清晰、準(zhǔn)確地表達(dá)解決方案的能力。事實證明,學(xué)習(xí)編程的過程是鍛煉問題解決能力的一個絕佳機會。這就是為什么本章被稱為“程序之道”。

      一方面,你將學(xué)習(xí)如何編程,這本身就是一個有用的技能。另一方面,你將把編程作為實現(xiàn)自己目的的手段。隨著學(xué)習(xí)的深入,你會更清楚自己的目的。

      什么是程序??

      程序 是一系列說明如何執(zhí)行計算(computation)的指令。計算可以是數(shù)學(xué)上的計算,例如尋找公式的解或多項式的根,也可以是一個符號計算(symbolic computation),例如在文檔中搜索并替換文本或者圖片,就像處理圖片或播放視頻。

      不同編程語言中,程序的具體細(xì)節(jié)也不一樣,但是有一些基本的指令幾乎出現(xiàn)在每種語言當(dāng)中:

      • 輸入(input):

      • 從鍵盤、文件、網(wǎng)絡(luò)或者其他設(shè)備獲取數(shù)據(jù)。

      • 輸出(output):

      • 在屏幕上顯示數(shù)據(jù),將數(shù)據(jù)保存至文件,通過網(wǎng)絡(luò)傳送數(shù)據(jù),等等。

      • 數(shù)學(xué)(math):

      • 執(zhí)行基本的數(shù)學(xué)運算,如加法和乘法。

      • 有條件執(zhí)行(conditional execution):

      • 檢查符合某個條件后,執(zhí)行相應(yīng)的代碼。

      • 重復(fù)(repetition):

      • 重復(fù)執(zhí)行某個動作,通常會有一些變化。

      無論你是否相信,這幾乎是程序的全部指令了。每個你曾經(jīng)用過的程序,無論多么復(fù)雜,都是由跟這些差不多的指令構(gòu)成的。因此,你可以認(rèn)為編程就是將龐大、復(fù)雜的任務(wù)分解為越來越小的子任務(wù),直到這些子任務(wù)簡單到可以用這其中的一個基本指令執(zhí)行。

      運行Python?

      Python入門的一個障礙,是你可能需要在電腦上安裝Python和相關(guān)軟件。如果你熟悉電腦的操作系統(tǒng),特別是如果你能熟練使用命令行(command-line interface),安裝Python對你來說就不是問題了。但是對于初學(xué)者,同時學(xué)習(xí)系統(tǒng)管理(system administration)和編程這兩方面的知識是件痛苦的事。

      為了避免這個問題,我建議你首先在瀏覽器中運行Python。等你對Python更加了解之后,我會建議你在電腦上安裝Python。

      網(wǎng)絡(luò)上有許多網(wǎng)頁可以讓你運行Python。如果你已經(jīng)有最喜歡的網(wǎng)站,那就打開網(wǎng)頁運行Python吧。如果沒有,我推薦PythonAnywhere。我在 http:///thinkpython2e 給出了詳細(xì)的使用指南。

      目前Python有兩個版本,分別是Python 2和Python 3。二者十分相似,因此如果你學(xué)過某個版本,可以很容易地切換到另一個版本。事實上,作為初學(xué)者,你只會接觸到很少數(shù)的不同之處。本書采用的是Python 3,但是我會加入一些關(guān)于Python 2的說明。

      Python的 解釋器 是一個讀取并執(zhí)行Python代碼的程序。根據(jù)你的電腦環(huán)境不同,你可以通過雙擊圖標(biāo),或者在命令行輸入python的方式來啟動解釋器。解釋器啟動后,你應(yīng)該看到類似下面的輸出:

      Python 3.4.0 (default, Jun 19 2015, 14:20:21)[GCC 4.8.2] on linuxType 'help', 'copyright', 'credits' or 'license' for more information.>>>

      前三行中包含了關(guān)于解釋器及其運行的操作系統(tǒng)的信息,因此你看到的內(nèi)容可能不一樣。但是你應(yīng)該檢查下版本號是否以3開頭,上面示例中的版本號是3.4.0。如果以3開頭,那說明你正在運行Python 3。如果以2開頭,那說明你正在運行(你猜對了)Python 2。

      最后一行是一個提示符(prompt),表明你可以在解釋器中輸入代碼了。如果你輸入一行代碼然后按回車(Enter),解釋器就會顯示結(jié)果:

      >>> 1 + 12

      現(xiàn)在你已經(jīng)做好了開始學(xué)習(xí)的準(zhǔn)備。接下來,我將默認(rèn)你已經(jīng)知道如何啟動Python解釋器和執(zhí)行代碼。

      第一個程序?

      根據(jù)傳統(tǒng),你用一門新語言寫的第一個程序叫做“Hello, World!”,因為它的功能只不過是顯示單詞“Hello, World!”。在Python中,它看起來是這樣:

      >>> print('Hello, World!')

      這是一個 print 函數(shù)的示例,盡管它并不會真的在紙上打印。它將結(jié)果顯示在屏幕上。在此例中,結(jié)果是單詞:

      Hello, World!

      程序中的單引號標(biāo)記了被打印文本的首尾;它們不會出現(xiàn)在結(jié)果中。

      括號說明 print 是一個函數(shù)。我們將在第三章介紹函數(shù)。在Python 2中, print是一個語句;不是函數(shù),所以不需要使用括號。

      >>> print 'Hello, World!'

      很快你就會明白二者之間的區(qū)別,現(xiàn)在知道這些就足夠了。

      譯者注:Python核心開發(fā)者Brett Cannon詳細(xì)解釋了 為什么print在Python 3中變成了函數(shù)。

      算術(shù)運算符?

      接下來介紹算術(shù)。Python提供了許多代表加法和乘法等運算的特殊符號,叫做 運算符 (operators)。

      運算符 + 、-* 分別執(zhí)行加法、減法和乘法,詳見以下示例:

      >>> 40 + 242>>> 43 - 142>>> 6 * 742

      運算符 / 執(zhí)行除法運算:

      >>> 84 / 242.0

      你可能會問,為什么結(jié)果是42.0,而不是42。在下節(jié)中,我會進(jìn)行解釋。

      最后,運算符 * 執(zhí)行乘方運算;也就是說,它將某個數(shù)字乘以自身相應(yīng)的次數(shù):

      >>> 6**2 + 642

      某些語言使用 ^ 運算符執(zhí)行乘方運算,但是在Python中,它卻屬于一種位運算符,叫做XOR。如果你對位運算符不太了解,那么下面的結(jié)果會讓你感到驚訝:

      >>> 6 ^ 24

      我不打算在本書中介紹位運算符,但是你可以閱讀 Python官方百科 ,了解相關(guān)內(nèi)容。

      值和類型?

      值(value) 是程序處理的基本數(shù)據(jù)之一,比如說一個單詞或一個數(shù)字。我們目前已經(jīng)接觸到的值有:2,42.0,和 'Hello World!'

      這些值又屬于不同的 類型(types) :2是一個 整型數(shù)(integer),42.0 是一個 浮點數(shù)(floating point number),而 'Hello, World!' 則是一個 字符串(string),之所以這么叫是因為其中的字符被串在了一起(strung together)。

      如果你不確定某個值的類型是什么,解釋器可以告訴你:

      >>> type(2)<class 'int'>>>> type(42.0)<class 'float'>>>> type('Hello, World!')<class 'str'>

      “class”一詞在上面的輸出結(jié)果中,是類別的意思;一個類型就是一個類別的值。

      不出意料,整型數(shù)屬于 int 類型,字符串屬于 str 類型,浮點數(shù)屬于 float 類型。

      那么像 '2''42.0' 這樣的值呢?它們看上去像數(shù)字,但是又和字符串一樣被引號括在了一起?

      >>> type('2')<class 'str'>>>> type('42.0')<class 'str'>

      它們其實是字符串。

      當(dāng)你輸入一個大數(shù)值的整型數(shù)時,你可能會想用逗號進(jìn)行區(qū)分,比如說像這樣:1,000,000。在Python中,這不是一個合法的 整型數(shù),但卻是合法的值。

      >>> 1,000,000(1, 0, 0)

      結(jié)果和我們預(yù)料的完全不同!Python把1,000,000當(dāng)作成了一個以逗號區(qū)分的整型數(shù)序列。在后面的章節(jié)中,我們會介紹更多有關(guān)這種序列的知識。

      形式語言和自然語言?

      自然語言(natural language) 是人們交流所使用的語言,例如英語、西班牙語和法語。它們不是人為設(shè)計出來的(盡管有人試圖這樣做);而是自然演變而來。

      形式語言(formal languages)是人類為了特殊用途而設(shè)計出來的。例如,數(shù)學(xué)家使用的記號(notation)就是形式語言,特別擅長表示數(shù)字和符號之間的關(guān)系。化學(xué)家使用形式語言表示分子的化學(xué)結(jié)構(gòu)。 最重要的是:

      編程語言是被設(shè)計用于表達(dá)計算的形式語言。

      形式語言通常擁有嚴(yán)格的 語法 規(guī)則,規(guī)定了詳細(xì)的語句結(jié)構(gòu)。例如,3+3=6是語法正確的數(shù)學(xué)表達(dá)式,而3+=3$6則不是;H2O是語法正確的化學(xué)式,而2Zz則不是。

      語法規(guī)則有兩種類型,分別涉及記號(tokens)和結(jié)構(gòu)。記號是語言的基本元素,例如單詞、數(shù)字和化學(xué)元素。3+=3$6這個式子的問題之一,就是 $ 在數(shù)學(xué)中不是一個合法的記號(至少據(jù)我所知)。類似的,2Zz 也不合法,因為沒有一個元素的簡寫是 Zz。

      第二種語法規(guī)則與標(biāo)記的組合方式有關(guān)。3+=3這個方程是非法的,因為即使+和=都是合法的記號,但是你卻不能把它們倆緊挨在一起。類似的,在化學(xué)式中,下標(biāo)位于元素之后,而不是之前。

      This is @ well-structured Engli$h sentence with invalid t*kens in it.This sentence all valid tokens has, but invalid structure with.

      譯者注:上面兩句英文都是不符合語法的,一個包含非法標(biāo)記,另一個結(jié)構(gòu)不符合語法。

      當(dāng)你讀一個用英語寫的句子或者用形式語言寫的語句時,你都必須要理清各自的結(jié)構(gòu)(盡管在閱讀自然語言時,你是下意識地進(jìn)行的)。這個過程被稱為 解析(parsing)。

      雖然形式語言和自然語言有很多共同點——標(biāo)記、結(jié)構(gòu)和語法,它們也有一些不同:

      • 歧義性

      • 自然語言充滿歧義,人們使用上下文線索以及其它信息處理這些歧義。形式語言被設(shè)計成幾乎或者完全沒有歧義,這意味著不管上下文是什么,任何語句都只有一個意義。

      • 冗余性

      • 為了彌補歧義性并減少誤解,自然語言使用很多冗余。結(jié)果,自然語言經(jīng)常很冗長。形式語言則冗余較少,更簡潔。

      • 字面性

      • 自然語言充滿成語和隱喻。如果我說“The penny dropped”,可能根本沒有便士、也沒什么東西掉下來(這個成語的意思是,經(jīng)過一段時間的困惑后終于理解某事)。形式語言的含義,與它們字面的意思完全一致。

      由于我們都是說著自然語言長大的,我們有時候很難適應(yīng)形式語言。形式語言與自然語言之間的不同,類似詩歌與散文之間的差異,而且更加明顯:

      • 詩歌

      • 單詞的含義和聲音都有作用,整首詩作為一個整理,會對人產(chǎn)生影響,或是引發(fā)情感上的共鳴。歧義不但常見,而且經(jīng)常是故意為之。

      • 散文

      • 單詞表面的含義更重要,句子結(jié)構(gòu)背后的寓意更深。散文比詩歌更適合分析,但仍然經(jīng)常有歧義。

      • 程序

      • 計算機程序的含義是無歧義、無引申義的,通過分析程序的標(biāo)記和結(jié)構(gòu),即可完全理解。

      形式語言要比自然語言更加稠密,因此閱讀起來花的時間會更長。另外,形式語言的結(jié)構(gòu)也很重要,所以從上往下、從左往右閱讀,并不總是最好的策略。相反,你得學(xué)會在腦海里分析一個程序,識別不同的標(biāo)記并理解其結(jié)構(gòu)。最后,注重細(xì)節(jié)。拼寫和標(biāo)點方面的小錯誤在自然語言中無傷大雅,但是在形式語言中卻會產(chǎn)生很大的影響。

      調(diào)試?

      程序員都會犯錯。由于比較奇怪的原因,編程錯誤被稱為 故障(譯者注:英文為bug,一般指蟲子),追蹤錯誤的過程被稱為 調(diào)試(debugging)。

      編程,尤其是調(diào)試,有時會讓人動情緒。如果你有個很難的bug解決不了,你可能會感到憤怒、憂郁抑或是丟人。

      有證據(jù)表明,人們很自然地把計算機當(dāng)人來對待。當(dāng)計算機表現(xiàn)好的時候,我們認(rèn)為它們是隊友,而當(dāng)它們固執(zhí)或無禮的時候,我們也會像對待固執(zhí)或無禮人的一樣對待它們(Reeves and Nass, The Media Equation:How People Treat Computers, Television, and New Media Like Real Peopleand Places)。

      對這些反應(yīng)做好準(zhǔn)備有助于你對付它們。一種方法是將計算機看做是一個雇員,擁有特定的長處,例如速度和精度,也有些特別的缺點,像缺乏溝通以及不善于把握大局。

      你的工作是當(dāng)一個好的管理者:找到充分利用優(yōu)點、摒棄弱點的方法。并且找到使用你的情感來解決問題的方法,而不是讓你的情緒干擾你有效工作的能力。

      學(xué)習(xí)調(diào)試可能很令人泄氣,但是它對于許多編程之外的活動也是一個非常有價值的技能。在每一章的結(jié)尾,我都會花一節(jié)內(nèi)容介紹一些調(diào)試建議,比如說這一節(jié)。希望能幫到你!

      術(shù)語表?

      • 解決問題

      • 將問題形式化、尋找并表達(dá)解決方案的過程。

      • 高級語言(high-level language)

      • 像Python這樣被設(shè)計成人類容易閱讀和編寫的編程語言。

      • 低級語言(low-level language)

      • 被設(shè)計成計算機容易運行的編程語言;也被稱為“機器語言”或“匯編語言(assembly language)”。

      • 可移植性

      • 程序能夠在多種計算機上運行的特性。

      • 解釋器

      • 讀取另一個程序并執(zhí)行該程序的程序。

      • 提示符

      • 解釋器所顯示的字符,表明已準(zhǔn)備好接受用戶的輸入。

      • 程序

      • 說明一個計算的一組指令。

      • 打印語句

      • 使Python解釋器在屏幕上顯示某個值的指令。

      • 運算符

      • 代表類似加法、乘法或者字符串連接(string concatenation)等簡單計算的特殊符號。

      • 程序所處理數(shù)據(jù)的基本元素之一,例如數(shù)字或字符串。

      • 類型

      • 值的類別。我們目前接觸的類型有整型數(shù)(類型為 int)、浮點數(shù)(類型為 float )和字符串(類型為 str

      • 整型數(shù)

      • 代表整數(shù)的類型。

      • 浮點數(shù)

      • 代表一個有小數(shù)點的數(shù)字的類型。

      • 字符串

      • 代表一系列字符的類型。

      • 自然語言

      • 任意一種人們?nèi)粘J褂玫?、自然演變而來的語言。

      • 形式語言

      • 任意一種人類為了某種目的而設(shè)計的語言,例如用來表示數(shù)學(xué)概念或者電腦程序;所有的編程語言都是形式語言。

      • 記號

      • 程序語法結(jié)構(gòu)中的基本元素之一,與自然語言中的單詞類似。

      • 語法

      • 規(guī)定了程序結(jié)構(gòu)的規(guī)則。

      • 解析

      • 閱讀程序,并分析其語法結(jié)構(gòu)的過程

      • 故障

      • 程序中的錯誤。

      • 調(diào)試

      • 尋找并解決錯誤的過程。

      練習(xí)題?

      習(xí)題 1-1?

      你最好在電腦前閱讀此書,因為你可以隨時測試書中的示例。

      每當(dāng)你試驗一個新特性的時候,你應(yīng)該試著去犯錯。舉個例子,在“Hello, World!”程序中,如果你漏掉一個引號會發(fā)生什么情況?如果你去掉兩個引號呢?如果你把print寫錯了呢?

      這類試驗?zāi)軒椭阌洃涀x過的內(nèi)容;對你平時編程也有幫助,因為你可以了解不同的錯誤信息代表的意思?,F(xiàn)在故意犯錯誤,總勝過以后不小心犯錯。

      1. 在打印語句中,如果你去掉一個或兩個括號,會發(fā)生什么?

      2. 你想打印一個字符串,如果你去掉一個或兩個引號,會發(fā)生什么?

      3. 你可以使用減號創(chuàng)建一個負(fù)數(shù),如-2。如果你在一個數(shù)字前再加上個加號,會發(fā)生什么?2++2會得出什么結(jié)果?

      4. 在數(shù)學(xué)標(biāo)記中,前導(dǎo)零(leading zeros)沒有問題,如02。如果我們在Python中這樣做,會發(fā)生什么?

      5. 如果兩個值之間沒有運算符,又會發(fā)生什么?

      習(xí)題 1-2?

      啟動Python解釋器,把它當(dāng)計算器使用。

      1. 42分42秒一共有多少秒?

      2. 10公里可以換算成多少英里?提示:一英里等于1.61公里。

      3. 如果你花42分42秒跑完了10公里,你的平均配速(pace)是多少(每英里耗時,分別精確到分和秒)?你每小時平均跑了多少英里(英里/時)?

        譯者注:配速(pace)是在馬拉松運動的訓(xùn)練中常使用的一個概念,配速是速度的一種,是每公里所需要的時間。配速=時間/距離。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多