關(guān)于我們
書單推薦
新書推薦
|
程序設(shè)計(jì)導(dǎo)論:Python語言實(shí)踐
本書從跨學(xué)科的角度入手,強(qiáng)調(diào)應(yīng)用,介紹Python有用的功能,包括編程的基本要素、功能、模塊、面向?qū)ο缶幊毯蛿?shù)據(jù)抽象對象、算法與數(shù)據(jù)結(jié)構(gòu),融匯了作者豐富的課堂教學(xué)經(jīng)驗(yàn),提供了大量源代碼、I/O庫和精選實(shí)例。適合作為高校計(jì)算機(jī)專業(yè)編程課程的教材。
前 言
Introduction to Programming in Python: An Interdisciplinary Approach
21世紀(jì)以前的教育基礎(chǔ)是“讀、寫和算術(shù)”,而現(xiàn)在的教育基礎(chǔ)則是“讀、寫和計(jì)算”。學(xué)習(xí)編程是每個(gè)科學(xué)和工程專業(yè)學(xué)生教育過程中的重要部分。除了直接的應(yīng)用外,學(xué)習(xí)編程是了解計(jì)算機(jī)科學(xué)本質(zhì)的第一步。計(jì)算機(jī)科學(xué)對現(xiàn)代社會(huì)產(chǎn)生了毋庸置疑的影響。本書的目的是在科學(xué)環(huán)境中為需要編程或想學(xué)習(xí)編程的人講授程序設(shè)計(jì)的基本方法和應(yīng)用技巧。
我們的主要目標(biāo)是通過提供經(jīng)驗(yàn)和必要的基本工具使得學(xué)生更加有效地進(jìn)行計(jì)算。我們的方法是向?qū)W生灌輸這樣的理念:編寫程序是一種自然而然、富有成就感和充滿創(chuàng)造性的體驗(yàn)。我們將循序漸進(jìn)地介紹基本概念,并使用應(yīng)用數(shù)學(xué)和科學(xué)中的典型應(yīng)用來闡述這些概念,并為學(xué)生提供編寫程序以解決相關(guān)問題的機(jī)會(huì)。
我們使用Python程序設(shè)計(jì)語言來編寫本書中的所有程序—在本書的標(biāo)題中,我們在“程序設(shè)計(jì)”之后提及“Python”以強(qiáng)調(diào)本書是關(guān)于程序設(shè)計(jì)的基本概念,而不僅僅是Python本身。這本書講授了許多解決計(jì)算問題的基本技能,這些技能可以應(yīng)用于許多現(xiàn)代計(jì)算環(huán)境中。本書自成體系,其目標(biāo)人群是沒有任何編程經(jīng)驗(yàn)的人。
相對于傳統(tǒng)的CS1課程而言,本書提供了一種跨學(xué)科的方法。我們將重點(diǎn)講述計(jì)算在其他學(xué)科(材料科學(xué)、基因組學(xué)、天體物理學(xué)、網(wǎng)絡(luò)系統(tǒng)等)中的重要地位?鐚W(xué)科的方法向?qū)W生強(qiáng)調(diào)一種基本思想,即在當(dāng)今世界中,數(shù)學(xué)、科學(xué)、工程和計(jì)算緊密結(jié)合在一起。同時(shí),作為CS1的課本,本書主要面向?qū)?shù)學(xué)、科學(xué)和工程感興趣的大學(xué)一年級學(xué)生。當(dāng)然,本書也可用于自學(xué),或者作為程序設(shè)計(jì)與其他領(lǐng)域相結(jié)合的課程的補(bǔ)充材料。
內(nèi)容范圍本書根據(jù)學(xué)習(xí)編程的四個(gè)階段來組織:基本元素、函數(shù)和模塊、面向?qū)ο蟮某绦蛟O(shè)計(jì)、算法和數(shù)據(jù)結(jié)構(gòu)。在進(jìn)入編程的下一階段之前,我們將向讀者提供他們需要的基本信息,使讀者有信心編寫每個(gè)階段的程序。本書所講授方法的基本特征是使用示例程序解決感興趣的問題,并提供各種練習(xí)題,從自學(xué)練習(xí)題到需要?jiǎng)?chuàng)新解決方案的挑戰(zhàn)性難題。
基本元素包括變量、賦值語句、內(nèi)置數(shù)據(jù)類型、控制流程、數(shù)組和輸入/輸出,以及圖形和聲音。
函數(shù)和模塊為學(xué)生揭開了模塊化程序設(shè)計(jì)的面紗。我們使用熟悉的數(shù)學(xué)函數(shù)來介紹Python函數(shù),然后討論使用函數(shù)編程的意義,包括庫函數(shù)和遞歸函數(shù)。貫穿本書,我們強(qiáng)調(diào)一種基本理念,即把一個(gè)程序分解為可以獨(dú)立調(diào)試、維護(hù)和重用的模塊。
面向?qū)ο蟮某绦蛟O(shè)計(jì)是我們對數(shù)據(jù)抽象的介紹。我們強(qiáng)調(diào)數(shù)據(jù)類型的概念,并使用Python的類機(jī)制實(shí)現(xiàn)數(shù)據(jù)類型。我們將教會(huì)學(xué)生如何使用、創(chuàng)建和設(shè)計(jì)數(shù)據(jù)類型。模塊化、封裝和其他現(xiàn)代程序設(shè)計(jì)理念是面向?qū)ο蟪绦蛟O(shè)計(jì)階段的中心概念。
算法和數(shù)據(jù)結(jié)構(gòu)把這些現(xiàn)代程序設(shè)計(jì)理念與組織和處理數(shù)據(jù)的經(jīng)典方法結(jié)合起來,因?yàn)榻?jīng)典方法依舊可以有效地用于現(xiàn)代應(yīng)用程序。我們介紹了經(jīng)典的排序和搜索算法,同時(shí)也介紹了基本的數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用,強(qiáng)調(diào)了使用科學(xué)方法來理解實(shí)現(xiàn)的性能特征。
在科學(xué)和工程中的應(yīng)用是本書的一個(gè)主要特點(diǎn)。我們通過其對具體應(yīng)用的影響來強(qiáng)調(diào)我們所討論的每一個(gè)程序設(shè)計(jì)概念。我們的示例來源于應(yīng)用數(shù)學(xué)、物理學(xué)、生物科學(xué)、計(jì)算機(jī)科學(xué)本身,并包括物理系統(tǒng)模擬、數(shù)值方法、數(shù)據(jù)可視化、聲音合成、圖像處理、金融模擬和信息技術(shù)。具體的示例包括第1章用于頁面排名的馬爾可夫鏈以及滲透問題、n體模擬、小世界現(xiàn)象的案例研究。這些應(yīng)用都是正文不可分割的組成部分。它們?yōu)閷W(xué)生提供了資料,闡述程序設(shè)計(jì)概念的重要性,并提供了計(jì)算在現(xiàn)代科學(xué)和工程中扮演著重要角色的令人信服的證據(jù)。
我們的主要目標(biāo)是教授學(xué)生學(xué)會(huì)有效解決任何程序設(shè)計(jì)問題所需要的具體機(jī)制和技能。我們完全使用Python程序,并鼓勵(lì)讀者也使用Python程序。我們關(guān)注個(gè)人的程序設(shè)計(jì),而不是大型的程序設(shè)計(jì)。
本書在大學(xué)課程中的使用本書主要面向大學(xué)一年級課程,其目標(biāo)是教授新生在科學(xué)應(yīng)用的背景下進(jìn)行程序設(shè)計(jì)。根據(jù)本書所講授的內(nèi)容,將來主修科學(xué)或工程技術(shù)的學(xué)生都將學(xué)會(huì)在熟悉的背景下學(xué)習(xí)程序設(shè)計(jì)。修完基于本書課程的學(xué)生將為在后續(xù)科學(xué)和工程技術(shù)課程中應(yīng)用他們的技能做好準(zhǔn)備,并會(huì)意識(shí)到本書所講授的內(nèi)容對進(jìn)一步學(xué)習(xí)計(jì)算機(jī)科學(xué)是非常有益的。
特別是將來主修計(jì)算機(jī)科學(xué)的學(xué)生將會(huì)受益于在科學(xué)應(yīng)用的背景下學(xué)習(xí)程序設(shè)計(jì)。與生物學(xué)家、工程師和物理學(xué)家一樣,計(jì)算機(jī)科學(xué)家在科學(xué)方法中也需要相同的基本背景,并且要承擔(dān)科學(xué)計(jì)算的任務(wù)。
實(shí)際上,跨學(xué)科的方法使得高等院校可給將來主修計(jì)算機(jī)科學(xué)或其他科學(xué)和工程技術(shù)的學(xué)生教授同一門課程。我們覆蓋了CS1所規(guī)定的資料,但是我們對應(yīng)用的關(guān)注給相關(guān)概念帶來了生命,并激發(fā)了學(xué)生學(xué)習(xí)這些概念的興趣?鐚W(xué)科的方法向?qū)W生展示了許多不同學(xué)科中的問題,可幫助他們更明智地選擇主修方向。
無論采用哪種具體機(jī)制,本書的使用最好安排在全部課程的早期。首先,這種安排允許我們利用高中數(shù)學(xué)和科學(xué)中所熟悉的資料。其次,學(xué)生在大學(xué)課程的早期學(xué)習(xí)程序設(shè)計(jì)將幫助他們在繼續(xù)學(xué)習(xí)專業(yè)課程時(shí)有效地使用計(jì)算機(jī)。像閱讀和寫作一樣,程序設(shè)計(jì)很顯然也是任何科學(xué)家和工程師的一項(xiàng)基本技能。掌握本書概念的學(xué)生將終生不斷發(fā)展這種技能,在其各自所選擇的領(lǐng)域中,他們能夠利用計(jì)算來解決或更好地理解問題和項(xiàng)目,并從這一過程中受益。
先修條件本書非常適合于科學(xué)和工程技術(shù)專業(yè)的大學(xué)一年級學(xué)生。也就是說,我們不需要其他的預(yù)備知識(shí),本書的先修條件和其他入門級科學(xué)和數(shù)學(xué)課程的要求基本一致。
完備的數(shù)學(xué)知識(shí)很重要。我們沒有詳細(xì)闡述相關(guān)的數(shù)學(xué)知識(shí),但我們引用了學(xué)生在高中已經(jīng)學(xué)習(xí)的數(shù)學(xué)課程,包括代數(shù)學(xué)、幾何學(xué)和三角學(xué)。本書目標(biāo)人群中的大多數(shù)學(xué)生都自動(dòng)滿足這些要求。事實(shí)上,我們充分利用了他們在基礎(chǔ)課程中所熟悉的知識(shí)來介紹基本的編程概念。
科學(xué)的求知欲也是一個(gè)重要的部分。科學(xué)和工程技術(shù)專業(yè)的學(xué)生天生對進(jìn)行科學(xué)探究以幫助解釋自然本質(zhì)的能力非常著迷。我們使用簡單的關(guān)于自然界的程序示例支持這種偏愛。本書任何特定的知識(shí)都沒有超過高中課程中的數(shù)學(xué)、物理、生物和化學(xué)的知識(shí)范圍。
程序設(shè)計(jì)經(jīng)驗(yàn)不是必需的,但卻是有益的。講授程序設(shè)計(jì)是我們的主要目標(biāo),因此本書沒有要求任何先行的程序設(shè)計(jì)經(jīng)驗(yàn)。然而,編寫一個(gè)程序解決一個(gè)新問題是一項(xiàng)富有挑戰(zhàn)性的智力任務(wù),所以在高中階段編寫了許多程序的學(xué)生會(huì)從選修基于本書的程序設(shè)計(jì)入門課程中受益。本書可滿足各種不同背景的學(xué)生的授課需求,因?yàn)楸緯械膽?yīng)用無論對于新手還是專家都具有吸引力。
使用計(jì)算機(jī)的經(jīng)驗(yàn)也不是必需的,況且這根本不是問題,F(xiàn)在的大學(xué)生經(jīng)常使用計(jì)算機(jī)與親朋好友交流、聽音樂、處理照片或進(jìn)行許多其他活動(dòng)。能夠以有趣而又重要的方式駕馭自己的計(jì)算機(jī)需要扣人心弦和長期的訓(xùn)練。
總之,幾乎所有科學(xué)和工程技術(shù)領(lǐng)域的學(xué)生都可以在他們第一個(gè)學(xué)期的課表中選修基于本書的課程。
目標(biāo)在科學(xué)和工程技術(shù)專業(yè)的高級課程中,教師希望完成基于本書課程的學(xué)生學(xué)到什么樣的知識(shí)呢?我們覆蓋了CS1課程,但任何講授入門級程序設(shè)計(jì)課程的教師都知道,教授后續(xù)課程的教師期望值很高:每個(gè)教師都希望學(xué)生已經(jīng)熟悉所需使用的計(jì)算環(huán)境和方法。物理學(xué)教授可能期望某些學(xué)生在周末設(shè)計(jì)一個(gè)程序來運(yùn)行模擬;工程學(xué)教授可能期望某些學(xué)生使用一個(gè)特定的軟件包并基于數(shù)值方法求解微分方程;計(jì)算機(jī)科學(xué)教授可能期望學(xué)生掌握特定編程環(huán)境的詳細(xì)知識(shí)。本書真的可以滿足這些不同的期望嗎?對于不同的學(xué)生群體,是否需要不同的入門級課程?自從20世紀(jì)后期計(jì)算機(jī)被廣泛使用以來,高等院校就一直被這些類似問題困擾。對于這些問題,我們給出的解答是本書介紹通用的程序設(shè)計(jì)入門方法,類似于數(shù)學(xué)、物理學(xué)、生物學(xué)和化學(xué)中普遍接受的入門級課程。本書努力為科學(xué)和工程技術(shù)專業(yè)的學(xué)生提供必要的基本準(zhǔn)備,同時(shí)也清楚地傳遞這樣的信息:理解計(jì)算機(jī)科學(xué)比程序設(shè)計(jì)更重要。學(xué)習(xí)過本書的學(xué)生,教師可期望他們擁有適應(yīng)于新的計(jì)算環(huán)境和在不同應(yīng)用中有效利用計(jì)算機(jī)的必要知識(shí)和能力。
完成基于本書課程的學(xué)生,他們期望在后續(xù)課程中學(xué)習(xí)到什么呢?我們的觀點(diǎn)是程序設(shè)計(jì)并不難學(xué),但學(xué)會(huì)駕馭計(jì)算機(jī)意義深遠(yuǎn)。在未來的職業(yè)生涯中,掌握了本書知識(shí)的學(xué)生已為應(yīng)對計(jì)算挑戰(zhàn)做好準(zhǔn)備。他們了解現(xiàn)代程序設(shè)計(jì)環(huán)境(例如本書介紹的Python)將為未來可能遇見的任何計(jì)算問題打開一扇大門,同時(shí)他們也獲得了學(xué)習(xí)、評價(jià)和使用其他計(jì)算工具的信心。對計(jì)算機(jī)科學(xué)感興趣的學(xué)生將準(zhǔn)備好進(jìn)一步追尋這些興趣,科學(xué)和工程技術(shù)專業(yè)的學(xué)生將準(zhǔn)備好將計(jì)算融合到他們的研究中。
本書官網(wǎng)在如下網(wǎng)站上,可以找到關(guān)于正文的大量補(bǔ)充信息:
http://introcs.cs.princeton.edu/python為了方便,我們把這個(gè)站點(diǎn)稱為本書官網(wǎng)。該網(wǎng)站包含了為使用本書的教師、學(xué)生和其他讀者準(zhǔn)備的資料。我們在這里簡要描述一下這些資料,雖然所有的Web用戶都知道,最好的方法是通過瀏覽器縱覽它們。除了少部分用于測試的資料,其他資料都是公開可用的。
本書官網(wǎng)的一個(gè)最重要的意義是讓教師和學(xué)生可以使用自己的計(jì)算機(jī)教授或?qū)W習(xí)這些資料。任何擁有計(jì)算機(jī)和瀏覽器的人,均可按照本書官網(wǎng)提供的一些指示開始學(xué)習(xí)程序設(shè)計(jì)。這個(gè)過程并不比下載一個(gè)媒體播放器或一首歌更困難。和任何其他網(wǎng)站一樣,我們的網(wǎng)站也一直保持更新。對于任何擁有本書的人而言,本書官網(wǎng)是一個(gè)非常重要的資源。特別是補(bǔ)充材料對于我們達(dá)到如下目標(biāo)至關(guān)重要,那就是使得計(jì)算機(jī)科學(xué)成為所有科學(xué)家和工程師教育不可分割的有機(jī)組成部分。
對于教師,本書官網(wǎng)包含了與教學(xué)相關(guān)的信息。這些信息主要按照我們過去十幾年開發(fā)的教學(xué)模式進(jìn)行組織,我們每周為學(xué)生授課兩次,并且每周對學(xué)生進(jìn)行兩次課外輔導(dǎo),學(xué)生分成小組與任課教師或助教進(jìn)行討論。本書官網(wǎng)包括用于這些授課的演示幻燈片,教師可基于這些幻燈片根據(jù)需要進(jìn)行補(bǔ)充和修改。
對于助教,本書官網(wǎng)包含了詳細(xì)的問題集和編程項(xiàng)目,它們均基于本書的習(xí)題,但包含更多的詳細(xì)信息。每個(gè)程序設(shè)計(jì)任務(wù)作業(yè)旨在基于一個(gè)有趣的應(yīng)用環(huán)境教授一個(gè)相關(guān)的概念,同時(shí)為每個(gè)學(xué)生提出一個(gè)引人入勝的挑戰(zhàn)。課外作業(yè)的進(jìn)展體現(xiàn)了我們的教學(xué)方法。本書官網(wǎng)全面詳細(xì)地說明了所有的作業(yè),并提供詳細(xì)的結(jié)構(gòu)化信息幫助學(xué)生在規(guī)定時(shí)間內(nèi)完成任務(wù),包括有關(guān)建議方法的描述,以及在課堂中應(yīng)該講述的授課內(nèi)容綱要。
對于學(xué)生,本書官網(wǎng)包含可快速訪問的本書的大部分資料,包括源代碼以及鼓勵(lì)學(xué)生自學(xué)的額外資料。本書官網(wǎng)為書本中的許多習(xí)題提供了參考解答,包括完整的程序代碼和測試數(shù)據(jù)。還有許多與程序設(shè)計(jì)作業(yè)相關(guān)的信息,包括建議的方法、檢查清單、常見問題解答以及測試數(shù)據(jù)。
對于一般讀者,本書官網(wǎng)是訪問與本書內(nèi)容相關(guān)的所有額外信息的資源庫。所有的網(wǎng)站內(nèi)容都提供Web超鏈接和其他路徑,以幫助讀者尋找有關(guān)討論主題的更多信息。網(wǎng)站包含了非常多的信息,比任何個(gè)人所能想象和接受的信息多得多,因?yàn)槲覀兊哪繕?biāo)是為本書內(nèi)容提供足夠多的信息,以滿足每位讀者的需求。
致謝這個(gè)項(xiàng)目自1992年開始啟動(dòng),迄今為止,許多人為這個(gè)項(xiàng)目的成功做出了貢獻(xiàn),我們在此對他們表示誠摯的感謝。特別感謝Anne Rogers的大力幫助,使本項(xiàng)目得以順利啟動(dòng);感謝Dave Hanson、Andrew Appel和Chris van Wyk耐心地解釋數(shù)據(jù)的抽象化;還要感謝Lisa Worthington,她是第一個(gè)接受挑戰(zhàn),使用本書給大學(xué)一年級學(xué)生上課的老師。同時(shí)我們還要感謝/dev/126的努力;感謝過去25年中在普林斯頓大學(xué)致力于講授本書內(nèi)容的教師、研究生和教學(xué)人員;感謝成千上萬努力學(xué)習(xí)本書的大學(xué)生們。
Robert SedgewickKevin WayneRobert Dondero2015.4
譯者序Introduction to Programming in Python: An Interdisciplinary Approach本書介紹程序設(shè)計(jì)的基本概念,而不僅僅是Python本身。本書的側(cè)重點(diǎn)在于講授使用程序設(shè)計(jì)解決各學(xué)科(從材料科學(xué)到基因組學(xué)、天體物理學(xué)、網(wǎng)絡(luò)系統(tǒng)等)中的計(jì)算問題。本書除了講述Python語言基礎(chǔ)知識(shí)之外,還涉及許多新的研究領(lǐng)域(例如,隨機(jī)Web沖浪模型、滲透原理、多體模擬、數(shù)據(jù)挖掘、小世界現(xiàn)象等),能激發(fā)學(xué)生對科學(xué)探究的求知欲,為以后專業(yè)課的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。
本書采用跨學(xué)科的方法,重點(diǎn)講述計(jì)算在其他學(xué)科中的重要地位。這種跨學(xué)科的方法向?qū)W生強(qiáng)調(diào)一種基本思想,即在當(dāng)今世界中,數(shù)學(xué)、科學(xué)、工程和計(jì)算緊密結(jié)合在一起。本書面向?qū)κ褂糜?jì)算機(jī)程序解決數(shù)學(xué)、科學(xué)和工程問題感興趣的大學(xué)生或研究生,作為教材的同時(shí)也可用于自學(xué),或作為與其他領(lǐng)域相結(jié)合的程序設(shè)計(jì)課程的補(bǔ)充材料。
本書內(nèi)容根據(jù)學(xué)習(xí)程序設(shè)計(jì)的四個(gè)階段來組織:基本元素、函數(shù)和模塊、面向?qū)ο蟮某绦蛟O(shè)計(jì)、算法和數(shù)據(jù)結(jié)構(gòu)。本書由淺入深,將理論知識(shí)和實(shí)際應(yīng)用相結(jié)合,逐步引導(dǎo)讀者掌握通過計(jì)算機(jī)程序設(shè)計(jì)解決各種科學(xué)和技術(shù)研究問題的方法。本書的最大特色是提供豐富的實(shí)際應(yīng)用示例,用于分析和解決各學(xué)科中涉及的計(jì)算問題。本書的應(yīng)用示例涉及應(yīng)用數(shù)學(xué)、物理、生物科學(xué)、計(jì)算機(jī)科學(xué)、物理系統(tǒng)、數(shù)字方法、數(shù)據(jù)可視化、聲音合成、圖像處理、金融模擬和信息技術(shù)等方面,真正體現(xiàn)了其跨學(xué)科的特點(diǎn)。
另外,本書包括大量的習(xí)題和創(chuàng)新習(xí)題,可引導(dǎo)讀者進(jìn)一步拓展通過程序設(shè)計(jì)解決科學(xué)和技術(shù)問題的能力。
本書配套課程是普林斯頓大學(xué)的精品課程,在其提供的教學(xué)官網(wǎng)(http://introcs.cs. princeton.edu/python)中包含大量的教學(xué)輔助內(nèi)容,無論是教師、助教、學(xué)生還是一般讀者,均可以從中獲取與本書內(nèi)容相關(guān)的所有資源庫。
本書由華東師范大學(xué)江紅和余青松共同翻譯。衷心感謝本書的編輯王穎老師和劉詩灝老師,敬佩他們的睿智和敬業(yè)。我們在翻譯過程中力求忠于原著,但由于時(shí)間和學(xué)識(shí)有限,且本書涉及各個(gè)領(lǐng)域的專業(yè)知識(shí),故書中的不足之處在所難免,敬請諸位同行、專家和讀者指正。
江紅 余青松
目 錄
Introduction to Programming in Python: An Interdisciplinary Approach
出版者的話
譯者序
前言
第1章 程序設(shè)計(jì)的基本元素1
1.1 你的第一個(gè)程序1
1.1.1 Python程序設(shè)計(jì)2
1.1.2 輸入和輸出4
1.1.3 問題和解答5
1.1.4 習(xí)題8
1.2 內(nèi)置數(shù)據(jù)類型8
1.2.1 相關(guān)術(shù)語9
1.2.2 字符串14
1.2.3 整數(shù)16
1.2.4 浮點(diǎn)數(shù)18
1.2.5 布爾值20
1.2.6 比較22
1.2.7 函數(shù)和API24
1.2.8 數(shù)據(jù)類型轉(zhuǎn)換26
1.2.9 小結(jié)28
1.2.10 問題和解答(字符串)28
1.2.11 問題和解答(整數(shù))30
1.2.12 問題和解答(浮點(diǎn)數(shù))31
1.2.13 問題和解答32
1.2.14 習(xí)題34
1.2.15 創(chuàng)新習(xí)題35
1.3 選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu)37
1.3.1 if語句38
1.3.2 else子句39
1.3.3 while語句40
1.3.4 for語句44
1.3.5 語句嵌套46
1.3.6 應(yīng)用實(shí)例48
1.3.7 循環(huán)和中斷55
1.3.8 死循環(huán)56
1.3.9 小結(jié)57
1.3.10 問題和解答58
1.3.11 習(xí)題60
1.3.12 創(chuàng)新習(xí)題63
1.4 數(shù)組65
1.4.1 Python中的數(shù)組66
1.4.2 數(shù)組別名和拷貝70
1.4.3 Python對數(shù)組操作提供的系統(tǒng)支持71
1.4.4 一維數(shù)組應(yīng)用實(shí)例73
1.4.5 二維數(shù)組80
1.4.6 二維數(shù)組應(yīng)用實(shí)例:自回避隨機(jī)行走84
1.4.7 小結(jié)87
1.4.8 問題和解答(字符串)87
1.4.9 習(xí)題88
1.4.10 創(chuàng)新習(xí)題89
1.5 輸入和輸出92
1.5.1 鳥瞰圖93
1.5.2 標(biāo)準(zhǔn)輸出95
1.5.3 標(biāo)準(zhǔn)輸入97
1.5.4 重定向和管道100
1.5.5 標(biāo)準(zhǔn)繪圖104
1.5.6 動(dòng)畫111
1.5.7 標(biāo)準(zhǔn)音頻113
1.5.8 小結(jié)115
1.5.9 問題和解答116
1.5.10 習(xí)題118
1.5.11 創(chuàng)新習(xí)題121
1.6 應(yīng)用案例:隨機(jī)Web沖浪模型123
1.6.1 輸入格式124
1.6.2 轉(zhuǎn)換矩陣125
1.6.3 模擬126
1.6.4 混合馬爾可夫鏈130
1.6.5 經(jīng)驗(yàn)總結(jié)134
1.6.6 習(xí)題135
1.6.7 創(chuàng)新習(xí)題136
第2章 函數(shù)和模塊137
2.1 定義函數(shù)137
2.1.1 調(diào)用和定義函數(shù)138
2.1.2 實(shí)現(xiàn)數(shù)學(xué)函數(shù)145
2.1.3 使用函數(shù)組織代碼147
2.1.4 傳遞參數(shù)和返回值149
2.1.5 實(shí)例:聲波的疊加152
2.1.6 問題和解答156
2.1.7 習(xí)題158
2.1.8 創(chuàng)新習(xí)題160
2.2 模塊和客戶端163
2.2.1 使用其他程序中的函數(shù)164
2.2.2 模塊化程序設(shè)計(jì)的抽象概念168
2.2.3 隨機(jī)數(shù)172
2.2.4 數(shù)組處理API174
2.2.5 迭代函數(shù)系統(tǒng)176
2.2.6 標(biāo)準(zhǔn)統(tǒng)計(jì)179
2.2.7 模塊化程序設(shè)計(jì)184
2.2.8 問題和解答186
2.2.9 習(xí)題188
2.2.10 創(chuàng)新習(xí)題189
2.3 遞歸191
2.3.1 你的第一個(gè)遞歸程序192
2.3.2 數(shù)學(xué)歸納法194
2.3.3 歐幾里得算法194
2.3.4 漢諾塔195
2.3.5 函數(shù)調(diào)用樹196
2.3.6 指數(shù)時(shí)間198
2.3.7 格雷碼199
2.3.8 遞歸圖形200
2.3.9 布朗橋202
2.3.10 遞歸的陷阱205
2.3.11 展望207
2.3.12 問題和解答207
2.3.13 習(xí)題208
2.3.14 創(chuàng)新習(xí)題209
2.4 案例研究:滲透原理212
2.4.1 滲透原理213
2.4.2 基本腳手架代碼214
2.4.3 垂直滲透215
2.4.4 測試217
2.4.5 估計(jì)概率220
2.4.6 滲透原理的遞歸解決方案221
2.4.7 自適應(yīng)繪制圖形224
2.4.8 經(jīng)驗(yàn)總結(jié)227
2.4.9 問題和解答(字符串)228
2.4.10 習(xí)題229
2.4.11 創(chuàng)新習(xí)題230
第3章 面向?qū)ο蟮某绦蛟O(shè)計(jì)232
3.1 使用數(shù)據(jù)類型232
3.1.1 方法233
3.1.2 字符串處理234
3.1.3 字符串處理應(yīng)用:基因組學(xué)237
3.1.4 用戶自定義數(shù)據(jù)類型237
3.1.5 顏色242
3.1.6 數(shù)字圖像處理244
3.1.7 輸入和輸出(進(jìn)一步討論)252
3.1.8 內(nèi)存管理257
3.1.9 問題和解答258
3.1.10 習(xí)題259
3.1.11 創(chuàng)新習(xí)題261
3.2 創(chuàng)建數(shù)據(jù)類型264
3.2.1 數(shù)據(jù)類型的基本元素264
3.2.2 秒表270
3.2.3 直方圖272
3.2.4 海龜繪圖273
3.2.5 遞歸圖形276
3.2.6 復(fù)數(shù)280
3.2.7 曼德布洛特集合281
3.2.8 商業(yè)數(shù)據(jù)處理285
3.2.9 問題和解答288
3.2.10 習(xí)題290
3.2.11 創(chuàng)新習(xí)題293
3.3 設(shè)計(jì)數(shù)據(jù)類型296
3.3.1 設(shè)計(jì)API297
3.3.2 封裝299
3.3.3 不可變性303
3.3.4 實(shí)例:空間向量305
3.3.5 元組308
3.3.6 多態(tài)性309
3.3.7 重載310
3.3.8 函數(shù)是對象315
3.3.9 繼承315
3.3.10 應(yīng)用:數(shù)據(jù)挖掘316
3.3.11 契約式設(shè)計(jì)321
3.3.12 問題和解答322
3.3.13 習(xí)題323
3.3.14 數(shù)據(jù)類型設(shè)計(jì)習(xí)題324
3.3.15 創(chuàng)新習(xí)題325
3.4 案例研究:多體模擬325
3.4.1 多體模擬326
3.4.2 問題和解答332
3.4.3 習(xí)題333
3.4.4 創(chuàng)新習(xí)題333
第4章 算法和數(shù)據(jù)結(jié)構(gòu)334
4.1 性能334
4.1.1 觀察335
4.1.2 假說335
4.1.3 增長量級分類340
4.1.4 預(yù)測343
4.1.5 注意事項(xiàng)345
4.1.6 性能保證346
4.1.7 Python列表和數(shù)組347
4.1.8 字符串349
4.1.9 內(nèi)存351
4.1.10 展望354
4.1.11 問題和解答355
4.1.12 習(xí)題357
4.1.13 創(chuàng)新習(xí)題361
4.2 排序和查找363
4.2.1 二分查找法363
4.2.2 插入排序算法369
4.2.3 歸并排序算法374
4.2.4 Python系統(tǒng)排序方法377
4.2.5 應(yīng)用:頻率計(jì)數(shù)378
4.2.6 經(jīng)驗(yàn)總結(jié)380
4.2.7 問題和解答381
4.2.8 習(xí)題382
4.2.9 創(chuàng)新習(xí)題383
4.3 棧和隊(duì)
你還可能感興趣
我要評論
|