本书以问题求解为核心原则,以Python语言为平台,通过面向应用和循序渐进设计的典型实例,引导学生关注和掌握编程逻辑和方法,实现从系统级上对算法和程序设计的再认识,强调系统设计。主要内容包括常用Python集成开发与调试环境、经典案例与算法、综合案例三个部分,可作为高校Python程序设计等相关课程的实践参考书,也可作为读者自学Python编程的参考读物。
一提到Python语言,大家一定会首先想到以下广为人知的经典口号:人生苦短,我用Python;人生苦短,Python是岸;人生苦短,Python当歌。
寥寥数字,尽显Python之禅——简洁为美,简约而不简单。C、Java、C++语言长期傲视群雄,而Python语言作为一种“年轻”的语言,大有后来者居上之势,成为人工智能+大数据时代的不二之选。
与之前的《程序设计实践教程:C 语言版》和《程序设计实践教程:C++语言版》一样,本书程序采用统一的代码规范编写,并且在编码中注重程序的健壮性。同时,书中实践案例的选取兼顾趣味性和实用性。本书内容分为三部分。部分介绍集成开发环境,包括IDLE、PyCharm、Jupyter Notebook、Visual Studio Code四种常用的Python语言集成开发环境的使用和程序调试方法。第二部分是经典实验案例,主要包括基本运算和基本 I/O、基本控制结构、枚举法、递推法、近似迭代法、递归法、趣味数字、矩阵运算、日期和时间、文本处理、面向对象、查找和排序、高精度计算和近似计算、贪心与动态规划等专题。在本部分中,还结合Python语言独有的特点,设计了使用jieba库进行中文文档的词频统计分析、使用wordcloud库显示词云图以及CSV格式文件的读写等案例。第三部分是综合案例,包括餐饮服务质量调查、小学生算术运算训练系统、青年歌手大奖赛现场分数统计、随机点名系统、基于turtle库的图形绘制5个应用案例,以及多个游戏设计案例,如火柴游戏、文曲星猜数游戏、2048 数字游戏、贪吃蛇游戏、飞机大战、Flappy bird、井字棋游戏、杆子游戏、俄罗斯方块。
书中每个实践案例均提供了多种编程方法,并且很多案例都采用循序渐进的任务驱动方式,引导读者举一反三、触类旁通。这些实践案例会帮助你提升编程能力,让你在快速从新手成长为高手的同时,体会 Python 之美和程序设计之美。
本书由苏小红组织和统筹编写工作,部分由孙承杰执笔,第二部分和第三部分主要由苏小红执笔,新增的案例由李东设计并进行程序调试,其他部分案例由蒋远设计并调试。
因编者水平有限,书中错误在所难免,欢迎读者对本书提出意见和建议,我们会在重印时予以更正,读者也可随时从我们的教材网站(http://sse.hit.edu.cn/book/)和华章网站(http://www.hzbook.com)下载勘误表。编者的 E-mail 地址为 sxh@hit.edu.cn。
编 者
2021 年于哈尔滨工业大学计算学部
苏小红 教授,博士生导师,现任哈尔滨工业大学计算学部智能软件工程研究中心主任,计算机科学与技术实验教学示范中心副主任。国家精品资源共享课“C语言程序设计”和省级精品课程“计算机图形学”负责人。主持的MOOC课程“C语言程序设计精髓”和“程序设计基础”被评为国家精品在线开放课程。获教学成果一、二等奖各1项,黑龙江省教学成果一等奖4项、二等奖3项。曾获省教学名师奖、宝钢优秀教师奖等荣誉称号。
前言
部分 开发环境
第1章 集成开发环境简介 2
1.1 程序调试 2
1.1.1 程序调试的概念 2
1.1.2 程序错误的种类 2
1.1.3 常用调试方法 3
1.2 经典集成开发环境介绍 4
1.2.1 IDLE的使用和调试方法 4
1.2.2 PyCharm的使用和调试方法 10
1.2.3 Jupyter Notebook的使用和调试方法 24
1.2.4 Visual Studio Code的使用和调试方法 31
1.3 小结 38
第二部分 经典实验案例
第2章 基本运算和基本I/O专题 40
2.1 数位拆分v1.0 40
2.2 身高预测v1.0 41
2.3 计算三角形面积 42
2.4 存款计算器 43
第3章 基本控制结构专题 45
3.1 数位拆分v2.0 45
3.2 身高预测v2.0 48
3.3 体型判断 49
3.4 算术计算器 50
3.5 国王的许诺 54
3.6 计算圆周率 55
3.7 数字位数判断 56
3.8 阶乘求和 58
第4章 枚举法专题 61
4.1 还原算术表达式 61
4.2 求解不等式 63
4.3 韩信点兵 65
4.4 减肥食谱 66
第5章 递推法专题 68
5.1 猴子吃桃 68
5.2 吹气球 69
5.3 发红包 70
5.4 水手分椰子 73
第6章 近似迭代法专题 75
6.1 直接迭代法求方程根 75
6.2 牛顿迭代法求方程根 76
6.3 二分法求方程根 79
6.4 计算平方根 80
第7章 递归法专题 82
7.1 公约数 82
7.2 汉诺塔问题 85
7.3 骑士游历 86
7.4 八皇后问题 89
第8章 趣味数字专题 92
8.1 杨辉三角形 92
8.2 好数对 95
8.3 完全数 97
8.4 亲密数 100
8.5 素数求和 103
8.6 验证哥德巴赫猜想 105
8.7 孪生素数 106
8.8 回文素数 107
第9章 矩阵运算专题 111
9.1 矩阵转置 111
9.2 幻方矩阵 112
9.3 蛇形矩阵 115
9.4 螺旋矩阵 117
第10章 日期和时间专题 122
10.1 三天打鱼两天晒网 122
10.2 统计特殊的星期天 125
10.3 日期转换 127
10.4 动态时钟 134
第11章 文本处理专题 137
11.1 字符统计 137
11.2 单词统计 145
11.3 行程长度编码 150
11.4 串的模式匹配 152
11.5 中文文档的统计分析 157
11.6 CSV格式文件的读写 160
第12章 面向对象专题 161
12.1 数字时钟模拟 161
12.2 洗发牌模拟 162
12.3 逆波兰表达式求值 165
12.4 约瑟夫问题 170
第13章 查找和排序专题 177
13.1 寻找值 177
13.2 关键字统计 182
13.3 验证卡布列克运算 186
13.4 链表逆序 192
第14章 高精度计算和近似计算专题 196
14.1 高精度计算任意位圆周率 196
14.2 蒙特卡罗法近似计算圆周率 199
14.3 蒙特卡罗法计算定积分 201
第15章 贪心与动态规划专题 203
15.1 活动安排 203
15.2 分发糖果 204
15.3 0-1背包问题 206
15.4 长上升子序列 209
第三部分 综合案例
第16章 综合应用 212
16.1 餐饮服务质量调查 212
16.2 小学生算术运算训练系统 216
16.3 青年歌手大奖赛现场分数统计 222
16.4 随机点名系统 227
16.5 基于turtle库的图形绘制 232
第17章 游戏设计 235
17.1 火柴游戏 235
17.2 文曲星猜数游戏 238
17.3 2048数字游戏 240
17.4 贪吃蛇游戏 244
17.5 飞机大战 247
17.6 Flappy bird 252
17.7 井字棋游戏 255
17.8 杆子游戏 260
17.9 俄罗斯方块 264