1. 程式人生 > >Python 程式設計(第3版)

Python 程式設計(第3版)

內容簡介

本書以 Python 語言為工具教授計算機程式設計,強調解決問題、設計和程式設計是電腦科學的核心技能。本書特色鮮明、示例生動有趣、內容易讀易學,適合 Python 入門程式設計師閱讀,也適合高校計算機專業的教師和學生參考。

本書具有以下特點:

  • 廣泛使用計算機圖形學——本書提供一個簡單的圖形軟體包 graphics.py 作為示例。
  • 生動有趣的例子——本書包含了完整的程式設計示例來解決實際問題。
  • 親切自然的行文——以自然的敘事風格介紹了重要的電腦科學概念。
  • 靈活的螺旋式學習過程——簡單地呈現概念,逐漸介紹新的思想,章節末加以鞏固強化。
  • 時機恰好地介紹物件——本書既不是嚴格的“早講物件”,也不是“晚講物件”,而是在指令式程式設計的基礎上簡要地介紹了物件概念。
  • 提供豐富的教學素材——提供了大量的章末習題。還提供程式碼示例和教學 PPT 下載。

作者簡介

John Zelle 是美國 Wartburg 大學數學和計算機系教授。他負責教授 Python 程式設計課程,並且結合多年的教學經驗編寫了本書,在美國高校受到普遍的歡迎。他還從事 VR、AI 等方面的研究,發表了一些機器學習方面的論文。

本書內容

當出版商第一次發給我這本書的草稿時,我立刻感到十分興奮。它看起來像是 Python 教科書,但實際上是對程式設計技術的介紹,只是使用 Python 作為初學者的首選工具。這是我一直以來想象的 Python 在教育中最大的用途:不是作為唯一的語言,而是作為第一種語言,就像在藝術中一樣,開始學習時用鉛筆繪畫,而不是立即畫油畫。

作者在本書前言中提到,Python 作為第一種程式語言是接近理想的,因為它不是“玩具語言”。作為 Python 的建立者,我不想獨佔所有的功勞:Python 源於 ABC,這種語言在20世紀80年代初由阿姆斯特丹國家數學和電腦科學研究所(CWI)的 Lambert Meertens、Leo Geurts 等人設計,旨在教授程式設計。如果說我為他們的工作添加了什麼東西,那就是讓 Python 變成了一種非玩具語言,具有廣泛的使用者群、廣泛的標準和大量的第三方應用程式模組。

我沒有正式的教學經驗,所以我可能沒有資格來評判其教育效果。不過,作為一名具有將近30年經驗的程式設計師,讀過本書,我非常讚賞本書對困難概念的明確解釋。我也喜歡書中許多好的練習和問題,既檢查理解,又鼓勵思考更深層次的問題。

恭喜本書讀者!學習 Python 將得到很好的回報。我保證在這個過程中你會感到快樂,我希望你在成為專業的軟體開發人員後,不要忘記你的第一種語言。

——Guido van Rossum,Python 之父

前言

本書旨在作為大學的一門計算課程的主要教材。它採用相當傳統的方法,強調解決問題、設計和程式設計是電腦科學的核心技能。但是,這些思想利用非傳統語言(即 Python)來說明。在我的教學經驗中,我發現許多學生很難掌握電腦科學和程式設計的基本概念。這個困難可以部分歸咎於最常用於入門課程的語言和工具的複雜性。因此,這本教材只有一個總目標:儘可能簡單地介紹基礎電腦科學概念,但不是過於簡單。使用 Python 是這個目標的核心。

傳統的系統語言(如 C++、Ada 和 Java)的發展是為了解決大規模程式設計中的問題,主要側重於結構和紀律。它們不是為了易於編寫中小型程式。最近指令碼(有時稱為“敏捷”)語言(如 Python)的普及程度上升,這表明了一種替代方法。Python 非常靈活,讓實驗變得容易。解決簡單問題的方法簡單而優雅。Python 為新手程式設計師提供了一個很好的實驗室。

Python 具有一些特徵,使其成為第一種程式語言的接近完美的選擇。Python 基本結構簡單、乾淨、設計精良,使學生能夠專注於演算法思維和程式設計的主要技能,而不會陷入晦澀難解的語言細節。在 Python 中學習的概念可以直接傳遞給後續學習的系統語言(如 C ++ 和 Java)。但 Python 不是一種“玩具語言”,它是一種現實世界的生產語言,可以在幾乎每個程式設計平臺上免費提供,並且具有自己易於使用的整合程式設計環境。最好的是,Python 讓學習程式設計又變得有趣了。

雖然我使用 Python 作為語言,但 Python 教學並不是本書的重點。相反,Python 用於說明適用於任何語言或計算環境的設計和程式設計的基本原理。在某些地方,我有意避免某些 Python 的功能和習慣用法,它們通常不會在其他語言中使用。市面上有很多關於 Python 的好書,本書旨在介紹計算。除了使用 Python 之外,本書還有其他一些特點,旨在使其成為電腦科學的平臺。其中一些特點如下。

  • 廣泛使用計算機圖形學。學生喜歡編寫包含圖形的程式。本書提供了一個簡單易用的圖形軟體包(以 Python 模組提供),允許學生們學習計算機圖形學原理,並練習面向物件的概念,但沒有完整的圖形庫和事件驅動程式設計中固有的複雜性。
  • 有趣的例子。本書包含了完整的程式設計示例來解決實際問題。
  • 易讀的行文。本書的敘事風格以自然的方式介紹了重要的電腦科學概念,這是逐步討論的結果。我試圖避免隨意的事實羅列,或稍微有點關係的側邊欄。
  • 靈活的螺旋式介紹。因為本書的目的是簡單地呈現概念,所以每一章的組織是為了逐漸向學生介紹新的思想,讓他們有時間來吸收越來越多的細節。前幾章介紹了需要更多時間掌握的思想,並在後面的章節中加以強化。
  • 時機恰好地介紹物件。介紹面向物件技術的適當時機,是電腦科學教育中持續存在的爭議。本書既不是嚴格的“早講物件”,也不是“晚講物件”,而是在指令式程式設計的基礎上簡要地介紹了物件概念。學生學習多種設計技巧,包括自頂向下(函式分解)、螺旋式(原型)和麵向物件的方法。另外,教科書的材料足夠靈活,可以容納其他方法。
  • 大量的章末習題。每章末尾的練習為學生提供了充分的機會,強化對本章內容的掌握,並實踐新的程式設計技巧。

第2版和第3版的變化

本書的第1版已經有些老舊,但它所採用的方法現在仍然有效,就像當時一樣。

雖然基本原則並沒有改變,但技術環境卻變了。隨著 Python 3.0 的釋出,對原始資料的更新變得必要。第2版基本上與最初的版本相同,但更新使用了 Python 3.0。本書中的每個程式示例幾乎不得不針對新的 Python 來修改。此外,為了適應 Python 中的某些更改(特別是刪除了字串庫),內容的順序稍做了調整,在討論字串處理之前介紹了物件術語。這種變化有一個好的副作用,即更早介紹計算機圖形學,以激發學生的興趣。

第3版延續了更新課本以反映新技術的傳統,同時保留了經過時間考驗的方法來教授電腦科學的入門課程。這個版本的一個重要變化是消除了 eval 的大部分用法,並增加了其危險性的討論。在連線越來越多的世界中,越早開始考慮電腦保安性越好。

本書添加了幾個新的圖形示例,在第4章到第12章中給出,以引入支援動畫的圖形庫的新功能,包括簡單的視訊遊戲開發。這使得最新的課本與大作業專案的型別保持一致,這些大作業常在現代的入門課程中佈置。

在整個課本中還有一些較小的改動,其中包括:

  • 第5章添加了檔案對話方塊的內容;
  • 第6章已經擴充套件並重新組織,強調返回值的函式;
  • 為了一致地使用 IDLE(標準的“隨 Python 分發的”開發環境),介紹範圍已經改進並簡化,這使得本書更適合自學和作為課堂教科書使用;
  • 技術參考已更新;
  • 讀者可訪問非同步社群(www.epubit.com.cn)並搜尋本書頁面,以下載示例程式碼和習題解答。採用本書作為教材的老師,可以聯絡 [email protected],申請教學 PPT。

本書主要內容

為了保持簡單的目標,我試圖限制2門課不會涵蓋的內容數量。不過,這裡的內容可能比較多,典型的一學期入門課程也許不能涵蓋。我的課程依次介紹了前12章中的幾乎所有內容,儘管不一定深入介紹每個部分。第13章(“演算法設計與遞迴”)中的一個或兩個主題通常穿插在學期中的適當時候。

注意到不同的教師喜歡以不同的方式處理主題,我試圖保持材料相對靈活。第1章~第4章(“計算機和程式”“編寫簡單程式”“數字計算”“物件和圖形”)是必不可少的介紹,應該按順序進行說明。字串處理的第5章(“序列:字串、列表和檔案”)的初始部分也是基本的,但是稍後的主題(如字串格式化和檔案處理)可能會被延遲,直到後來需要。第6章~第8章(“定義函式”“判斷結構”和“迴圈結構和布林值”)設計為獨立的,可以以任何順序進行。關於設計方法的第9章~第12章是按順序進行的,但是如果教師希望在各種設計技術之前介紹列表(陣列),那麼第11章(“資料集合”)中的內容可以很容易地提前。希望強調面向物件設計的教師不需要花費很多時間在第9章。第13章包含更多高階材料,可能會在最後介紹或穿插在整個課程的各個地方。

致謝

多年來,我教授 CS1 的方法受到了我讀過並用於課堂的許多新教材的影響。我從這些書中學到的很多東西無疑已經融入了本書。有幾位專家的方法非常重要,我覺得他們值得特別提及。A. K. Dewdney 一直有一個訣竅,找出說明覆雜問題的簡單例子。我從中借鑑了一些,裝上了 Python 的新腿。我也感謝 Owen Astrachan 和 Cay Horstmann 的精彩教科書。我在第4章介紹的圖形庫直接受到 Horstmann 設計的類似庫的教學經驗啟發。我也從 Nell Dale 那裡學到了很多關於教授電腦科學的知識,當時我是得克薩斯大學的研究生,很幸運地擔任了助教。

許多人直接或間接地為本書做出了貢獻。我也得到了沃特伯格學院的同事(和前同事)的很多幫助和鼓勵:Lynn Olson 在一開始就不動搖地支援,Josef Breutzmann 提供了許多專案想法,Terry Letsche 為第1版和第3版編寫了 PowerPoint 幻燈片。

我要感謝以下閱讀或評論第1版手稿的人:莫赫德州立大學的 Rus May、北卡羅萊納州立大學的 Carolyn Miller、谷歌的 Guido Van Rossum、加州州立大學(Chico)的 Jim Sager、森特學院的 Christine Shannon、羅徹斯特理工學院的 Paul Tymann、亞利桑那大學的 Suzanne Westbrook。我很感激首都大學的 Dave Reed,他使用了第1版的早期版本,提供了無數有見地的建議,並與芝加哥大學的 Jeffrey Cohen 合作,為本版本提供了替代的章末練習。Ernie Ackermann 在瑪麗華盛頓學院試講了第2版。第3版是由位於 San Luis Obispo 的加州理工大學的 Theresa Migler 和我的同事 Terry Letsche 在課堂上試講的。David Bantz 對草稿提供了反饋意見。感謝所有的寶貴意見和建議。

我也要感謝 Franklin, Beedle and Associates 的朋友,特別是 Tom Sumner、Brenda Jones 和 Jaron Ayres,他們把我喜愛的專案變成一本真正的教科書。本版獻給 Jim Leisy 作為紀念,他是 Franklin,Beedle and Associates 的創始人,在第3版正要付梓時意外過世。Jim 是個了不起的人,興趣非常廣泛。正是他的遠見、指導、不懈的熱情和不斷的激勵,最終讓我成為一名教科書作者,讓這本書成功。

特別感謝所有我教過的學生,他們在教學方面給我很多教益。還要感謝沃特伯格學院批准我休假,支援我寫書。最後但最重要的是,我要感謝我的妻子 Elizabeth Bingham,她作為編輯、顧問和鼓舞士氣者,在我寫作期間容忍我。

第1章 計算機和程式
第2章 編寫簡單程式
第3章 數字計算
第4章 物件和圖形(上)
第4章 物件和圖形(下)
第5章 序列:字串、列表和檔案(上)
第5章 序列:字串、列表和檔案(下)
第6章 定義函式(上)
第6章 定義函式(下)
第7章 判斷結構
第8章 迴圈結構和布林值(上)
第8章 迴圈結構和布林值(下)
第9章 模擬與設計
第10章 定義類(上)
第10章 定義類(下)
第11章 資料集合(上)
第11章 資料集合(下)
第12章 面向物件設計(上)
第12章 面向物件設計(下)
第13章 演算法設計與遞迴(上)
第13章 演算法設計與遞迴(下)
附錄 A Python 快速參考
附錄 B 術語表

閱讀全文: http://gitbook.cn/gitchat/geekbook/5bfbbf2d7d496f13396961e2