图书前言

前言

“人生苦短,我用Python。”用Python语言编写程序,代码量小、编程效率高。在争分夺秒的程序设计竞赛中,Python的优势显而易见。目前,国际大学生程序设计竞赛(International Collegiate Programming Contest,ICPC)、中国大学生程序设计竞赛(China Collegiate Programming Contest,CCPC)及团体程序设计天梯赛(Group Programming Ladder Tournament,GPLT)等是国内大学生主要参加的大规模赛事。信息学竞赛则是中学生主要参加的程序设计类竞赛。这些竞赛已支持或将逐渐支持提交Python语言编写的代码。

对于零基础学习程序设计课程且希望在程序设计竞赛方面具有较好基础的学生而言,程序设计竞赛与课程教学相结合的教材比较难寻。《大学生程序设计竞赛入门——C/C++程序设计(微课视频版)》是一本赛课结合的教材,但对于非计算机类相关专业的学生而言较难。因此,我们用Python语言改写了上述教材,以作为程序设计竞赛入门通识课程的教材。

本书重点讨论程序设计的基础知识、程序控制结构、函数、列表与字典、类与对象和链表等方面的内容,希望能为零基础学习Python程序设计的读者打下较好的基础。另外,本书还引入程序设计竞赛的基础知识,主要包括用空间换时间的思想与方法、递推与动态规划、高精度处理、贪心法和回溯法入门、搜索入门等,希望对拟参加程序设计竞赛的读者有所帮助。

本书立足于在线测评系统(Online Judge,OJ),以OJ上的问题为载体和核心,把对问题的分析和求解作为主线。本书以问题为导向,适合学生针对OJ问题进行探究式学习,注重培养学生的计算思维及编程求解具体问题的能力。本书的例题与习题较多,教师可以酌情选讲,学生也可以酌情选学。

本书中的编程例题、习题主要来自OJ。书中大部分例题和编程习题来自绍兴文理学院OJ(简称HLOJ),这离不开绍兴文理学院程序设计类课程组教师历年来的辛勤工作,在此表示由衷的感谢!书中部分编程例题和习题参考和改编自浙江大学OJ(简称ZOJ)、杭州电子科技大学OJ(简称HDOJ)、浙江工业大学OJ(简称ZJUTOJ)等OJ上的题目,在此对出题者及相关的老师们、同学们表示由衷的感谢!为便于读者在OJ练习,每章的OJ题解及OJ编程题标注了至少一个出处(标题、描述等方面可能有所改编)。

为方便读者练习,书中大部分OJ编程题已添加到PTA(Programming Teaching Assistant)程序设计类实验辅助教学平台,这里对PTA网站的开发者、管理者及相关教师表示真挚感谢!若是读者个人希望在PTA网站练习本书题目,可发邮件告知邮箱、账号等用户信息,以便我们把读者添加到题目集的用户组中。

书中有些题目由于时间跨度较长等原因难以找到原始出处及其作者,若读者发现本书例题、习题原始出处,也请与编者联系,便于编者在HLOJ及PAT网站注明来源。再次对本书所引用资源的相关人员表示衷心感谢!

在编写本书的过程中,编者参考了一些Python相关的程序设计及数据结构方面的著作,在这里对所参考著作的作者表示衷心感谢!

在编写本书的过程中,编者力图在问题驱动、竞赛引导、能力导向及强化实践等方面有所突破、有所创新,然而受限于能力和水平,书中难免存在疏漏和不足之处,恳请阅读本书的读者批评指正。

编者

2021年1月