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

猜你喜欢

转载自blog.csdn.net/valada/article/details/84669408