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