Python程序設計教程:基于案例的學習方法(原書第3版)
定 價:¥99
中 教 價:¥58.41 (5.90折)促銷
庫 存 數: 1
叢 書 名:計算機科學叢書
本書采用基于案例的學習方法,在不同應用場景下以問題求解為引導講授Python程序設計,涵蓋密碼學、圖像處理、天文學和生物信息學等領域。第3版更新至Python 3.8,更加強調動手實踐,每一章都圍繞一個實戰項目展開討論,并包含大量的編程練習題。全書在應用場景中螺旋式引入解決問題所必需的Python語法知識和編程方法,從而通過不斷鞏固和拓展所學知識,進一步培養讀者的問題求解能力。本書適合作為高等院校計算機相關專業學生第yi門程序設計課程的教材或參考書,也可作為Python初學者的入門讀物。
本書采用基于案例的學習方法講解Python程序設計和計算機科學基礎知識,而非采用傳統的基于Python語法或語言元素的篇章結構。書中每一章都圍繞一個應用場景,涉及密碼學、圖像處理、天文學和生物信息學等領域,通過編程實踐幫助讀者快速掌握算法開發和問題求解技能。本書特色全面更新至Python 3.8,添加了大量新內容和新特性,并配有可免費下載的源代碼。在應用場景中螺旋式引入解決問題所必需的語法知識和編程方法,不斷鞏固和拓展所學知識。強調動手實踐,包含大量不同難度和不同復雜度的編程練習題,便于讀者自主學習及進階。
概述計算機科學面向需要求解問題的科技工作者,算法則有助于找到這些問題的解決方案。想要成為一名計算機科學家,首先意味著我們必須致力于解決問題,能夠從零開始或者通過應用以往的經驗模式來構造算法。精通計算機科學的途徑是通過深思熟慮以及循序漸進的方式感受和體驗這門學科的基本思想。計算機科學的初學者在繼續深入學習更高級和更復雜的課程之前,需要通過反復的編程實踐來透徹理解基本概念。此外,初學者還需要通向成功和獲得自信的機會。當學生學習計算機科學入門知識時,我們希望他們專注于問題求解、算法開發以及算法理解等方面。 在本書中,我們使用Python作為程序設計語言,因為Python具有清晰和簡潔的語法,以及直觀的用戶環境。Python語言的基本集合庫功能非常強大,而且易于使用。Python語言的交互特性提供了一個便利的環境,使得用戶不需要大量的編碼就可以方便地測試問題求解的各種構想。后,Python提供了一種類似于教科書的表示法來描述算法,從而減輕需要使用偽代碼描述算法的額外負擔。因此,Python語言非常有利于描述如何利用算法來解決許多現代的、有趣的問題。主要特點本書可作為計算機科學門課程的教材或參考書。本書側重于解決問題,并根據需要引入相應的語言特性來解決面臨的問題。我們沒有采用傳統的語言元素結構,而是圍繞著學生普遍感興趣的問題來組織教材的內容。因此,在本書中,讀者不會看到類似于循環結構和選擇結構等章節標題,而是會看到天體和密碼以及其他奧秘等章節標題。貫穿全書,所有的概念都是使用螺旋式模型引入的。由于Python的語法易于學習,我們可以快速介紹標準程序設計結構的基礎知識。隨著學生深入學習本書的內容,更多有關程序設計結構的細節內容和背景知識將被逐漸添加到工具箱中。這樣,學生就可以在解決問題的同時接觸到重要的計算機科學相關概念。例如,在呈現有關函數的概念時,我們演示了如何采用這種螺旋式方法以不同方式涉及同一個特定的主題。學生在第1章中就開始學習編寫帶參數的函數。接著,在第2章中介紹帶返回值的函數。在第6章中,學生會學習如何將函數作為參數傳遞給其他函數,以及有關Python作用范圍規則的詳細信息。在第8章中,學生將學習Python的關鍵字參數和可選參數。第9章將介紹遞歸函數。在第10章中,學生將學習如何編寫作為類方法的函數。在第12章中,學生將學習如何編寫抽象方法。第3版新增內容第3版包含Python 3.8中的許多更新內容和新特性。在保留面向問題求解方法的同時,我們還在第3版中添加了許多教學輔助工具,以更好地說明和突出Python的程序設計結構。例如,每一個新引入的函數或者方法都以表格的形式進行總結。input函數函數 說明input(prompt) 顯示提示信息,然后在用戶按enter或者return鍵確認時返回用戶鍵入的任何字符所組成的字符串。返回的字符串中不包括enter或者return鍵此外,第3版還包括以下新內容:使用摘要總結框來總結前文的重要知識點。摘要總結 列表是不同對象的有序集合。列表的表示方式是包括在方括號中的以逗號分隔的值。使用注意事項框來提醒學生注意可能的陷阱,并提供避免錯誤的技巧。注意事項 一定要記住在循環體中更新while循環條件,以避免無限死循環。使用編程實踐框來提供求解問題的策略,以及編寫可讀性強、易于維護的代碼的技巧。編程實踐 使用自頂向下的設計將一個大問題分解成更小的、可管理的任務。這個過程也被稱為逐步求精。使用如下格式的Python代碼,以便學生更好地看清楚其中的語法元素。作為對教師和學生反饋的回應,我們增加了附錄D,其中提供了各章中部分動手實踐的答案。在第5章中,我們更新了訪問在線數據的方法。新的示例處理目前流行的在線數據格式CSV和JSON。同樣,從第5章開始更新了字符串格式目前我們使用字符串的format方法。在第10章以及后續章節中,創建類時我們使用雙下劃線(_?_)前綴來定義實例變量名以實現封裝。變量名和函數名遵循標準的駝峰式命名規范。如何使用本書章節組織結構本書分為三個部分。第1~5章介紹所有的關鍵控制結構和Python數據類型,強調簡單的命令式程序設計結構,例如變量、循環結構和選擇結構。前5章的內容涵蓋所有主要的Python數據類型,包括整數、浮點數、字符串、列表、字典、元組和文件。在第1章中,我們通過應用示例的方式引入對象的概念。從某種意義上說,Python程序設計方法中的一切皆是對象。從通用的程序設計概念和Python提供的模塊開始,能使我們在不引入額外復雜性的情況下解決更有趣的問題。例如,我們在第1章中使用turtle(海龜)圖形模塊來介紹簡單的圖形。在第6章中,我們通過使用一個簡單的圖像對象來介紹圖像處理,該圖像對象自動從文件中加載圖像,但允許學生獲取和設置像素值。接下來的章節將展開闡述第1~5章中介紹的概念。第6~9章在引入其他問題求解模式的同時,為學生提供了進一步熟悉基本的程序設計概念的機會。學生還將進一步了解Python的內部機制。第10~13章強調面向對象的程序設計,并介紹設計和構建類所需的概念。在引入這些主題時,學生應該已經熟悉對象的思想,因此,構建自定義的對象自然而然成為下一步的目標。這部分的個示例強調多個真實對象之間交互的重要性。在實現了簡單的類之后,我們通過創建一個圖形庫以及將電子游戲作為turtle模塊的擴展來自然而然地引入繼承的概念。教學建議本書的講授可以采用若干不同的方法,圖P-1提供了一些講授方法。種方法是按照章節順序進行講授。教師可以在一個學期內講完整本書的內容,也可以在兩個學期內講完,因為本書提供了足夠多的探索性材料以滿足整個學年的授課要求。第二種方法是先講授第1~5章,然后跳轉到第10~13章。這種方法在命令式程序設計和面向對象程序設計之間提供了一種平衡,這種平衡非常適用于一個學期的教學計劃。如果還有額外的時間,則可以選擇第6~9章中的部分內容進行教學,然后再繼續講授第10~13章。另一個建議是在入門課程中講授第1~9章,該課程只涉及命令式程序設計和對象的使用。圖P-1 本書的閱讀和講授路線圖如何使用練習題本書包括三種練習題。種練習題是動手實踐中的一些習題,要求學生嘗試運行作為章節內容的代碼。通過這些練習,學生可以通過代碼來學習或者自主探索。第二種練習題是動手實踐中的另外一些習題,要求學生修改或者擴展章節內容中提供的代碼。書中常常會先提供一個簡單的代碼版本,要求學生修改簡單代碼以改進或者添加其他功能。第三種練習題是每章末尾的編程練習題,要求學生根據描述實現完整的編程項目,這些項目與對應章節所涵蓋的內容相關,但不涉及擴展或者修改已提供的代碼。貫穿全書,我們在每一節中都包含了練習題。這些練習題以不同的方式組織,讀者可以采用以下多種方式加以使用:如果是自學本書,則動手實踐練習題是很好的突破點,讀者可以隨時停下閱讀,動手實踐所學的知識。教師可能會發現,許多練習題包含課堂上要涵蓋的授課內容,這些內容可作為學生在課堂上的閱讀材料的補充。在傳統的課堂教學中,教師可以將練習題布置為家庭作業。讀者應該感到幸運的是,在計算機科學入門課程中就開始涉及諸多小型編程任務。通常學生在一個學期內能夠完成30多個小型編程任務。也可以把本書作為計算機科學動手實踐導論課程的一部分。教師可以先花少量的時間講授和強化章節要點,但大部分的課堂時間應該讓學生去完成作為補充閱讀的練習題。這種教學方式順應了計算機科學教育主動學習的發展趨勢,同時也深受學生的歡迎。各章的關鍵主題表P-1列出了每一章中重點介紹的問題,以及該章中引入的計算機科學關鍵概念。表P-1 問題和關鍵概念章 關鍵問題 計算機科學概念第1章 繪制多邊形和近似圓形,通用問題求解策略 數值數據類型、賦值語句、使用turtle對象、簡單的for循環結構、簡單的函數第2章 估算圓周率的各種方法 累加器模式、簡單選擇語句、布爾表達式、具有返回值的函數、math(數學)模塊、random(隨機)模塊第3章 密碼算法, 包括置換加密算法、替換加密算法 字符串數據類型和方法、模運算、用戶輸入、字符串的選擇和迭代第4章 計算簡單統計量 Python列表、元組和字典數據類型第5章 使用大數據集計算統計量 文件輸入和輸出、while循環、字符串格式、讀取CSV和JSON格式的在線數據第6章 數字圖像處理、像素處理、圖像的放大和縮小、邊緣檢測算法 嵌套循環、把函數作為參數傳遞、作用范圍規則第7章 大數據集的聚類分析與可視化 Python列表和字典數據類型、文件讀取和while循環的進一步闡述第8章 破解置換加密算法和替換加密算法的方法、頻率分析 在列表和字典中存儲有意義的數據、字符串處理、正則表達式模塊第9章 分形圖形的概念,如何使用分形圖形來模擬樹木、灌木、雪花和其他自然界的物體 遞歸、語法和生長規則第10章 計算和繪制大型天體之間的相互作用 面向對象的設計、類的構造、實例變量和方法第11章 模擬捕食者和獵物之間的關系 在模擬中使用對象,許多具有簡單行為的對象可能導致有趣的復雜結果第12章 設計具有點、線、多邊形和其他形狀的面向對象的圖形庫 繼承和多態性,使用turtle模塊實現更高層次的圖形庫第13章 設計和實現一個簡單的電子游戲 事件驅動的程序設計、繼承、靜態變量和靜態方法補充資料本書提供可供教師下載的補充資料,包括各章節的練習題答案、試題庫和PPT。各章列出的源代碼也提供給學生和教師。想要獲取更多相關信息,請訪問網址go.jblearning.com/python3e。作者聯系方式如果讀者有任何疑問,或者發現本書中存在技術錯誤,請通過JulieAustinAnderson@gmail.com聯系Julie Anderson。我們將在本書的官方網站上發布更正信息。致謝感謝所有的合作伙伴、同事和家人對本書的貢獻。首先感謝出版商Jones & Bartlett Lear
---作者簡介---布蘭德利·N. 米勒(Bradley N. Miller) 路德學院榮休教授,Runestone Interactive的創始人。大衛·L.拉農(David L. Ranum) 路德學院教授,致力于軟件設計和操作系統方面的科研及教學工作。朱莉·安德森(Julie Anderson) 退休前任教于羅林斯學院。她參與撰寫了一系列關于Java和Python語言的大學教材,并曾在計算機書刊出版機構擔任撰稿人、編輯和專欄作家。---譯者簡介---江紅 華東師范大學副教授,博士。1994年畢業于復旦大學計算機系。曾獲得上海市教學成果一等獎、華東師范大學教學成果一等獎、華東師范大學優秀任課教師獎等榮譽。余青松 華東師范大學高級工程師。1990年畢業于華東師范大學并留校任教。編著計算機相關教材30余本,在國內外學術期刊和學術會議上發表科技論文近百篇。
出版者的話譯者序前言第1章 Python導論 11.1 本章目標 11.2 什么是計算機科學 11.3 為什么要學習計算機科學 21.3.1 計算機科學的日常應用 21.3.2 計算機科學的重要性 31.4 問題求解的策略 31.5 Python概述 51.5.1 基本元素 61.5.2 命名對象 101.5.3 抽象 151.5.4 循環 221.6 本章小結 28關鍵術語 28Python關鍵字 29編程練習題 29第2章 thon:估算圓周率的值 302.1 本章目標 302.2 圓周率是什么 302.3 有關math模塊的進一步討論 312.4 阿基米德方法 322.4.1 Python實現 332.4.2 開發一個計算圓周率pi的函數 342.5 累加器估算法 362.5.1 累加器模式 362.5.2 項的總和:萊布尼茨公式 372.5.3 項的乘積:沃利斯公式 392.6 蒙特卡羅模擬 412.6.1 布爾表達式 432.6.2 復合布爾表達式和邏輯運算符 442.6.3 選擇語句 452.6.4 實現模擬 482.6.5 使用圖形可視化結果 502.7 本章小結 53關鍵術語 53Python關鍵字、模塊和命令 53編程練習題 54第3章 密碼以及其他奧秘 553.1 本章目標 553.2 字符串數據類型 553.2.1 拼接 563.2.2 重復 563.2.3 索引 573.2.4 字符串切片 583.2.5 字符串搜索 593.2.6 字符串方法 603.2.7 字符函數 623.3 編碼消息和解碼消息 643.4 置換加密算法 643.4.1 使用置換進行加密 643.4.2 解密置換后的消息 663.4.3 讀取用戶輸入 683.5 替換加密算法 693.6 創建密鑰 713.7 維吉尼亞加密算法 763.8 本章小結 80關鍵術語 81Python關鍵字、函數和常量 81編程練習題 82第4章 Python集合導論 834.1 本章目標 834.2 什么是數據 834.3 存儲用于處理的數據 834.3.1 再論字符串 834.3.2 列表 854.4 計算數據的統計量 904.4.1 簡單離散度度量 904.5 中心趨勢度量 924.5.1 均值 924.5.2 中值 934.5.3 眾數 954.6 頻率分布 1004.6.1 使用字典計算頻率分布表 1004.6.2 不使用字典計算頻率分布表 1014.6.3 可視化頻率分布 1034.7 離散度:標準差 1054.8 本章小結 107關鍵術語 107Python關鍵字、函數和方法 107編程練習題 108第5章 大數據:文件輸入和輸出 1095.1 本章目標 1095.2 使用文件處理大數據集 1095.2.1 文本文件 1095.2.2 迭代文件中的文本行 1115.2.3 寫入文件 1125.2.4 字符串格式化 1135.2.5 其他文件讀取方法 1155.3 從互聯網上讀取數據 1175.3.1 使用CSV文件 1175.3.2 使用while循環處理數據 1185.3.3 列表解析 1215.3.4 從互聯網上讀取JSON數據 1255.4 數據相關性 1285.5 本章小結 129關鍵術語 129Python關鍵字和函數 130編程練習題 130第6章 圖像處理 1316.1 本章目標 1316.2 什么是數字圖像處理 1316.2.1 RGB顏色模型 1316.2.2 cImage模塊 1326.3 基本圖像處理 1366.3.1 圖像負片 1366.3.2 灰度圖像 1386.3.3 一個通用的解決方案:像素映射器 1406.4 參數、參數傳遞和作用范圍 1436.4.1 通過賦值調用的參數傳遞 1446.4.2 名稱空間 1456.4.3 調用函數和查找名稱 1486.4.4 模塊和名稱空間 1506.5 高級圖像處理 1516.5.1 圖像縮放 1516.5.2 圖像拉伸:另一種視角 1536.5.3 翻轉圖像 1566.5.4 邊緣檢測 1586.6 本章小結 162關鍵術語 163Python關鍵字、函數和變量 163編程練習題 163第7章 數據挖掘:聚類分析 1647.1 本章目標 1647.2 什么是數據挖掘 1647.3 聚類分析:一個簡單的示例 1647.4 在簡單數據集上實現聚類分析 1657.4.1 兩點之間的距離 1657.4.2 聚類和中心點 1677.4.3 K-均值聚類分析算法 1677.4.4 K-均值算法的實現 1687.4.5 K-均值算法的實現(續) 1727.5 實現聚類分析:地震數據 1767.5.1 文件處理 1767.5.2 可視化 1787.6 聚類分析的缺陷及解決方法 1797.7 本章小結 180關鍵術語 180Python關鍵字 181編程練習題 181第8章 密碼分析學 1828.1 本章目標 1828.2 概述 1828.3 破解圍欄加密算法 1828.3.1 使用字典檢查結果 1838.3.2 暴力破解法 1848.3.3 一種圍欄解密算法 1868.4 破解替換加密算法