前言


近年来,国家不断鼓励和支持中小学开展人工智能及信息技术课程的教学,尤其是在当前“双减”政策的背景下,中学生对计算机编程教育的需求日益强烈。在日常教学和科学实践过程中搭建专业的计算机编程体系,并在算法设计方面引导中学生入门和提高,不仅符合时代发展的需要,更能提高中学生的逻辑思维和数学分析、算法设计能力,而学习算法和计算机编程相关知识,对日后的专业发展,特别是对有志于日后选择理工科专业的中学生来说是十分必要的。
本书不是一部面向具有一定编程基础和算法设计能力的学生的赛前集训教材,而是面向中学高年级学生(他们应该具有一定的逻辑思维和数学基础)的Python程序设计基础及算法竞赛入门教材,目的是向没有编程基础的中学生普及Python程序设计的基础知识,介绍算法入门知识,并力争在相关的算法竞赛中提升他们的算法设计水平。其实,在各类算法竞赛中,目前较为常见的编程语言是C(含C++)程序设计语言,而且目前针对广大中学生群体(而非参加顶级竞赛的尖子选手)的程序设计类教材还不够丰富,且部分算法竞赛教材着眼于赛前集训,这类教材往往会让编程零基础的广大普通中学生“望而却步”。本书选择Python语言作为算法设计的编程语言,主要考虑如下两点: 第一,随着人工智能和移动互联网时代的来临,Python程序设计语言显示出强大的生命力,特别是由于其简洁的语法、“胶水”特性等,它不仅能在一些算法设计、人工智能的复杂应用场合(如自然语言处理、图像识别等)中发挥作用,更适宜在广大零基础的中学生中普及;第二,C(含C++)语言相较于Python来说略显复杂(如指针使用、地址分配、内存管理与优化等),且C是弱类型、静态类型检查的、面向过程的编程语言,而Python对于零基础的初学者来说相对更容易入门。鉴于本书的科普性质和读者定位,我们选择Python语言进行介绍。
本书结合中学生的认知特点,采用通俗易懂的语言,注重基础,注重实践,以提高中学生编程实践水平为指导方针,从毫无经验、刚开始接触程序设计的初学者的角度组织章节内容,以期能为中学生了解Python和算法设计思想打下良好基础。全书分两部分组织内容,第1~5章是Python程序设计基础: 第1章介绍Python编程基础,主要介绍Python特点、基本数据类型、代码撰写规范、常用内置方法和部分标准方法、外部方法的使用等;第2章介绍常用的流程控制,主要介绍条件选择语句块(ifelse条件选择语句)、循环语句块(while循环和for循环)等;第3章简介序列化数据,主要介绍字符串、列表、元组、字典、集合及其相应的推导式等;第4章介绍函数,内容涉及函数定义、参数与值传递、返回值、变量作用域、函数递归调用、lambda表达式等;第5章介绍文件与路径操作,内容涵盖文件读写操作、路径操作等。第6、7章是算法与竞赛入门,主要内容涉及基础算法知识、常见的基础数据结构算法、图论相关知识、并查集、动态规划等,并从优化时间复杂度的角度出发简介算法竞赛中应考虑的一些问题: 第6章简介算法与枚举、贪心、分治、递归等的设计思想,简介线性表、栈、队列、朴素的字符串匹配、简单的排序算法等;第7章是算法竞赛入门,首先对算法的时间复杂度进行概述,其次简介算法模拟与暴力求解思想,简介图的深度遍历和广度遍历,简介并查集问题及其算法设计以及动态规划的入门知识等,最后对算法与算法类竞赛进行简介。
需要说明的是,作为面向中学生的编程类科普读物,本书既不是有关Python的“知识大全”(相关内容可参阅市场上其他有关Python的参考书,因此书中既没有涉及有关面向对象程序设计、正则表达、异常处理结构与程序调试、GUI编程、网络程序设计、多线程与多进程、数据库处理、多媒体编程等,也不涉及对绘图工具(如turtle)、图形开发界面(如Tkinter)、大数据可视化工具(如Matplotlib)、数据结构化工具(如Pandas)等内容的介绍),也不是专门针对诸如全国青少年信息学奥林匹克竞赛(NOI)等的备赛手册,而是面向广大没有任何编程基础的中学生的一本科普读物,目的是引导缺乏编程经验的中学生迅速了解程序设计和算法入门等知识,使得中学生能掌握基于Python以及算法设计的基本思想和方法,掌握常见程序结构的设计思路,提高编程能力,并在此基础上了解算法基础知识,为树立计算思维打下坚实基础,以期能为日后更进一步的学习和有可能参加的各种竞赛打下基础。对于部分编程基础好的学生,更可通过进一步的学习或参加相关的算法竞赛提升自身的综合素质。打个比方,如果把“算法”看作一座大厦,那么本书“Python程序设计基础”部分就好像建筑原材料(如水泥、钢筋等),“算法和竞赛入门”部分则是在打基础和夯实地基。只有了解了Python基础,掌握了算法的入门知识,并在日后数学基础知识逐步丰富和完善的基础上,经过不断的编程实践,才能逐步打开算法世界的大门,探索算法和数学之美。
本书理论联系实际,材料组织合理,知识体系完整,内容由浅入深,讲述力求清晰,示例丰富完整。本书也是编者团队在北京外国语大学附属石家庄外国语学校开展人工智能授课和带领学生进行科技实践的基础上,结合中学生的认知特点而撰写的一部Python程序设计基础及算法竞赛入门教材,其编写指导思想是注重基础,注重实践,提高中学生编程实践和算法设计水平。在编写第1章至第5章时,我们参考了人民教育出版社2019年版的普通高中教科书《信息技术》中有关Python的部分内容要求,并适当进行了扩展和难度提升,给出的例题有代表性、针对性和实用性,注重对实践能力的培养,可以帮助初学者快速上手,为读者进一步学习程序设计奠定基础。其中,表示重要提示内容或知识拓展内容;表示课堂练习题;表示思考题;为本章思考与练习题。第6章和第7章的难度有较大跃升,适合有一定编程或算法基础的读者使用。教师可根据学生掌握知识的实际情况因材施教,有针对性地选讲相关章节内容,引导学生从算法的角度考虑问题并设计代码。
本书在每章后均配有一定数量的习题。全书各章的例题和习题的完整代码可以在清华大学出版社网站(http://www.tup.tsinghua.edu.cn)提供的相应章节的Jupyter Notebook文档中找到,方便读者实践与验证。另外,鉴于本书的科普性质,为了便于读者阅读,也为了纸质版图书的内容清晰可读,本书在叙述内容的过程中均使用了全角符号(如将函数后的参数列表圆括号用醒目的全角字符代替,但上机实际运行时,函数后的参数列表必须使用半角的小圆括号)、添加了易于观察的空格(如_ _main_ _,但上机实际运行时应为__main__)。
本书受到河北省科学技术协会科普创作出版资金项目资助。主编高凯、张高飞来自河北科技大学,副主编来自北京外国语大学附属石家庄外国语学校等相关单位。在本书的写作过程中,北京外国语大学附属石家庄外国语学校的张影、范沙玲、燕慧慧、陈晨,以及河北科技大学的魏育康为本书提出了很多有价值的修改建议。同时,有关Python相关网站也为本书的编写提供了大量帮助,我们也参考了相关文献和互联网上众多网友提供的素材,在此谨向这些文献的作者、网友以及为本书提供帮助的人们,特别是那些由于篇幅所限未在参考文献中提及的相关文献的作者和网站,致以诚挚的谢意和崇高的敬意,在此一并表示衷心的感谢。
本书可作为中学生信息技术课程的课外教学辅导用书和算法类竞赛的备赛用书,也可供广大Python初学者以及有志参加中学生算法竞赛的读者参考。由于我们的学识、水平均有限,书中不妥之处在所难免,恳请广大读者批评指正。

编者
2024年1月