本書面向Python初學(xué)者,采用模塊方式呈現(xiàn)知識要點,而非百科全書式的語法大全。書中介紹了數(shù)值、字符串、列表、字典、集合、控制結(jié)構(gòu)、函數(shù)、遞歸、排序、面向?qū)ο缶幊獭⑽募僮鞯然A(chǔ)知識,通過大量案例來演示這些技術(shù),重視計算思維的培養(yǎng),由淺入深地將解決問題的完整方案一步步呈現(xiàn)在讀者面前。本版新增了面向數(shù)據(jù)科學(xué)的程序示例和練習(xí),擴展了有關(guān)字符串和列表的內(nèi)容,并引入了海龜圖形和游戲編程等新的數(shù)據(jù)包。本書既可作為高等院校計算機專業(yè)第 一門程序設(shè)計課的教材,也可供Python愛好者自學(xué)參考。
本書是基于Python語言的計算機程序設(shè)計導(dǎo)論教科書,重點是介紹Python語言的基礎(chǔ)知識,目的是提供有效的Python語言學(xué)習(xí)方法。本書面向具有不同興趣和能力的廣大學(xué)生群體,適用于計算機科學(xué)、電子工程和其他學(xué)科首次接觸程序設(shè)計的學(xué)生的初級課程。本書不需要讀者有任何程序設(shè)計經(jīng)驗,只需要有少量的高中數(shù)學(xué)知識即可。出于教學(xué)上的原因,本書采用Python 3,因為Python 3比Python 2更為規(guī)范。
本書的主要特點如下。
夯實基礎(chǔ)。本書采用了傳統(tǒng)的方法,首先強調(diào)控制結(jié)構(gòu)、函數(shù)、過程分解以及內(nèi)置數(shù)據(jù)結(jié)構(gòu)的重要性。在前幾章中,只在適當(dāng)?shù)臅r候才使用對象。第9章才開始學(xué)習(xí)設(shè)計和實現(xiàn)自定義的類。
使用操作指南和實訓(xùn)案例引導(dǎo)學(xué)生走向成功。初級程序員經(jīng)常會有這樣的疑問:“我該如何開始?現(xiàn)在應(yīng)該怎么辦?”當(dāng)然,像程序設(shè)計這樣復(fù)雜的活動不能簡化為菜譜式的指令。然而,循序漸進的指導(dǎo)非常有助于學(xué)生樹立學(xué)習(xí)的信心,也有助于為解決手頭的任務(wù)提供思路。本書每章中的“問題求解”部分強調(diào)設(shè)計和規(guī)劃的重要性,“操作指南”環(huán)節(jié)幫助學(xué)生完成常見的程序設(shè)計任務(wù),大量的“實訓(xùn)案例”則演示如何應(yīng)用相關(guān)概念以解決有趣的問題。
清晰明確地制訂問題的解決策略。實用的、循序漸進的技術(shù)演示有助于學(xué)生設(shè)計和評估程序設(shè)計問題的解決方案。這些策略將在最恰當(dāng)?shù)臅r候引入,以為學(xué)生掃清成功道路上的障礙。本書涉及的問題解決策略包括:
算法設(shè)計(借助偽代碼加以展示)
編程前首先進行手工演算(手工計算示例)
流程圖
測試用例
手工跟蹤程序執(zhí)行過程
故事板
首先求解簡單的問題
可復(fù)用的函數(shù)
逐步求精
自適應(yīng)算法
通過操作實體對象發(fā)現(xiàn)算法
跟蹤對象
對象數(shù)據(jù)的模式
遞歸思維
估測算法的運行時間
熟能生巧。很顯然,學(xué)習(xí)程序設(shè)計的學(xué)生需要能夠?qū)崿F(xiàn)復(fù)雜的程序,但他們首先需要樹立成功的信心。本書每章都包含許多練習(xí)題,要求學(xué)生逐步執(zhí)行復(fù)雜度遞增的任務(wù):跟蹤程序代碼并了解其運行效果,根據(jù)準(zhǔn)備好的材料生成程序片段,最終實現(xiàn)簡單的程序。在每章的結(jié)尾還提供了額外的復(fù)習(xí)題和編程題。
重點突出,技術(shù)準(zhǔn)確。百科全書式的知識覆蓋對于初學(xué)者的幫助不大,同樣,把材料簡化成一個簡潔的要點列表對初學(xué)者的幫助也微乎其微。在本書中,知識要點是以易于理解的模塊來呈現(xiàn)的,當(dāng)讀者準(zhǔn)備好接受進一步的信息時,則通過單獨的注釋引導(dǎo)他們深入最佳實踐或者語言特性中。
第3版的新特色
對數(shù)據(jù)科學(xué)的關(guān)注。數(shù)據(jù)科學(xué)的方法變得如此重要,以至于許多學(xué)科的學(xué)生(不僅僅是計算機科學(xué))都迫不及待地希望學(xué)習(xí)程序設(shè)計的基礎(chǔ)知識。Python由于其邏輯結(jié)構(gòu)、可供探索的交互式編程庫以及大量用于數(shù)據(jù)操作的庫,被定位為初出茅廬的數(shù)據(jù)科學(xué)家的唯一“入門”語言。
本書采用了一種行之有效的教學(xué)方法,而不僅僅局限于計算機科學(xué)專業(yè)的程序設(shè)計教學(xué)。在第3版中,我們提供了更多聚焦于數(shù)據(jù)科學(xué)各個方面的程序示例和練習(xí)題。
適量的Python語言知識。在編寫第3版時,我們的目標(biāo)是教授學(xué)生良好的程序設(shè)計方法和計算機科學(xué)知識。Python語言本身的使用并不是目的,我們將其作為達(dá)成目標(biāo)的教學(xué)手段。
根據(jù)本書以前版本讀者的建議,在第3版中,我們擴展了有關(guān)字符串和列表的簡便操作方法。
更多的工具箱。在第2版中,廣受歡迎的一項擴展內(nèi)容是引入了供讀者參考的“工具箱”模塊。在“工具箱”中,我們介紹了Python庫作為一種奇妙的“生態(tài)系統(tǒng)”,提供了許多實用的數(shù)據(jù)包。這些擴展包使得學(xué)生可以執(zhí)行一些有用的工作任務(wù),例如統(tǒng)計計算、繪制圖表、發(fā)送電子郵件、處理電子表格和分析網(wǎng)頁等。Python庫被置于計算機科學(xué)原理的背景之下,學(xué)生將學(xué)習(xí)如何將這些原理應(yīng)用于解決現(xiàn)實世界中的實際問題。每個工具箱都涉及許多新的復(fù)習(xí)題和編程題。
第3版新引入的工具箱包括海龜圖形工具箱和游戲編程工具箱。
章節(jié)結(jié)構(gòu)
圖1顯示了本書各章節(jié)之間的相互關(guān)系,以及各個主題的組織方式。本書的核心內(nèi)容是第1~8章。第9章和第10章涵蓋面向?qū)ο蟮某绦蛟O(shè)計,第11章和第12章介紹算法設(shè)計和分析(學(xué)生在其他課程中將深入學(xué)習(xí)這些知識)。
圖形和圖像處理。通過編寫程序來創(chuàng)建圖形或者處理圖像,可以為學(xué)生提供復(fù)雜主題的有效可視化。第2章介紹了開源庫EzGraphics,以及如何使用EzGraphics繪制基本圖形。這個庫比Python的標(biāo)準(zhǔn)庫(Tkinter)更易于使用,同時支持簡單的圖像處理。第5章包含一個可選的海龜圖形工具箱。整本書中提供了諸多圖形處理的實訓(xùn)案例以及練習(xí)題(復(fù)習(xí)題和編程題),所有這些內(nèi)容都可以選擇性地用于教學(xué)。
練習(xí)題。各章結(jié)尾包含大量的復(fù)習(xí)題和編程題,涉及來自圖形學(xué)、數(shù)據(jù)科學(xué)和商業(yè)等應(yīng)用領(lǐng)域中的實際問題。這些練習(xí)題可供選用,旨在激發(fā)學(xué)生的學(xué)習(xí)興趣,同時展現(xiàn)程序設(shè)計在實際應(yīng)用領(lǐng)域中的價值。
網(wǎng)絡(luò)資源。本書提供了一套完整的在線資源。讀者可以通過本書官網(wǎng)www.wiley.com/go/pfe3訪問本書在線資源。在線資源網(wǎng)站包括以下內(nèi)容:
本書所有的示例程序、工具箱和實訓(xùn)案例的源代碼。
授課演示幻燈片(僅供教師使用)。
所有章節(jié)結(jié)尾的復(fù)習(xí)題和編程題的答案(僅供教師使用)。
一個側(cè)重于技能而不僅僅是術(shù)語的測試題庫(僅供教師使用)。測試題庫包括數(shù)量眾多的多項選擇題,可以使用文字處理器進行編輯,也可以導(dǎo)入課程管理系統(tǒng)中使用。
CodeCheck是一項創(chuàng)新的在線服務(wù),允許教師自行設(shè)計自動評分的編程練習(xí)題。
圖1 本書各章節(jié)之間的相互關(guān)系
致謝
非常感謝John Wiley & Sons公司的Joanna Dingle、Crystal Franks、Graig Donini和Michael MacDougald以及負(fù)責(zé)出版服務(wù)的Vickie Piercey對本項目的幫助。特別感謝Cindy Johnson的辛勤工作,感謝她的正確判斷力和對細(xì)節(jié)驚人的關(guān)注力。
同時感謝卡爾加里大學(xué)的Ben Stephenson在準(zhǔn)備和評審補充材料方面所做的出色工作。
非常感謝為本書第3版的出版發(fā)行而辛勤工作的每個人,他們審閱了手稿,提出了寶貴的建議,并提醒我們關(guān)注本書的錯誤和遺漏。他們是:
William Bulko, University of Texas, Austin
John Conery, University of Oregon
Lee D. Cornell, Minnesota State University, Mankato
Mike Domaratzki, University of Manitoba
Rich Enbody, Michigan State University
Jackie Horton, University of Vermont
Winona Istre, University of Louisiana, Lafayette
Swami Iyer, University of Massachusetts, Boston
ToniAnn Marini, North Carolina State University
Melinda McDaniel, Georgia Institute of Technology
Shyamal Mitra, University of Texas, Austin
Ben Stephenson, University of Calgary
Mehmet Ulema, Manhattan College
David Wilkins, University of Oregon
每一個新版本都建立在以前版本的評論者、貢獻(xiàn)者和讀者的建議之上。我們感謝以下諸位所做的寶貴貢獻(xiàn):
Claude Anderson, Rose Hulman Institute of Technology
Jim Carrier, Guilford Technical Community College
Gokcen Cilingir, Washington State University
Lee Cornell, Minnesota State University, Mankato
Akshaye Dhawan, Ursinus College
Dirk Grunwald, University of Colorado Boulder
Andrew Harrington, Loyola University Chicago
Byron Hoy, Stockton University
Debbie Keen, University of Kentucky
Nicholas A. Kraft, University of Alabama
Aaron Langille, Laurentian University
Maria Laurent-Rice, Orange Coast College
John McManus, Randolph-Macon College
Shyamal Mitra, University of Texas Austin
Chandan R. Rupakheti, Rose-Hulman Institute of Technology
John Schneider, Washington State University
Amit Singhal, University of Rochester
Ben Stephenson, University of Calgary
Amanda Stouder, Rose-Hulman Institute of Technology
Dave Sullivan, Boston University
Jay Summet, Georgia Institute of Technology
James Tam, University of Calgary
Krishnaprasad Thirunarayan, Wright State University
Leon Tietz, Minnesota State University, Mankato
Peter Tucker, Whitworth University
Frances VanScoy, West Virginia University
Dean Zeller, University of Northern Colorado
凱·霍斯特曼(Cay Horstmann) 圣何塞州立大學(xué)計算機科學(xué)系教授,Java的倡導(dǎo)者,經(jīng)常在開發(fā)人員會議上發(fā)表演講。他是《Java核心技術(shù)》的作者,同時也關(guān)注Python、Scala、C++等語言,為專業(yè)程序員和計算機科學(xué)專業(yè)學(xué)生編寫過數(shù)十本圖書。
蘭斯·尼塞斯(Rance Necaise) 蘭道爾夫-麥肯學(xué)院計算機科學(xué)系副教授,撰寫了《Data Structures and Algorithms Using Python》和《Python for Java Programmers》等技術(shù)書籍。