本书假设你是一位先前没有任何程序设计经验的程序员新手。那么,什么是程序设计呢?程序设计是指使用程序设计语言编写程序以解决问题。不论你使用的是哪种程序设计语言,解决问题和程序设计的根本都是一致的。你可以使用任何一种像Python、Java、C++或C#这样的高级程序设计语言来学习程序设计。一旦知道如何使用其中一门语言编写程序,那么如何使用其他语言编写程序就很容易,因为编写程序的基本技能都是一样的。
那么,使用Python学习程序设计的优势在哪里呢?Python易于学习,且编程有趣。Python代码简单、短小,易读、直观,而且功能强大,这样对初学者而言,用它来介绍计算和解决问题是非常有效的。
鼓励初学者通过创建图形学习程序设计。使用Python学习程序设计的一个很大原因在于可以从一开始就使用图形来学习程序设计。我们在第1~6章使用Python内嵌的Turtle图形模块,它是一个介绍程序设计基本概念和技术的很好的教学工具。我们在第9章介绍Python内嵌的Tkinter,它是开发复杂图形用户界面以及学习面向对象程序设计的一个重要工具。
Turtle和Tkinter都相当简单且易于使用。更重要的是,它们都是教授程序设计和面向对象程序设计基础的非常有价值的教学工具。
为了方便教师更灵活地使用本书,我们在第1~6章的末尾会讲到Turtle,所以,可以将它们作为选讲内容跳过去。
本书以问题驱动的方式讲授如何解决问题,这种方式的重点放在问题的解决而不是语法上。我们使用一些涉及范围很广的有趣例子来激发学生学习程序设计的兴趣。鉴于本书的主线是解决问题,这里会介绍解决问题中用到的Python语法和库。为了支持问题驱动方式的程序设计教学,本书提供了大量难易程度各异的问题来激发学生的兴趣。为适用于各个专业的学生,这些问题涉及很多应用领域,例如数学、科学、商业、金融管理、游戏、动画和多媒体等。
Python中的所有数据都是对象。我们从第3章开始介绍和使用对象,但是如何定义类将从第7章开始。本书首先将重点放在基础上:在编写自定制类之前介绍像选择、循环和函数这样的基本程序设计概念和技术。
教授程序设计的最佳方式是通过实例,而学习程序设计的唯一方法就是通过实践。本书用实例解释基本概念,同时提供了大量不同难度的习题供学生练习。我们的目标是使用大量有趣的例子和习题来教授学生如何解决问题以及如何进行程序设计。
教学特色
本书使用了下面的模块:
学习目标 列出学生应该学会的内容,这样在学完这章之后,学生能够判断自己是否达到这个目标。
引言 提出一个代表性问题,以便学生对该章内容有一个概括了解。
关键点 强调每节中的重要概念。
检查点 提供复习题帮助学生复习相关内容并评估掌握的程度。
问题 通过精心挑选,以一种容易掌握的形式教授问题求解和程序设计的概念。本书使用许多短小的、简单的以及令人兴奋的例子来演示重要的想法。
关键术语 提供对本章重要术语的快速参考。
本章总结 回顾学生应该理解和记住的重要主题,帮助他们加强对该章所学关键概念的理解。
测试题 测试题是在线的,用于学生自我测试对程序设计概念和技术的掌握程度。
编程题 为学生提供应用新技巧的机会。题目的难度等级分为容易(无星号)、适度(*)、困难(**)或具有挑战性(***)。学习程序设计的秘诀就在于练习,练习,再练习。为了达到这个目标,本书提供了大量的练习题。
注意、提示和警告 穿插在整本书中,提供了有价值的建议以及程序开发要点。
注意:提供关于主题的附加信息并强化重要概念。
提示:教授好的程序设计风格和实践。
警告:帮助学生避免程序设计错误。
灵活的章节顺序
图形是学习程序设计的一个非常有价值的教学工具。本书在第1~6章使用Turtle图形,而在书中其他部分使用Tkinter。但是,教师可以根据需要跳过关于图形的章节或者以后再讨论。下图给出章节之间的相互关系。
注意:第16~23章是配套网站提供的附加章节。
第10章可以在第6章之后讲解。第14章可以在第10章之后讲解。
本书的组织结构
全书共分三部分,循序渐进地介绍用Python语言进行程序设计的基本知识。前面的章节提供理解程序设计概念的基础知识,并通过简单实例和习题对学生进行指导,随后的章节逐步详细介绍Python程序设计,一直到开发复杂的应用程序。
第一部分:程序设计基础(第1~6章)
第一部分是起点,为你学习程序设计做准备。你可以初步了解Python(第1章),并学习基本程序设计技术,包括数据类型、变量、常量、赋值、表达式、运算符、对象以及简单的函数和字符串操作(第2~3章),选择语句(第4章),循环(第5章),函数(第6章)。
第二部分:面向对象程序设计(第7~13章)
这一部分介绍面向对象程序设计。Python是一种面向对象程序设计语言,它具有抽象、封装、继承和多态等特性,适合编写灵活、模块化和可重用的软件。你将学习面向对象程序设计(第7~8章),使用Tkinter进行GUI程序设计(第9章),列表(第10章),多维列表(第11章),继承、多态和类设计(第12章),以及文件和异常处理(第13章)。
第三部分:数据结构和算法(第14~15章和附加章节第16~23章)
本部分介绍典型数据结构课程的主要主题。第14章介绍Python内嵌的数据结构:元组、集合和字典。第15章介绍用递归来编写函数以解决内在递归问题。第16~23章是配套网站的附加章节。第16章介绍算法效率以及开发高效算法的常用技术。第17章讨论经典的排序算法。第18章介绍如何实现链表、队列以及优先队列。第19章介绍二分查找树。第20章介绍AVL树。第21章介绍哈希技术。第22和23章涵盖图算法及其应用。
学生资源网站
复习题的答案。
偶数编号编程题的答案。
本书例子的源代码。
互动的自测题(每章按节组织)。
关于Python IDE、高级主题等补充材料。
资源链接。
勘误表。
补充材料
本书涵盖了必要的主题,而补充材料则介绍了读者可能感兴趣的主题。本书配套网站中给出下列补充材料:
教师资源网站
带交互式按钮的微软PowerPoint幻灯片,可以查看全彩、语法项高亮显示的源代码,并且可以在幻灯片状态运行程序。
所有复习题和练习题的答案。
基于Web的测试题产生器。(教师可以从一个超过800道题的数据库中选择章节创建测试题。)
模拟考试卷。通常,每份模拟考试卷都有四部分:
多选题或简答题
纠正编程错误
跟踪程序
编写程序
项目。通常,每个项目都会给出描述,要求学生分析、设计和实现该项目。
致谢
感谢阿姆斯特朗亚特兰大州立大学给我机会讲授Python课程,并支持我将授课内容编写成为教材。教学是我写作这本书的源动力。还要感谢使用本书的教师和学生,他们提出了许多宝贵的意见、建议、错误报告和鼓励。
感谢优秀的评阅人,他们是:
Claude Anderson——罗斯霍曼理工学院
Lee Cornell——明尼苏达州立大学曼凯托分校
John Magee——波士顿大学
Shyamal Mitra——得克萨斯大学奥斯汀分校
Yenumula Reddy——关柏林州立大学
David Sullivan——波士顿大学
Hong Wang——托莱多大学
非常荣幸能和Pearson一起工作。感谢组织、生产和推动这个项目的Tracy Dunkelberger、Marcia Horton、Michael Hirsch、Matt Goldstein、Carole Snyder、Tim Huddleston、Yez Alayan、Jeff Holcomb、Gillian Hall、Rebecca Greenberg以及他们的同事。
一如既往,特别感谢来自我的妻子Samantha的爱、支持和鼓励。