編輯推薦
? 普林斯頓大學程序設計課程入門教材,使用Python編程語言來講解許多計算問題的解決技巧和方法。?
? 內容簡介
普林斯頓大學三位經驗豐富的教師精心設計瞭這本跨學科、易於理解的Python語言程序設計的入門教材,強調重要的、引人入勝的應用,而不是無實用價值的問題,適用於高等院校計算機、工程及相關專業的本科生,以及從事編程工作的專業人員。
目錄
第1章 程序設計的基本元素 1
1.1 你的第一個程序 2
1.2 內置數據類型 14
1.3 選擇結構和循環結構 56
1.4 數組 100
1.5 輸入和輸齣 140
1.6 案例研究:隨機Web衝浪模型 188
第2章 函數和模塊 209
2.1 定義函數 210
2.2 模塊和客戶端 248
2.3 遞歸 290
2.4 案例研究:滲透原理 322
第3章 麵嚮對象程序設計 351
3.1 使用數據類型 352
3.2 創建數據類型 402
3.2 設計數據類型 450
3.4 案例研究:N體模擬 496
第4章 算法和數據結構 511
4.1 性能 512
4.2 排序和查找 556
4.3 棧和隊列 590
4.4 符號錶 634
4.5 案例研究:小世界現象 684
背景 729
術語錶 733
Contents
1—Elements of Programming . 1
1.1 Your First Program 2
1.2 Built-in Types of Data 14
1.3 Conditionals and Loops 56
1.4 Arrays 100
1.5 Input and Output 140
1.6 Case Study: Random Web Surfer 188
2—Functions and Modules 209
2.1 Defining Functions 210
2.2 Modules and Clients 248
2.3 Recursion 290
2.4 Case Study: Percolation 322
3—Object-Oriented Programming 351
3.1 Using Data Types 352
3.2 Creating Data Types 402
3.3 Designing Data Types 450
3.4 Case Study: N-Body Simulation 496
4—Algorithms and Data Structures . . . . . . . . 511
4.1 Performance 512
4.2 Sorting and Searching 556
4.3 Stacks and Queues 590
4.4 Symbol Tables 634
4.5 Case Study: Small-World Phenomenon 684
Context 729
Glossary . 733
前言/序言
21世紀以前的教育基礎是“讀、寫和算術”;而現在的教育基礎則是“讀、寫和計算”。學習編程是每個科學和工程專業學生教育的重要部分。除瞭直接的應用外,學習編程是瞭解計算機科學本質的第一步。計算機科學對現代社會産生瞭毋庸置疑的影響。本書的目的是在科學環境中嚮需要編程或想學習編程的人們講授程序設計的基本方法和應用技巧。
我們的主要目標是通過提供經驗和必要的基本工具使得學生更加有效地進行計算。我們的方法是嚮學生灌輸這樣的理念:編寫程序是一種自然而然的、富有成就感的和充滿創造性的體驗。我們將循序漸進地介紹基本概念,使用應用數學和科學中的典型應用來闡述這些概念,並讓學生有機會編寫程序來解決相關問題。
我們使用Python編程語言來編寫本書中的所有程序—在本書的標題中,我們在“程序設計”之後提及“Python”以強調本書是關於程序設計的基本概念,而不僅僅是Python本身。本書講授瞭許多計算問題求解的基本技能,這些技能可以應用於許多現代計算環境中。本書自成體係,其目標人群是沒有任何編程經驗的人。
相對於傳統的CS1課程而言,本書提供一種跨學科的方法。我們將重點講述計算在其他學科(材料科學、基因組學、天體物理學、網絡係統等)中的重要地位。跨學科的方法嚮學生強調一種基本思想,即在當今世界中,數學、科學、工程和計算緊密結閤在一起。同時,作為CS1的課本,本書主要麵嚮對數學、科學和工程感興趣的大學一年級學生。當然,本書也可用於自學,或者作為程序設計與其他領域相結閤的課程的補充材料。
內容範圍本書根據學習編程的四個階段來組織:基本元素、函數、麵嚮對象程序設計和算法。在進入編程的下一階段之前,我們將嚮讀者提供他們所需要的基本信息,使讀者有信心編寫每個階段的程序。本書所講授方法的基本特徵是使用示例程序解決所感興趣的問題,並提供各種練習題,從自學練習題到需要創新解決方案的挑戰性的難題。
基本元素包括變量、賦值語句、內置數據類型、控製流程、數組和輸入/輸齣,以及圖形和聲音。
函數和模塊為學生揭開瞭模塊化程序設計的麵紗。我們使用熟悉的數學函數來介紹Python函數,然後討論使用函數編程的意義,包括庫函數和遞歸函數。貫穿本書,我們強調一種基本理念,即把一個程序分解為可以獨立調試、維護和重用的模塊。
麵嚮對象程序設計是對數據抽象的介紹。我們強調數據類型的概念,並使用Python的類機製實現數據類型。我們將教會學生如何使用、創建和設計數據類型。模塊化、封裝和其他現代程序設計理念是麵嚮對象程序設計階段的中心概念。
算法和數據結構把現代程序設計理念與組織和處理數據的經典方法結閤起來,因為經典的方法依舊可以有效地用於現代應用程序。我們介紹瞭經典的排序和查找算法,同時也介紹瞭基本的數據結構及其應用,強調瞭使用科學方法來理解實現的性能特徵。
在科學和工程中的應用是本書的一個主要特點。我們通過其對具體應用的影響來強調我們所討論的每一個程序設計概念。我們的示例來源於應用數學、物理學、生物科學、計算機科學本身,並包括物理係統模擬、數值方法、數據可視化、聲音閤成、圖像處理、金融模擬和信息技術。具體的示例包括第1章用於網頁排名的馬爾可夫鏈以及滲透問題、N體模擬、小世界現象的案例研究。這些應用都是正文不可分割的組成部分,為學生提供瞭資料,錶明瞭程序設計概念的重要性,並提供瞭計算在現代科學和工程中扮演著重要角色的令人信服的證據。
我們的主要目標是教授學生有效解決任何編程問題所需要的具體機製和技能。我們完全使用Python程序,並鼓勵讀者也使用Python程序。我們關注個人的程序設計,而不是大型的程序設計。
本書在大學課程中的使用本書主要麵嚮大學一年級課程,其目標是教授新生在科學應用的背景下進行編程。根據本書所講授的內容,將來主修科學或工程技術領域的學生都將學會在熟悉的背景下編程。修完基於本書的任何課程的學生將為在後續科學和工程技術課程中應用他們的技能做好準備,並會意識到本書所講授的內容對進一步學習計算機科學是非常有益的。
特彆地,將來主修計算機科學的學生將會受益於在科學應用的背景下學習編程。與生物學傢、工程師和物理學傢一樣,計算機科學傢在科學方法中也需要相同的基本背景以及科學計算角色的展示。
實際上,跨學科的方法使得大專院校可給將來主修計算機科學的學生以及主修其他科學和工程技術的學生教授同一門課程。我們覆蓋瞭CS1所規定的資料,但是對應用的關注給相關概念帶來瞭活力,並激發瞭學生學習這些概念的興趣。跨學科的方法嚮學生展示瞭許多不同學科中的問題,可幫助他們更明智地選擇主修方嚮。
無論采用哪種具體機製,本書的使用最好安排在全部課程的早期。首先,這種安排允許我們利用高中數學和科學中所熟悉的資料。其次,學生在大學課程的早期學習編程將幫助他們在繼續學習其專業課程時有效地使用計算機。像閱讀和寫作一樣,程序設計很顯然也是任何科學傢和工程師的一項基本技能。掌握本書概念的學生將持續不斷地發展這種技能,並從利用計算來解決問題或更好地理解其選擇領域的問題和項目中受益。
先修條件本書非常適閤於科學和工程技術專業的大學一年級學生。也就是說,我們不需要其他預備知識,本書的知識要求與其他入門級科學和數學課程的要求基本一緻。
完備的數學知識很重要。我們沒有詳細闡述相關的數學知識,但引用瞭學生在高中已經學習的數學課程,包括代數學、幾何學和三角學。本書目標人群中的大多數學生都自動滿足這些需求。事實上,我們充分利用瞭他們在基本課程中所熟悉的知識來介紹基本的編程概念。
科學的求知欲也是一個重要的部分。科學和工程技術的學生天生對如何進行科學探究以幫助解釋自然本質的能力非常著迷。我們使用簡單的關於自然界的程序示例支持這種偏愛。本書任何特定的知識都沒有超齣高中課程中的數學、物理、生物和化學的知識範圍。
程序設計經驗不是必需的,但卻是有益的。講授程序設計是我們的主要目標,因此本書沒有要求任何先行的程序設計經驗。然而,編寫程序解決一個新問題是一項富有挑戰性的智力任務,所以在高中階段編寫瞭許多程序的學生會從選修基於本書的程序設計入門課程中受益。本書可滿足各種不同背景的學生的需求,因為本書中的應用無論對新手還是專傢都具有吸引力。
使用計算機的經驗也不是必需的,況且這根本不是問題。現在大學生經常使用計算機與親朋好友交流、聽音樂、處理照片等。認識到自己可以以有趣而又重要的方式駕馭計算機,是激動人心的。
總之,幾乎所有科學和工程技術領域的學生都可以在第一個學期的課錶中選修基於本書的課程。
目標在科學和工程技術專業的高級課程中,教師希望完成基於本書的課程的學生學到什麼樣的知識呢?我們覆蓋瞭CS1課程,但任何講授入門級程序設計課程的教師都知道,教授後續課程的教師期望值很高:每個教師都希望所有的學生熟悉所需使用的計算環境和方法。物理學教授可能期望某些學生在周末設計一個程序運行一個模擬;工程學教授可能期望某些學生使用一個特定的軟件包並基於數值方法求解微分方程;計算機科學教授可能期望特定編程環境的詳細知識。本書真的可以滿足這些不同的期望嗎?對於不同的學生,是否需要不同的入門級課程?自從20世紀後期計算機被廣泛使用以來,大專院校就一直受到這些類似問題的睏擾。對於這些問題,我們給齣的解答是本書介紹通用的程序設計入門方法,類似於數學、物理學、生物學和化學中的普遍接受的入門級課程。本書努力為科學和工程技術專業的學生提供必要的基本準備,同時也清楚地傳遞這樣的信息:理解計算機科學比程序設計更重要。學習過本書的學生,教師可期望他們擁有適應新的計算環境和在不同應用中有效利用計算機的必要知識和能力。
完成基於本書的課程的學生,期望在後續課程中學習到什麼呢?我們的觀點是程序設計並不難學,並且利用計算機能力意義深遠。掌握瞭本書知識的學生可為其未來職業生涯中解決計算挑戰做好準備。他們學會瞭現代編程環境(例如本書介紹的Python語言所提供的編程環境),將為未來可能遇到的任何計算問題打開一扇大門,同時也獲得瞭學習、評價和使用其他計算工具的信心。計算機科學專業的學生將準備好去進一步追尋這些興趣,科學和工程技術專業的學生將準備好將計算融閤到自己的研究中。
本書官網在如下網站上,可以找到關於正文的大量補充信息:
http://introcs.cs.princeton.edu/python為瞭方便,我們把這個站點引用稱為本書官網。該網站包含瞭為使用本書的教師、學生和其他讀者準備的資料。我們在這裏簡要描述一下這些資料,雖然所有的Web用戶都知道,最好的方法是通過瀏覽器瀏覽它們。除瞭少部分用於測試的資料,其他資料都是公開可用的。
本書官網的一個最重要的意義是使得教師和學生可使用他們自己的計算機教授或學習這些資料。任何擁有一颱計算機和一個瀏覽器的人,均可按照本書官網提供的一些指示開始學習編程。這個過程並不比下載一個媒體播放器或一首歌更難。和任何其他網站一樣,我們的網站也一直保持持續的更新。對於任何擁有本書的人而言,本書官網是一個非常重要的資源。特彆地,補充材料對於我們達到如下目標至關重要:使得計算機科學成為所有科學傢和工程師教育的不可分割的有機組成部分。
對於教師,本書官網包含瞭與教學相關的信息。這些信息主要按照我們過去十幾年開發的教學模式進行組織,我們每周為學生教授兩次課,並且每周對學生進行兩次課外輔導,學生分成小組與任課教師或課程助教進行討論。本書官網包括用於這些授課的演示幻燈片,教師可基於這些幻燈片進行補充和修改。
對於課程助教,本書官網包含瞭詳細的問題集和編程項目,它們均基於本書的習題,但包含更多的詳細信息。每個程序設計作業旨在基於一個有趣的應用環境教授一個相關的概念,同時為每個學生提齣一個引人入勝的挑戰。課外作業的進展體現瞭我們的教學方法。本書官網全麵並詳細地說明瞭所有的作業,並提供詳細的結構化信息幫助學生在規定時間內完成任務,包括有關建議方法的描述,以及在課堂中應該講述的授課內容的綱要。
對於學生,本書官網包含可快速訪問的本書的大部分資料(包括源代碼),以及鼓勵學生自學的額外資料。本書官網為許多書本中的習題提供瞭參考解答,包括完整的程序代碼和測試數據。還有許多與程序設計作業相關的信息,包括建議的方法、檢查清單、常見問題解答,以及測試數據。
對於一般讀者,本書官網是訪問與本書內容相關的所有額外信息的資源庫。所有網站內容都提供Web超鏈接和其他途徑,以幫助尋找有關討論的主題的更多信息。網站包含瞭非常多的信息,比任何個人所能想象和接受的信息多得多,因為我們的目標是為本書內容提供足夠多的信息,以滿足每位讀者的需求。
緻謝這個項目自1992年開始啓動,迄今為止,許多人為這個項目的成功做齣瞭貢獻,在此對他們錶示誠摯的感謝。特彆感謝Anne Rogers的大力幫助,使得本項目順利啓動;感謝Dave Hanson、Andrew Appel和Chris van Wyk耐心地解釋數據的抽象;還要感謝Lisa Worthington,她是第一個接受挑戰,使用這些資料給大學一年級學生上課的老師。同時我們還要感謝/dev/126的努力;感謝在過去25年中,在普林斯頓大學緻力於講授這些資料的教師、研究生和教學人員;感謝成韆上萬緻力於學習本書的大學生們。
Robert SedgewickKevin WayneRobert Dondero2015年4月
程序設計導論:Python語言實踐(英文版) 下載 mobi epub pdf txt 電子書 格式