關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
程序設(shè)計(jì)導(dǎo)論:Python語(yǔ)言實(shí)踐
本書(shū)從跨學(xué)科的角度入手,強(qiáng)調(diào)應(yīng)用,介紹Python有用的功能,包括編程的基本要素、功能、模塊、面向?qū)ο缶幊毯蛿?shù)據(jù)抽象對(duì)象、算法與數(shù)據(jù)結(jié)構(gòu),融匯了作者豐富的課堂教學(xué)經(jīng)驗(yàn),提供了大量源代碼、I/O庫(kù)和精選實(shí)例。適合作為高校計(jì)算機(jī)專(zhuān)業(yè)編程課程的教材。
前 言
Introduction to Programming in Python: An Interdisciplinary Approach
21世紀(jì)以前的教育基礎(chǔ)是“讀、寫(xiě)和算術(shù)”,而現(xiàn)在的教育基礎(chǔ)則是“讀、寫(xiě)和計(jì)算”。學(xué)習(xí)編程是每個(gè)科學(xué)和工程專(zhuān)業(yè)學(xué)生教育過(guò)程中的重要部分。除了直接的應(yīng)用外,學(xué)習(xí)編程是了解計(jì)算機(jī)科學(xué)本質(zhì)的第一步。計(jì)算機(jī)科學(xué)對(duì)現(xiàn)代社會(huì)產(chǎn)生了毋庸置疑的影響。本書(shū)的目的是在科學(xué)環(huán)境中為需要編程或想學(xué)習(xí)編程的人講授程序設(shè)計(jì)的基本方法和應(yīng)用技巧。
我們的主要目標(biāo)是通過(guò)提供經(jīng)驗(yàn)和必要的基本工具使得學(xué)生更加有效地進(jìn)行計(jì)算。我們的方法是向?qū)W生灌輸這樣的理念:編寫(xiě)程序是一種自然而然、富有成就感和充滿(mǎn)創(chuàng)造性的體驗(yàn)。我們將循序漸進(jìn)地介紹基本概念,并使用應(yīng)用數(shù)學(xué)和科學(xué)中的典型應(yīng)用來(lái)闡述這些概念,并為學(xué)生提供編寫(xiě)程序以解決相關(guān)問(wèn)題的機(jī)會(huì)。
我們使用Python程序設(shè)計(jì)語(yǔ)言來(lái)編寫(xiě)本書(shū)中的所有程序—在本書(shū)的標(biāo)題中,我們?cè)凇俺绦蛟O(shè)計(jì)”之后提及“Python”以強(qiáng)調(diào)本書(shū)是關(guān)于程序設(shè)計(jì)的基本概念,而不僅僅是Python本身。這本書(shū)講授了許多解決計(jì)算問(wèn)題的基本技能,這些技能可以應(yīng)用于許多現(xiàn)代計(jì)算環(huán)境中。本書(shū)自成體系,其目標(biāo)人群是沒(méi)有任何編程經(jīng)驗(yàn)的人。
相對(duì)于傳統(tǒng)的CS1課程而言,本書(shū)提供了一種跨學(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的課本,本書(shū)主要面向?qū)?shù)學(xué)、科學(xué)和工程感興趣的大學(xué)一年級(jí)學(xué)生。當(dāng)然,本書(shū)也可用于自學(xué),或者作為程序設(shè)計(jì)與其他領(lǐng)域相結(jié)合的課程的補(bǔ)充材料。
內(nèi)容范圍本書(shū)根據(jù)學(xué)習(xí)編程的四個(gè)階段來(lái)組織:基本元素、函數(shù)和模塊、面向?qū)ο蟮某绦蛟O(shè)計(jì)、算法和數(shù)據(jù)結(jié)構(gòu)。在進(jìn)入編程的下一階段之前,我們將向讀者提供他們需要的基本信息,使讀者有信心編寫(xiě)每個(gè)階段的程序。本書(shū)所講授方法的基本特征是使用示例程序解決感興趣的問(wèn)題,并提供各種練習(xí)題,從自學(xué)練習(xí)題到需要?jiǎng)?chuàng)新解決方案的挑戰(zhàn)性難題。
基本元素包括變量、賦值語(yǔ)句、內(nèi)置數(shù)據(jù)類(lèi)型、控制流程、數(shù)組和輸入/輸出,以及圖形和聲音。
函數(shù)和模塊為學(xué)生揭開(kāi)了模塊化程序設(shè)計(jì)的面紗。我們使用熟悉的數(shù)學(xué)函數(shù)來(lái)介紹Python函數(shù),然后討論使用函數(shù)編程的意義,包括庫(kù)函數(shù)和遞歸函數(shù)。貫穿本書(shū),我們強(qiáng)調(diào)一種基本理念,即把一個(gè)程序分解為可以獨(dú)立調(diào)試、維護(hù)和重用的模塊。
面向?qū)ο蟮某绦蛟O(shè)計(jì)是我們對(duì)數(shù)據(jù)抽象的介紹。我們強(qiáng)調(diào)數(shù)據(jù)類(lèi)型的概念,并使用Python的類(lèi)機(jī)制實(shí)現(xiàn)數(shù)據(jù)類(lèi)型。我們將教會(huì)學(xué)生如何使用、創(chuàng)建和設(shè)計(jì)數(shù)據(jù)類(lèi)型。模塊化、封裝和其他現(xiàn)代程序設(shè)計(jì)理念是面向?qū)ο蟪绦蛟O(shè)計(jì)階段的中心概念。
算法和數(shù)據(jù)結(jié)構(gòu)把這些現(xiàn)代程序設(shè)計(jì)理念與組織和處理數(shù)據(jù)的經(jīng)典方法結(jié)合起來(lái),因?yàn)榻?jīng)典方法依舊可以有效地用于現(xiàn)代應(yīng)用程序。我們介紹了經(jīng)典的排序和搜索算法,同時(shí)也介紹了基本的數(shù)據(jù)結(jié)構(gòu)及其應(yīng)用,強(qiáng)調(diào)了使用科學(xué)方法來(lái)理解實(shí)現(xiàn)的性能特征。
在科學(xué)和工程中的應(yīng)用是本書(shū)的一個(gè)主要特點(diǎn)。我們通過(guò)其對(duì)具體應(yīng)用的影響來(lái)強(qiáng)調(diào)我們所討論的每一個(gè)程序設(shè)計(jì)概念。我們的示例來(lái)源于應(yīng)用數(shù)學(xué)、物理學(xué)、生物科學(xué)、計(jì)算機(jī)科學(xué)本身,并包括物理系統(tǒng)模擬、數(shù)值方法、數(shù)據(jù)可視化、聲音合成、圖像處理、金融模擬和信息技術(shù)。具體的示例包括第1章用于頁(yè)面排名的馬爾可夫鏈以及滲透問(wèn)題、n體模擬、小世界現(xiàn)象的案例研究。這些應(yīng)用都是正文不可分割的組成部分。它們?yōu)閷W(xué)生提供了資料,闡述程序設(shè)計(jì)概念的重要性,并提供了計(jì)算在現(xiàn)代科學(xué)和工程中扮演著重要角色的令人信服的證據(jù)。
我們的主要目標(biāo)是教授學(xué)生學(xué)會(huì)有效解決任何程序設(shè)計(jì)問(wèn)題所需要的具體機(jī)制和技能。我們完全使用Python程序,并鼓勵(lì)讀者也使用Python程序。我們關(guān)注個(gè)人的程序設(shè)計(jì),而不是大型的程序設(shè)計(jì)。
本書(shū)在大學(xué)課程中的使用本書(shū)主要面向大學(xué)一年級(jí)課程,其目標(biāo)是教授新生在科學(xué)應(yīng)用的背景下進(jìn)行程序設(shè)計(jì)。根據(jù)本書(shū)所講授的內(nèi)容,將來(lái)主修科學(xué)或工程技術(shù)的學(xué)生都將學(xué)會(huì)在熟悉的背景下學(xué)習(xí)程序設(shè)計(jì)。修完基于本書(shū)課程的學(xué)生將為在后續(xù)科學(xué)和工程技術(shù)課程中應(yīng)用他們的技能做好準(zhǔn)備,并會(huì)意識(shí)到本書(shū)所講授的內(nèi)容對(duì)進(jìn)一步學(xué)習(xí)計(jì)算機(jī)科學(xué)是非常有益的。
特別是將來(lái)主修計(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é)科的方法使得高等院校可給將來(lái)主修計(jì)算機(jī)科學(xué)或其他科學(xué)和工程技術(shù)的學(xué)生教授同一門(mén)課程。我們覆蓋了CS1所規(guī)定的資料,但是我們對(duì)應(yīng)用的關(guān)注給相關(guān)概念帶來(lái)了生命,并激發(fā)了學(xué)生學(xué)習(xí)這些概念的興趣?鐚W(xué)科的方法向?qū)W生展示了許多不同學(xué)科中的問(wèn)題,可幫助他們更明智地選擇主修方向。
無(wú)論采用哪種具體機(jī)制,本書(shū)的使用最好安排在全部課程的早期。首先,這種安排允許我們利用高中數(shù)學(xué)和科學(xué)中所熟悉的資料。其次,學(xué)生在大學(xué)課程的早期學(xué)習(xí)程序設(shè)計(jì)將幫助他們?cè)诶^續(xù)學(xué)習(xí)專(zhuān)業(yè)課程時(shí)有效地使用計(jì)算機(jī)。像閱讀和寫(xiě)作一樣,程序設(shè)計(jì)很顯然也是任何科學(xué)家和工程師的一項(xiàng)基本技能。掌握本書(shū)概念的學(xué)生將終生不斷發(fā)展這種技能,在其各自所選擇的領(lǐng)域中,他們能夠利用計(jì)算來(lái)解決或更好地理解問(wèn)題和項(xiàng)目,并從這一過(guò)程中受益。
先修條件本書(shū)非常適合于科學(xué)和工程技術(shù)專(zhuān)業(yè)的大學(xué)一年級(jí)學(xué)生。也就是說(shuō),我們不需要其他的預(yù)備知識(shí),本書(shū)的先修條件和其他入門(mén)級(jí)科學(xué)和數(shù)學(xué)課程的要求基本一致。
完備的數(shù)學(xué)知識(shí)很重要。我們沒(méi)有詳細(xì)闡述相關(guān)的數(shù)學(xué)知識(shí),但我們引用了學(xué)生在高中已經(jīng)學(xué)習(xí)的數(shù)學(xué)課程,包括代數(shù)學(xué)、幾何學(xué)和三角學(xué)。本書(shū)目標(biāo)人群中的大多數(shù)學(xué)生都自動(dòng)滿(mǎn)足這些要求。事實(shí)上,我們充分利用了他們?cè)诨A(chǔ)課程中所熟悉的知識(shí)來(lái)介紹基本的編程概念。
科學(xué)的求知欲也是一個(gè)重要的部分。科學(xué)和工程技術(shù)專(zhuān)業(yè)的學(xué)生天生對(duì)進(jìn)行科學(xué)探究以幫助解釋自然本質(zhì)的能力非常著迷。我們使用簡(jiǎn)單的關(guān)于自然界的程序示例支持這種偏愛(ài)。本書(shū)任何特定的知識(shí)都沒(méi)有超過(guò)高中課程中的數(shù)學(xué)、物理、生物和化學(xué)的知識(shí)范圍。
程序設(shè)計(jì)經(jīng)驗(yàn)不是必需的,但卻是有益的。講授程序設(shè)計(jì)是我們的主要目標(biāo),因此本書(shū)沒(méi)有要求任何先行的程序設(shè)計(jì)經(jīng)驗(yàn)。然而,編寫(xiě)一個(gè)程序解決一個(gè)新問(wèn)題是一項(xiàng)富有挑戰(zhàn)性的智力任務(wù),所以在高中階段編寫(xiě)了許多程序的學(xué)生會(huì)從選修基于本書(shū)的程序設(shè)計(jì)入門(mén)課程中受益。本書(shū)可滿(mǎn)足各種不同背景的學(xué)生的授課需求,因?yàn)楸緯?shū)中的應(yīng)用無(wú)論對(duì)于新手還是專(zhuān)家都具有吸引力。
使用計(jì)算機(jī)的經(jīng)驗(yàn)也不是必需的,況且這根本不是問(wèn)題,F(xiàn)在的大學(xué)生經(jīng)常使用計(jì)算機(jī)與親朋好友交流、聽(tīng)音樂(lè)、處理照片或進(jìn)行許多其他活動(dòng)。能夠以有趣而又重要的方式駕馭自己的計(jì)算機(jī)需要扣人心弦和長(zhǎng)期的訓(xùn)練。
總之,幾乎所有科學(xué)和工程技術(shù)領(lǐng)域的學(xué)生都可以在他們第一個(gè)學(xué)期的課表中選修基于本書(shū)的課程。
目標(biāo)在科學(xué)和工程技術(shù)專(zhuān)業(yè)的高級(jí)課程中,教師希望完成基于本書(shū)課程的學(xué)生學(xué)到什么樣的知識(shí)呢?我們覆蓋了CS1課程,但任何講授入門(mén)級(jí)程序設(shè)計(jì)課程的教師都知道,教授后續(xù)課程的教師期望值很高:每個(gè)教師都希望學(xué)生已經(jīng)熟悉所需使用的計(jì)算環(huán)境和方法。物理學(xué)教授可能期望某些學(xué)生在周末設(shè)計(jì)一個(gè)程序來(lái)運(yùn)行模擬;工程學(xué)教授可能期望某些學(xué)生使用一個(gè)特定的軟件包并基于數(shù)值方法求解微分方程;計(jì)算機(jī)科學(xué)教授可能期望學(xué)生掌握特定編程環(huán)境的詳細(xì)知識(shí)。本書(shū)真的可以滿(mǎn)足這些不同的期望嗎?對(duì)于不同的學(xué)生群體,是否需要不同的入門(mén)級(jí)課程?自從20世紀(jì)后期計(jì)算機(jī)被廣泛使用以來(lái),高等院校就一直被這些類(lèi)似問(wèn)題困擾。對(duì)于這些問(wèn)題,我們給出的解答是本書(shū)介紹通用的程序設(shè)計(jì)入門(mén)方法,類(lèi)似于數(shù)學(xué)、物理學(xué)、生物學(xué)和化學(xué)中普遍接受的入門(mén)級(jí)課程。本書(shū)努力為科學(xué)和工程技術(shù)專(zhuān)業(yè)的學(xué)生提供必要的基本準(zhǔn)備,同時(shí)也清楚地傳遞這樣的信息:理解計(jì)算機(jī)科學(xué)比程序設(shè)計(jì)更重要。學(xué)習(xí)過(guò)本書(shū)的學(xué)生,教師可期望他們擁有適應(yīng)于新的計(jì)算環(huán)境和在不同應(yīng)用中有效利用計(jì)算機(jī)的必要知識(shí)和能力。
完成基于本書(shū)課程的學(xué)生,他們期望在后續(xù)課程中學(xué)習(xí)到什么呢?我們的觀點(diǎn)是程序設(shè)計(jì)并不難學(xué),但學(xué)會(huì)駕馭計(jì)算機(jī)意義深遠(yuǎn)。在未來(lái)的職業(yè)生涯中,掌握了本書(shū)知識(shí)的學(xué)生已為應(yīng)對(duì)計(jì)算挑戰(zhàn)做好準(zhǔn)備。他們了解現(xiàn)代程序設(shè)計(jì)環(huán)境(例如本書(shū)介紹的Python)將為未來(lái)可能遇見(jiàn)的任何計(jì)算問(wèn)題打開(kāi)一扇大門(mén),同時(shí)他們也獲得了學(xué)習(xí)、評(píng)價(jià)和使用其他計(jì)算工具的信心。對(duì)計(jì)算機(jī)科學(xué)感興趣的學(xué)生將準(zhǔn)備好進(jìn)一步追尋這些興趣,科學(xué)和工程技術(shù)專(zhuān)業(yè)的學(xué)生將準(zhǔn)備好將計(jì)算融合到他們的研究中。
本書(shū)官網(wǎng)在如下網(wǎng)站上,可以找到關(guān)于正文的大量補(bǔ)充信息:
http://introcs.cs.princeton.edu/python為了方便,我們把這個(gè)站點(diǎn)稱(chēng)為本書(shū)官網(wǎng)。該網(wǎng)站包含了為使用本書(shū)的教師、學(xué)生和其他讀者準(zhǔn)備的資料。我們?cè)谶@里簡(jiǎn)要描述一下這些資料,雖然所有的Web用戶(hù)都知道,最好的方法是通過(guò)瀏覽器縱覽它們。除了少部分用于測(cè)試的資料,其他資料都是公開(kāi)可用的。
本書(shū)官網(wǎng)的一個(gè)最重要的意義是讓教師和學(xué)生可以使用自己的計(jì)算機(jī)教授或?qū)W習(xí)這些資料。任何擁有計(jì)算機(jī)和瀏覽器的人,均可按照本書(shū)官網(wǎng)提供的一些指示開(kāi)始學(xué)習(xí)程序設(shè)計(jì)。這個(gè)過(guò)程并不比下載一個(gè)媒體播放器或一首歌更困難。和任何其他網(wǎng)站一樣,我們的網(wǎng)站也一直保持更新。對(duì)于任何擁有本書(shū)的人而言,本書(shū)官網(wǎng)是一個(gè)非常重要的資源。特別是補(bǔ)充材料對(duì)于我們達(dá)到如下目標(biāo)至關(guān)重要,那就是使得計(jì)算機(jī)科學(xué)成為所有科學(xué)家和工程師教育不可分割的有機(jī)組成部分。
對(duì)于教師,本書(shū)官網(wǎng)包含了與教學(xué)相關(guān)的信息。這些信息主要按照我們過(guò)去十幾年開(kāi)發(fā)的教學(xué)模式進(jìn)行組織,我們每周為學(xué)生授課兩次,并且每周對(duì)學(xué)生進(jìn)行兩次課外輔導(dǎo),學(xué)生分成小組與任課教師或助教進(jìn)行討論。本書(shū)官網(wǎng)包括用于這些授課的演示幻燈片,教師可基于這些幻燈片根據(jù)需要進(jìn)行補(bǔ)充和修改。
對(duì)于助教,本書(shū)官網(wǎng)包含了詳細(xì)的問(wèn)題集和編程項(xiàng)目,它們均基于本書(shū)的習(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é)方法。本書(shū)官網(wǎng)全面詳細(xì)地說(shuō)明了所有的作業(yè),并提供詳細(xì)的結(jié)構(gòu)化信息幫助學(xué)生在規(guī)定時(shí)間內(nèi)完成任務(wù),包括有關(guān)建議方法的描述,以及在課堂中應(yīng)該講述的授課內(nèi)容綱要。
對(duì)于學(xué)生,本書(shū)官網(wǎng)包含可快速訪問(wèn)的本書(shū)的大部分資料,包括源代碼以及鼓勵(lì)學(xué)生自學(xué)的額外資料。本書(shū)官網(wǎng)為書(shū)本中的許多習(xí)題提供了參考解答,包括完整的程序代碼和測(cè)試數(shù)據(jù)。還有許多與程序設(shè)計(jì)作業(yè)相關(guān)的信息,包括建議的方法、檢查清單、常見(jiàn)問(wèn)題解答以及測(cè)試數(shù)據(jù)。
對(duì)于一般讀者,本書(shū)官網(wǎng)是訪問(wèn)與本書(shū)內(nèi)容相關(guān)的所有額外信息的資源庫(kù)。所有的網(wǎng)站內(nèi)容都提供Web超鏈接和其他路徑,以幫助讀者尋找有關(guān)討論主題的更多信息。網(wǎng)站包含了非常多的信息,比任何個(gè)人所能想象和接受的信息多得多,因?yàn)槲覀兊哪繕?biāo)是為本書(shū)內(nèi)容提供足夠多的信息,以滿(mǎn)足每位讀者的需求。
致謝這個(gè)項(xiàng)目自1992年開(kāi)始啟動(dòng),迄今為止,許多人為這個(gè)項(xiàng)目的成功做出了貢獻(xiàn),我們?cè)诖藢?duì)他們表示誠(chéng)摯的感謝。特別感謝Anne Rogers的大力幫助,使本項(xiàng)目得以順利啟動(dòng);感謝Dave Hanson、Andrew Appel和Chris van Wyk耐心地解釋數(shù)據(jù)的抽象化;還要感謝Lisa Worthington,她是第一個(gè)接受挑戰(zhàn),使用本書(shū)給大學(xué)一年級(jí)學(xué)生上課的老師。同時(shí)我們還要感謝/dev/126的努力;感謝過(guò)去25年中在普林斯頓大學(xué)致力于講授本書(shū)內(nèi)容的教師、研究生和教學(xué)人員;感謝成千上萬(wàn)努力學(xué)習(xí)本書(shū)的大學(xué)生們。
Robert SedgewickKevin WayneRobert Dondero2015.4
譯者序Introduction to Programming in Python: An Interdisciplinary Approach本書(shū)介紹程序設(shè)計(jì)的基本概念,而不僅僅是Python本身。本書(shū)的側(cè)重點(diǎn)在于講授使用程序設(shè)計(jì)解決各學(xué)科(從材料科學(xué)到基因組學(xué)、天體物理學(xué)、網(wǎng)絡(luò)系統(tǒng)等)中的計(jì)算問(wèn)題。本書(shū)除了講述Python語(yǔ)言基礎(chǔ)知識(shí)之外,還涉及許多新的研究領(lǐng)域(例如,隨機(jī)Web沖浪模型、滲透原理、多體模擬、數(shù)據(jù)挖掘、小世界現(xiàn)象等),能激發(fā)學(xué)生對(duì)科學(xué)探究的求知欲,為以后專(zhuān)業(yè)課的學(xué)習(xí)打下堅(jiān)實(shí)的基礎(chǔ)。
本書(shū)采用跨學(xué)科的方法,重點(diǎn)講述計(jì)算在其他學(xué)科中的重要地位。這種跨學(xué)科的方法向?qū)W生強(qiáng)調(diào)一種基本思想,即在當(dāng)今世界中,數(shù)學(xué)、科學(xué)、工程和計(jì)算緊密結(jié)合在一起。本書(shū)面向?qū)κ褂糜?jì)算機(jī)程序解決數(shù)學(xué)、科學(xué)和工程問(wèn)題感興趣的大學(xué)生或研究生,作為教材的同時(shí)也可用于自學(xué),或作為與其他領(lǐng)域相結(jié)合的程序設(shè)計(jì)課程的補(bǔ)充材料。
本書(shū)內(nèi)容根據(jù)學(xué)習(xí)程序設(shè)計(jì)的四個(gè)階段來(lái)組織:基本元素、函數(shù)和模塊、面向?qū)ο蟮某绦蛟O(shè)計(jì)、算法和數(shù)據(jù)結(jié)構(gòu)。本書(shū)由淺入深,將理論知識(shí)和實(shí)際應(yīng)用相結(jié)合,逐步引導(dǎo)讀者掌握通過(guò)計(jì)算機(jī)程序設(shè)計(jì)解決各種科學(xué)和技術(shù)研究問(wèn)題的方法。本書(shū)的最大特色是提供豐富的實(shí)際應(yīng)用示例,用于分析和解決各學(xué)科中涉及的計(jì)算問(wèn)題。本書(shū)的應(yīng)用示例涉及應(yīng)用數(shù)學(xué)、物理、生物科學(xué)、計(jì)算機(jī)科學(xué)、物理系統(tǒng)、數(shù)字方法、數(shù)據(jù)可視化、聲音合成、圖像處理、金融模擬和信息技術(shù)等方面,真正體現(xiàn)了其跨學(xué)科的特點(diǎn)。
另外,本書(shū)包括大量的習(xí)題和創(chuàng)新習(xí)題,可引導(dǎo)讀者進(jìn)一步拓展通過(guò)程序設(shè)計(jì)解決科學(xué)和技術(shù)問(wèn)題的能力。
本書(shū)配套課程是普林斯頓大學(xué)的精品課程,在其提供的教學(xué)官網(wǎng)(http://introcs.cs. princeton.edu/python)中包含大量的教學(xué)輔助內(nèi)容,無(wú)論是教師、助教、學(xué)生還是一般讀者,均可以從中獲取與本書(shū)內(nèi)容相關(guān)的所有資源庫(kù)。
本書(shū)由華東師范大學(xué)江紅和余青松共同翻譯。衷心感謝本書(shū)的編輯王穎老師和劉詩(shī)灝老師,敬佩他們的睿智和敬業(yè)。我們?cè)诜g過(guò)程中力求忠于原著,但由于時(shí)間和學(xué)識(shí)有限,且本書(shū)涉及各個(gè)領(lǐng)域的專(zhuān)業(yè)知識(shí),故書(shū)中的不足之處在所難免,敬請(qǐng)諸位同行、專(zhuān)家和讀者指正。
江紅 余青松
目 錄
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 問(wèn)題和解答5
1.1.4 習(xí)題8
1.2 內(nèi)置數(shù)據(jù)類(lèi)型8
1.2.1 相關(guān)術(shù)語(yǔ)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ù)類(lèi)型轉(zhuǎn)換26
1.2.9 小結(jié)28
1.2.10 問(wèn)題和解答(字符串)28
1.2.11 問(wèn)題和解答(整數(shù))30
1.2.12 問(wèn)題和解答(浮點(diǎn)數(shù))31
1.2.13 問(wèn)題和解答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語(yǔ)句38
1.3.2 else子句39
1.3.3 while語(yǔ)句40
1.3.4 for語(yǔ)句44
1.3.5 語(yǔ)句嵌套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 問(wèn)題和解答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對(duì)數(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 問(wèn)題和解答(字符串)87
1.4.9 習(xí)題88
1.4.10 創(chuàng)新習(xí)題89
1.5 輸入和輸出92
1.5.1 鳥(niǎo)瞰圖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)畫(huà)111
1.5.7 標(biāo)準(zhǔn)音頻113
1.5.8 小結(jié)115
1.5.9 問(wèn)題和解答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 問(wèn)題和解答156
2.1.7 習(xí)題158
2.1.8 創(chuàng)新習(xí)題160
2.2 模塊和客戶(hù)端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 問(wèn)題和解答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)用樹(shù)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 問(wèn)題和解答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 測(cè)試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 問(wèn)題和解答(字符串)228
2.4.10 習(xí)題229
2.4.11 創(chuàng)新習(xí)題230
第3章 面向?qū)ο蟮某绦蛟O(shè)計(jì)232
3.1 使用數(shù)據(jù)類(lèi)型232
3.1.1 方法233
3.1.2 字符串處理234
3.1.3 字符串處理應(yīng)用:基因組學(xué)237
3.1.4 用戶(hù)自定義數(shù)據(jù)類(lèi)型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 問(wèn)題和解答258
3.1.10 習(xí)題259
3.1.11 創(chuàng)新習(xí)題261
3.2 創(chuàng)建數(shù)據(jù)類(lèi)型264
3.2.1 數(shù)據(jù)類(lèi)型的基本元素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 問(wèn)題和解答288
3.2.10 習(xí)題290
3.2.11 創(chuàng)新習(xí)題293
3.3 設(shè)計(jì)數(shù)據(jù)類(lèi)型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ù)是對(duì)象315
3.3.9 繼承315
3.3.10 應(yīng)用:數(shù)據(jù)挖掘316
3.3.11 契約式設(shè)計(jì)321
3.3.12 問(wèn)題和解答322
3.3.13 習(xí)題323
3.3.14 數(shù)據(jù)類(lèi)型設(shè)計(jì)習(xí)題324
3.3.15 創(chuàng)新習(xí)題325
3.4 案例研究:多體模擬325
3.4.1 多體模擬326
3.4.2 問(wèn)題和解答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 假說(shuō)335
4.1.3 增長(zhǎng)量級(jí)分類(lèi)340
4.1.4 預(yù)測(cè)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 問(wèn)題和解答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 問(wèn)題和解答381
4.2.8 習(xí)題382
4.2.9 創(chuàng)新習(xí)題383
4.3 棧和隊(duì)
你還可能感興趣
我要評(píng)論
|