前言
首先感谢读者愿意花时间阅读本书。选择本书说明你了解编程,或者至少对编程有兴趣。本书定义为一本计算机科学的编程书其实并不确切,因为书中并不会介绍晦涩难懂的编程语言语法,也不会介绍实际应用中的项目开发方法,本书只是提供了一系列的问题,然后介绍如何使用编程这种工具来解决它。但是将本书定义为数学学科的图书也不正确,虽然书中很多问题与数学有关,有时甚至需要我们了解底层的数学原理才能解决,但是同样,对于本书来说,数学也是解决问题的工具。那么,我们姑且称此书为“问题之书”吧。
阅读任何一本书的过程实际上都是一种学习的过程,你现在最关心的应该是如何学习本书,以及本书能够带给你什么。首先,阅读本书需要有一定的编程基础,至少了解和学习过一门编程语言,当然如果掌握了Python编程语言就最好不过了。在本书中,每一节的开头都会提出一个问题,当你看到问题时,可以先思考如何解决,尝试自己动手编程来解决此问题,无论你是否能够成功解答,思考的过程都能使你受益,自主尝试解答后,再继续阅读书中提供的解题思路与方法,最终与自己的思考结果相结合,从而不断进步。
在章节安排上,本书共13章。除了第1章与第13章之外,每一章都是一个独立的专题,并没有严格的先后顺序。因此,如果你在阅读本书时对某一章节的内容不太感兴趣,完全可以跳过它。但是笔者依然建议按照书中章节的安排顺序进行阅读,从易到难的学习节奏对大多数读者来说是更科学的。本书中的示例题目收集自互联网上流行的编程训练集,笔者对其中的题目大多都进行了修正和改编,以期更适合入门级的读者学习。
第1章是本书的入门章节,本书中提供的问题解答示例都是以Python编程语言为基础进行编程解答的,因此读者需要对Python编程语言本身有简单的了解。在本章中,将首先为读者介绍Python语言在编程领域的用武之地,本书之所以选择Python作为主语言,正是由于其拥有使用简单、应用广泛的特点。你完全不需要担心没有基础能否顺利地学习,本章会对Python中核心的基础语法进行介绍,只要掌握了这些技能,阅读本书的后续章节就不会有任何障碍。本章也将带领读者一起安装完成Python编程所需的相关开发环境。
第2章以数学为切入点,介绍编程在数学领域的应用方式,也将向读者介绍一些基础的计算机原理知识,帮助读者理解程序的工作原理。
第3、4章提供了一系列与数字相关的编程题。第3章主要介绍特殊的数字,比如阿姆斯特朗数、回文数、完全平方数等。第4章主要介绍与数字计算相关的编程题,例如二进制运算、分数运算等。通过这些题目的练习,能够使读者更加深刻地理解二进制,运用二进制。
第5章介绍的编程题都与几何图形相关,与图形相关的题目能够锻炼大脑的抽象思维能力。本章提供的题目重点关注生活中几何图形的点、线、面的关系,其中可能会使用到一些简单的几何定理,但更多需要读者对问题进行思考与分析,设计出合适的算法来编写程序解决问题。
第6、7章的题目都与字符相关,字符与字符串的操作是实际编程工作中非常重要的技能,因此本章提供的题目相对更加面向应用,在计算机语义识别、数据整理与报表等诸多领域,字符串操作技术都有广泛应用。
第8~10章是计算机数据结构相关的内容,通过对数组、链表、堆栈和树相关结构的题目进行练习,可以帮助读者更加深入地理解数据结构的原理以及数据结构设计的巧妙之处。这几章的题目难度也略高。
第11、12章以游戏的方式来介绍编程题目,在数学上,我们也称此类题目为应用题。其中提供的大部分题目都来自生活中的场景,如何将生活场景问题进行抽象,之后通过编程的方式解决,是本章的核心内容。
第13章是本书的附加章节,当读者完成本书前12章的学习后,相信对编程也会有新的理解。此时对于读者来说,编程不应该是结束,而是新的开始。本章将向读者介绍更多Python编程领域,例如网站开发、游戏开发等,读者可以选择自己感兴趣的内容继续深入学习。
最后,对于本书的出版,感谢支持笔者的家人和朋友,感谢清华大学出版社王金柱编辑的勤劳付出。在王编辑的指导下,笔者才得以完成本书的章节规划、内容修正等工作。重中之重是感谢读者的耐心,笔者由衷地希望本书可以带给读者预期的收获。无论是学习还是工作,都希望读者在阅读本书后能够更上一层楼。同时,由于编者水平所限,书中难免出现疏漏和欠妥之处,欢迎读者批评指正。