索引 / 001 ZH-TW
Python Crash Course: A Hands-On, Project-Based Introduction to Programming(Python 程式設計:從入門到實務專案) cover

電腦科學

電腦科學

Python Crash Course: A Hands-On, Project-Based Introduction to Programming(Python 程式設計:從入門到實務專案)

Eric Matthes

英文原名: Python Crash Course: A Hands-On, Project-Based Introduction to Programming

由前中學教師為完全沒有經驗的讀者所寫的 Python 程式設計實務入門。前半部以簡短練習教授語言的核心功能;後半部透過三個較大的專案加以應用:一款簡單的街機遊戲、資料視覺化,以及用 Django 打造的網頁應用程式。

需要的基礎: 會基本的電腦操作即可,不需要任何程式設計經驗。

難度等級
入門
學術層次
大學部
pythonprogramming fundamentalsprojectsbeginner programming教科書

01 / 導讀

導讀

引用

Matthes, E. (2022). Python Crash Course: A Hands-On, Project-Based Introduction to Programming (3rd ed.). No Starch Press.

章節概要

第三版分兩部共20章,另有後記和5個附錄,篇幅500多頁。第一部(第1–11章)教授語言本身;第二部(第12–20章)在三個專題中運用所學:一個街機遊戲、一組資料視覺化和一個Web應用程式。每個主題之後都有依章編號的簡短「Try It Yourself」(動手試試看)練習。根據作者對這一版的說明,本書使用Python 3.11,推薦VS Code作為編輯器,以pathlib模組處理檔案,並改用pytest而非標準函式庫的unittest來講測試;各專題使用其所依賴函式庫的最新版本,包括Django 4.1和Bootstrap 5。

第1章:Getting Started(起步)

在Windows、macOS或Linux上安裝Python和VS Code編輯器,執行第一個「hello world」程式,排解安裝問題,以及從終端機執行程式。

第2章:Variables and Simple Data Types(變數與簡單資料型別)

程式執行時發生了什麼事、變數(被解釋為值的標籤)、字串與字串方法(包括新增的移除前綴方法)、整數與浮點數、常數、註解,以及「Python之禪」。每個主題都穿插說明如何避免常見錯誤,本章也展示了Python改良後的錯誤訊息。

第3–4章:Introducing Lists(串列簡介);Working with Lists(操作串列)

建立、索引、修改和排序串列;接著談for迴圈、避免縮排錯誤、以range()產生數值串列與串列推導式、切片與複製、元組,並透過PEP 8初步接觸程式碼風格。

第5章:if Statements(if陳述式)

條件測試,if、if-else和if-elif-else結構,將條件判斷用於串列,以及if陳述式的風格。

第6章:Dictionaries(字典)

使用鍵值對、走訪字典,以及串列與字典的相互巢狀。

第7章:User Input and while Loops(使用者輸入與while迴圈)

input()函式、使用旗標的while迴圈、break與continue,以及用while迴圈處理串列和字典。

第8章:Functions(函式)

定義函式、帶預設值的位置引數與關鍵字引數、回傳值、傳遞串列、任意數量的引數、把函式存放在模組中,以及各種匯入方式。

第9章:Classes(類別)

建立類別與實例、修改屬性、繼承與覆寫方法、將實例作為屬性、從模組匯入類別、標準函式庫,以及類別的撰寫風格。

第10章:Files and Exceptions(檔案與例外)

以pathlib讀寫檔案、以try-except-else處理例外、分析多個檔案中的文字、以JSON儲存資料,以及重構。

第11章:Testing Your Code(測試程式碼)

以pip安裝pytest、為函式撰寫會通過與不會通過的測試、各種斷言、測試類別,以及使用fixture。

第12–14章:A Ship That Fires Bullets(會發射子彈的太空船);Aliens!(外星人!);Scoring(計分)

受《太空侵略者》啟發、以Pygame製作的「外星人入侵」專題。讀者規劃遊戲,建立視窗與會回應按鍵的太空船,發射子彈,產生並移動外星艦隊,偵測碰撞,結束遊戲,接著加入Play按鈕、逐漸加快的速度、計分板、最高分、等級與剩餘太空船數。整個專題中反覆練習把程式碼重構為輔助方法。

第15–17章:Generating Data(產生資料);Downloading Data(下載資料);Working with APIs(使用API)

資料視覺化專題。第15章以Matplotlib繪圖(折線圖、散布圖、隨機漫步),並以Plotly模擬擲骰子。第16章讀取CSV檔中的天氣資料與GeoJSON格式的地震資料,繪製世界地圖。第17章以Requests函式庫從GitHub API取得資料,視覺化最受歡迎的儲存庫,並介紹Hacker News的API。

第18–20章:Getting Started with Django(Django入門);User Accounts(使用者帳號);Styling and Deploying an App(美化並部署應用程式)

Web應用程式專題「學習日誌」(Learning Log)。第18章建立虛擬環境與Django專案,定義模型,使用管理網站,並以模板建構頁面。第19章加入輸入資料用的表單、使用者註冊與登入,並限制每位使用者只能存取自己的資料。第20章以Bootstrap美化網站,並透過Git部署到Platform.sh託管服務。

後記與附錄A–E

附錄涵蓋安裝與疑難排解(附Python關鍵字與內建函式列表)、文字編輯器與IDE、尋求協助、使用Git進行版本控制,以及部署的疑難排解。

核心概念

第一部:基礎(第1–11章)

  • 變數與資料型別:指向字串、整數、浮點數等值的名稱。
  • 串列、元組與字典:Python的核心集合型別,以及迴圈、切片與推導式。
  • 控制流程:條件測試、if-elif-else結構與while迴圈。
  • 函式與模組:帶有彈性參數的可重複使用程式碼區塊,並整理成可匯入的檔案。
  • 類別與繼承:把真實世界的事物建模為具有屬性和方法的物件。
  • 檔案、例外與JSON:讀寫資料、妥善處理錯誤,以及在多次執行之間保存資料。
  • 自動化測試:以pytest的斷言與fixture檢驗程式碼。

第二部:專題(第12–20章)

  • 遊戲迴圈與精靈:Pygame遊戲的事件驅動結構。
  • 資料視覺化:以Matplotlib和Plotly把產生的、下載的和來自API的資料繪製成圖表與地圖。
  • Web API:向線上服務請求結構化資料。
  • 模型、視圖與模板:Django Web應用程式的結構。
  • 使用者驗證與部署:帳號、存取限制,以及把應用程式發布上線。

評析

優點

  • 一本書兼顧基礎與專題。 《InfoWorld》的塞達爾·耶古拉爾普指出,許多書不是只講Python基礎、就是只講專題,而本書兩者兼備。三個專題使用真實的函式庫(Pygame、Matplotlib、Plotly、Requests、Django),最後完成一個遊戲、互動式圖表和一個已部署的網站。
  • 持續不斷的練習。 詳細目錄列出186道編號練習,每個主要主題之後都有幾道,其中許多建立在先前的練習上(賓客名單練習貫穿第3章,橫向射擊遊戲貫穿第12–14章)。
  • 及早養成專業習慣。 PEP 8風格指南、重構、pytest測試、虛擬環境和Git,都出現在一本給初學者的書中。錯誤處理隨著每項功能一起教授,而不是留到最後。
  • 內容新、支援完善。 第三版更新了語言版本、編輯器和各種函式庫,作者網站提供原始碼、速查表、練習解答,以及每一刷的更新說明。

局限

  • 是程式設計實務,而非資訊科學。 本書教的是如何寫出能執行的Python程式,不涉及演算法、Python內建型別以外的資料結構、複雜度或計算理論。
  • 部署說明容易過時。 第20章把專題部署到Platform.sh。作者網站現在說明,該公司已更名並改變做法,不再推薦學習者使用,並提供針對另一家託管服務的替代步驟。讀者應以線上版本為準。
  • 專題重深度而非廣度。 每個專題都深入介紹一個函式庫;想更廣泛了解Python生態系或學習更進階語言特性的學生,需要延伸閱讀。

在課程中的定位

在程式設計入門課程中,本書是最注重動手、以專題為主導的第一本書。艾倫·唐尼的 Think Python 同樣使用Python,但把程式設計當作像資訊科學家一樣思考的方式來教,更重視概念和問題解決,適合既想知道怎麼寫程式、也想了解程式為何能運作的讀者。費萊森等人的 How to Design Programs 使用DrRacket中的教學語言而非主流語言,教授有系統的設計方法。約翰·古塔格的 Introduction to Computation and Programming Using Python 更深入探討計算思維、建模與資料分析,是讀完第一部之後很自然的下一步。

艾伯森和蘇斯曼的 Structure and Interpretation of Computer Programs 是探討抽象與直譯器的經典,柯尼漢和里奇的 The C Programming Language 則教授包括指標與記憶體在內的C語言;這兩本要求較高,適合已有程式設計經驗的學生。常見的路線是先用馬瑟斯的書學會語言,再讀唐尼或古塔格的書掌握概念,之後在後續課程中轉向C或SICP。

如何使用本書

本書適合任何年齡、任何科系的零基礎初學者,適合課程教材偏重理論、想多練習動手做東西的學生,也適合想快速上手Python的其他語言程式設計師。不要求任何程式設計經驗。

  • 核心: 依序學習第一部。親手輸入範例程式碼,並在繼續之前完成每一道「Try It Yourself」練習。第8–10章最值得花時間;談測試的第11章即使課程不要求也值得一做。
  • 專題: 依興趣選擇。每個專題依賴的是第一部,而非其他專題。遊戲專題教的是類別與程式結構,視覺化各章適合理科或資料密集型科系的學生,Web專題篇幅最長、難度最高。
  • 附錄: 把附錄A(安裝與疑難排解)和附錄C(尋求協助)放在手邊,並用附錄D把自己的專題納入Git版本控制。

下載原始碼,並在作者網站上查看與自己手上那一刷對應的更新說明,尤其是在動手進行第20章的部署之前。讀完全書後,獨立把其中一個專題大幅擴充:設計並除錯一個沒有指引的程式,正是把書中練習轉化為程式設計能力的關鍵。