图书目录

目    录

第1章  走进Python世界 1

1.1  认识Python 1

1.1.1  Python的由来 1

1.1.2  Python可以做什么 2

1.2  开发环境准备 3

1.2.1  安装Python语言包 3

1.2.2  使用Sublime Text编程工具 4

1.3  编程中的基础概念 6

1.3.1  面向过程编程中的基础概念 6

1.3.2  面向对象编程中的基础概念 8

1.4  Python语法初步 9

1.4.1  编程风格 9

1.4.2  变量与数据类型 10

1.4.3  运算符 13

1.4.4  流程控制语句 15

1.4.5  常用的数学函数 17

1.4.6  字符串操作相关方法 18

1.4.7  列表操作相关方法 20

1.4.8  字典操作相关方法 20

1.4.9  函数 21

1.5  Python面向对象编程 22

1.5.1  Python中的类 23

1.5.2  类的继承 24

1.5.3  模块和包的应用 25

本章结语 27

第2章  编程与数学 28

2.1  二进制运算 28

2.1.1  计算机的思考方式 29

2.1.2  计算机中数据的存储方式 30

2.2  灵活使用程序打印数据 31

2.2.1  小试牛刀——打印乘法口诀表 31

2.2.2  小试牛刀——打印简单图形 33

2.3  小试牛刀——简易计算器 36

2.3.1  接收用户输入 37

2.3.2  在终端运行的简易计算器 38

本章结语 40

第3章  有趣的数字——特殊数 41

3.1  阿姆斯特朗数 41

3.1.1  什么是阿姆斯特朗数 42

3.1.2  算法与实现——判断一个数是否为阿姆斯特朗数 42

3.2  自除数 43

3.2.1  算法与实现——筛选自除数 43

3.2.2  使用高级循环方法对代码进行优化 44

3.3  完全平方数 45

3.3.1  算法实现——四平方数和定理 45

3.3.2  编程实现——解决完全平方数问题 46

3.4  强整数 47

3.4.1  编程实现——筛选强整数 47

3.4.2  代码改进——强整数检索上限的寻找 48

3.5  回文数 48

3.5.1  编程实现——判断回文数 48

3.5.2  代码改进——求回文素数 49

3.6  丑数 50

3.6.1  编程实现——如何判断丑数 51

3.6.2  代码改进——尝试找到第n个丑数 52

3.6.3  代码改进——解决丑数扩展问题 53

3.6.4  算法改进——使用二分查找第n个丑数 53

3.7  完美数 55

3.7.1  完美数的故事 55

3.7.2  编程实现——如何判断完美数 55

3.8  快乐数 56

3.9  顺次数 57

3.10  步进数 58

3.11  中心对称数 60

3.11.1  编程实现——通过字典映射来判断中心对称数 60

3.11.2  代码改进——查找指定位数的中心对称数 60

3.11.3  代码改进——确定中心对称数的个数 61

3.12  累加数 63

3.13  易混淆数 64

本章结语 65

第4章  有趣的数字——数字计算 66

4.1  二进制相关运算 66

4.1.1  编程实现——二进制求和 66

4.1.2  编程实现——求十进制数的反码 67

4.1.3  编程实现——计算汉明距离 68

4.1.4  代码改进——求二进制数中1的最长间距 69

4.1.5  代码改进——颠倒二进制数 70

4.2  玩转四则运算 70

4.2.1  编程实现——一个数的各位相加 71

4.2.2  编程实现——不用加减乘除运算符做加法 72

4.2.3  代码改进——求阶乘的尾数 73

4.3  数字间的特殊运算 74

4.3.1  编程实现——平方根函数 74

4.3.2  编程实现——求平方数之和 75

4.3.3  编程实现——判断一个数是否为某数的幂次方 75

4.4  计算质数 76

4.4.1  编程实现——统计质数个数 76

4.4.2  编程实现——深度判断二进制数中特殊数的个数 78

4.5  数字转换 79

4.5.1  编程实现——整数转换 79

4.5.2  编程实现——整数转换成十六进制数 80

4.5.3  编程实现——将分数转换成小数 81

4.5.4  编程实现——罗马数字转整数 83

4.5.5  代码改进——整数转罗马数字 84

本章结语 85

第5章  图形世界的点线面 86

5.1  有趣的点与线 86

5.1.1  编程实现——连点成线 86

5.1.2  编程实现——最短时间内访问所有的点 88

5.1.3  编程实现——找到穿过最多点的直线 89

5.2  图形的奥妙 91

5.2.1  编程实现——输出杨辉三角 91

5.2.2  代码改进——尝试输出杨辉三角的某一行 92

5.2.3  编程实现——规划一个矩形合理的长和宽 93

5.2.4  编程实现——判断矩形是否重叠 94

5.2.5  代码改进——判断圆和矩形是否有重叠 95

5.2.6  编程实现——统计有效三角形的个数 97

5.3  周长与面积 98

5.3.1  编程实现——求重叠矩形的面积 98

5.3.2  编程实现——找到最小面积的矩形 100

5.3.3  编程实现——求三角形的最大周长 103

5.3.4  编程实现——求最大的三角形面积 104

5.4  凸多边形 105

5.4.1  什么是凸多边形 105

5.4.2  向量叉乘 106

5.4.3  编程实现——判断凸多边形 106

5.5  三维图形 107

5.5.1  编程实现——计算三维形体的表面积 107

5.5.2  代码改进——求解三维形体的投影面积 109

本章结语 110

第6章  探索字符的世界——字符串操作 111

6.1  字符串的排列 111

6.1.1  编程实现——格式化字符串 111

6.1.2  编程实现——格式化字符串进阶 113

6.1.3  编程实现——字符串全排列 114

6.1.4  编程实现——根据字符出现的频率进行排序 116

6.1.5  编程实现——交换字符 117

6.2  字符串的分割 119

6.2.1  平衡字符串的分割 119

6.2.2  编程实现——分割出回文字符串 120

6.2.3  编程实现——分割字符串获取最大分数 121

6.3  字符串的查找与统计 121

6.3.1  编程实现——统计连续字符的长度 121

6.3.2  编程实现——检查字符串中所有的字符是否唯一 122

6.3.3  编程实现——查找第一次出现的唯一字符 123

6.3.4  编程实现——求最长不含重复字符的子字符串长度 124

6.3.5  编程实现——查找常用字符 125

6.4  字符串的变换 126

6.4.1  编程实现——字符串平移 126

6.4.2  编程实现——字符串平移加密 127

6.4.3  编程实现——压缩字符串 128

6.4.4  编程实现——字符串解压 129

6.4.5  编程实现——将数字翻译成字符串 131

本章结语 132

第7章  探索字符的世界——字符串应用 133

7.1  单词提取 133

7.1.1  编程实现——统计字符串中的单词个数 133

7.1.2  编程实现——返回字符最后一个单词的长度 134

7.1.3  编程实现——统计最常用的单词 135

7.1.4  编程实现——拆分单词 136

7.1.5  编程实现——计算单词的最短距离 137

7.2  词句重组 138

7.2.1  编程实现——从字符串中返回字母组成单词 138

7.2.2  编程实现——语句逆序 139

7.2.3  编程实现——语句重排 139

7.2.4  编程实现——单词前缀替换 140

7.3  单词缩写 141

7.3.1  编程实现——判断是否有相同的缩写 141

7.3.2  编程实现——列举单词所有缩写形式 143

7.4  语句处理 144

7.4.1  编程实现——比较语句的差异 144

7.4.2  编程实现——分析词组 145

7.5  回文字符串 146

7.5.1  编程实现——验证回文字符串 146

7.5.2  编程实现——构造回文字符串 147

7.5.3  编程实现——找到最长的回文子字符串 149

7.5.4  编程实现——拼接构成回文串 149

7.6  字符串的复杂操作 150

7.6.1  编程实现——字符串解码 150

7.6.2  编程实现——构建IP地址 152

7.6.3  编程实现——验证IP地址的有效性 153

7.6.4  编程实现——实现模糊匹配 155

本章结语 156

第8章  玩转数据结构——列表与链表 157

8.1  获取列表中的信息 158

8.1.1  编程实现——寻找列表平衡点 158

8.1.2  编程实现——找到列表中缺失的元素 158

8.1.3  代码改进——寻找所有整数中两数之差绝对值的最大值 159

8.1.4  代码改进——根据条件获取列表中的值 161

8.1.5  代码改进——寻找列表中连续元素的和的最大值 161

8.1.6  代码改进——寻找列表中最长的连续递增序列 163

8.1.7  代码改进——寻找重复次数最多的元素 164

8.1.8  代码改进——寻找列表的凸点 165

8.2  列表操作 166

8.2.1  编程实现——将列表中的0进行后置 166

8.2.2  代码改进——递增列表的合并 167

8.2.3  代码改进——向列表中插入元素 169

8.2.4  代码改进——清除重复元素 169

8.2.5  代码改进——列表分隔问题 171

8.2.6  代码改进——对列表进行原地排序 172

8.2.7  代码改进——判断列表是否有序 172

8.2.8  编程实现——构建斐波那契数列 173

8.3  列表中元素的和 174

8.3.1  编程实现——找到列表中合适的两个元素 174

8.3.2  代码改进——找出列表中所有满足条件的三元素组 175

8.4  简单链表操作 177

8.4.1  编程实现——遍历链表 178

8.4.2  代码改进——删除链表中的节点 179

8.4.3  代码改进——链表合并 181

8.4.4  代码改进——链表转整数 182

8.5  特殊性质的链表 183

8.5.1  编程实现——判断回文链表 183

8.5.2  代码改进——判断环形链表 183

8.5.3  链表重构——奇偶排列的链表 185

8.6  高级链表操作 186

8.6.1  编程实现——链表大数求和 186

8.6.2  代码改进——链表重排 188

8.6.3  代码改进——对链表进行原地排序 189

8.6.4  代码改进——旋转链表 190

8.6.5  代码改进——交换链表相邻的节点 191

8.6.6  编程实现——设计链表结构 192

本章结语 195

第9章  玩转数据结构——栈、堆与队列 196

9.1  简单栈数据结构 196

9.1.1  编程实现——设计栈结构 197

9.1.2  代码改进——利用栈清理无效的括号 198

9.1.3  代码改进——处理平衡括号 199

9.1.4  代码改进——进行括号内容逆序 200

9.1.5  代码改进——删除最外层括号 201

9.1.6  代码改进——补充缺失的括号 202

9.1.7  代码改进——递归删除重复的相邻字符 203

9.1.8  代码改进——实现条件运算符 205

9.1.9  代码改进——简化文件路径 206

9.2  堆的简单应用 208

9.2.1  什么是堆 208

9.2.2  编程实现——查找高频单词 209

9.2.3  编程实现——寻找最接近原点的n个点 210

9.3  队列的简单应用 211

9.3.1  编程实现——设计队列 211

9.3.2  代码改进——设计循环队列 213

本章结语 215

第10章  玩转数据结构——树与图 216

10.1  二叉树的判定 217

10.1.1  编程实现——解析二叉树的深度 218

10.1.2  代码改进——平衡二叉树的判定 220

10.1.3  代码改进——对称二叉树的判定 221

10.1.4  代码改进——判断两棵二叉树是否相同 223

10.1.5  代码改进——二叉树相加 224

10.1.6  代码改进——单值二叉树的判定 226

10.2  二叉树的遍历 226

10.2.1  编程实现——二叉树的前序遍历 227

10.2.2  代码改进——二叉树的中序遍历和后序遍历 228

10.2.3  代码改进——根据层序遍历二叉树 228

10.2.4  代码改进——垂直遍历二叉树 230

10.2.5  代码改进——将二叉树的遍历方式推广到N叉树 231

10.3  构造二叉树 233

10.3.1  编程实现——从遍历结果构造二叉树 233

10.3.2  代码改进——通过有序列表构造二叉搜索树 236

10.3.3  代码改进——在二叉搜索树中插入元素 237

10.4  删除二叉树中的节点 238

10.4.1  编程实现——在二叉搜索树中删除节点 238

10.4.2  代码改进——清除二叉树中的指定叶子节点 241

10.5  获取二叉树中存储的信息 242

10.5.1  编程实现——判断是否为堂兄弟节点 242

10.5.2  代码改进——获取二叉树中指定节点值的和 243

10.5.3  代码改进——计算二叉树路径的和 244

10.5.4  代码改进——计算树及所有子树的平均值 246

10.5.5  代码改进——完全二叉树的节点个数 247

10.6  图结构的应用 249

10.6.1  编程实现——网格中的最近距离 249

10.6.2  代码改进——找到无环图中所有的路径 252

本章结语 253

第11章  烧脑游戏编程—— 热身篇 254

11.1  上楼梯 254

11.2  猜数字游戏 255

11.3  套餐组合问题 256

11.4  种树问题 257

11.5  算术机器人 258

11.6  单行的键盘 259

11.7  统计运动员的名次 260

11.8  分金币 260

11.9  传绣球游戏 261

11.10  扑克游戏 263

11.11  酒瓶子问题 264

11.12  所有可能的木板长度 265

11.13  电脑高手 265

11.14  灯泡问题 267

11.14.1  亮着的灯泡 267

11.14.2  不同功能的按钮 268

11.14.3  蓝色灯光的灯泡 270

11.14.4  翻转灯泡的状态 271

11.15  宝石鉴定 272

11.16  翻转游戏 272

11.17  井字棋的输赢判定 273

11.18  分发糖果问题 275

11.18.1  怎样分糖果可以尽可能多地使儿童满足 275

11.18.2  给弟弟分糖果 276

11.18.3  分发糖果 277

11.19  排布硬币 278

11.20  列表变换游戏 279

11.21  国际象棋中的车 280

11.22  计算员工的平均工资 282

11.23  比赛计分 283

11.24  股票买卖的最大盈利 284

11.25  单词组合游戏 285

本章结语 286

第12章  烧脑游戏编程——进阶篇 287

12.1  统计战舰个数 287

12.2  田忌赛马 289

12.3  炸弹人游戏 290

12.4  消除数字 291

12.5  为赛车加油 293

12.6  马走日 295

12.7  最大的岛屿面积 297

12.8  跳跃游戏 298

12.9  拿石子游戏 301

12.10  分割绳子 301

12.11  载人过河 302

12.12  迅捷斥候——提莫 304

12.13  水壶问题 305

12.14  叠罗汉 307

12.15  活字印刷术 308

本章结语 309

第13章  巧用编程工具 310

13.1  更加强大的编辑器 310

13.1.1  下载与配置VSCode 311

13.1.2  进行Python代码的调试 312

13.2  编写有趣的界面应用 315

13.2.1  使用Python开发桌面应用 315

13.2.2  进行用户交互 316

13.3  看得见的游戏 317

13.4  各种有趣而强大的Python模块 319

13.4.1  快速搭建网站 320

13.4.2  智能爬虫 321

本章结语 324