索引 / 001 ZH-CN
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 构建的 Web 应用。

需要的基础: 只需会基本的电脑操作,不要求任何编程经验。

难度等级
入门
学术层次
本科
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的断言和夹具检验代码。

第二部分:项目(第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章的部署之前。读完全书后,独立地对其中一个项目做较大的扩展:设计并调试一个没有指引的程序,正是把书中练习转化为编程能力的关键。