编辑推荐
Python 是一种强大的编程语言,容易学习而且充满乐趣。但掌握了基本知识后,接下来做什么? 本书包含了一组富有想象力的编程项目,它们将引导你用Python 来制作图像和音乐、模拟现实世界的现象,并与 Arduino 和树莓派这样的硬件进行交互。你将学习使用常见的Python 工具和库,如numpy、matplotlib 和pygame, 来完成以下工作: ● 利用参数方程和turtle模块生成万花尺图案; ● 通过模拟频率泛音在计算机上创作音乐; ● 将图形图像转换为ASCII文本图形; ● 编写一个三维立体画程序,生成隐藏在*图案下的3D图像; ● 通过探索粒子系统、透明度和广告牌技术,利用OpenGL着色器制作逼真的动画; ● 利用来自CT和MRI扫描的数据实现3D可视化; ● 将计算机连接到Arduino编程,创建响应音乐的激光秀。 通过本书,你可以享受作为极客的真正乐趣!
内容简介
Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过Python编程,我们能够解决现实生活中的很多任务。 本书通过14个有趣的项目,帮助和鼓励读者探索Python编程的世界。全书共14章,分别介绍了通过Python编程实现的一些有趣项目,包括解析iTunes播放列表、模拟人工生命、创建ASCII码艺术图、照片拼接、生成三维立体图、创建粒子模拟的烟花喷泉效果、实现立体光线投射算法,以及用Python结合Arduino和树莓派等硬件的电子项目。本书并不介绍Python语言的基础知识,而是通过一系列不简单的项目,展示如何用Python来解决各种实际问题,以及如何使用一些流行的Python库。 本书适合那些想要通过Python编程来进行尝试和探索的读者,适合了解基本的Python语法和基本的编程概念的读者进一步学习,对于Python程序员有一定的启发和参考价值。
作者简介
Mahesh Venkitachalam是一位拥有二十年编程经验的软件工程师。 他从八年级就开始培养对技术的热情,汇集成了他受欢迎的电子和编程博客:electronut.in。
目录
- 第1章 解析iTunes播放列表3
- 1.1 iTunes播放列表文件剖析 3
- 1.2 所需模块 5
- 1.3 代码 5
- 1.3.1 查找重复 5
- 1.3.2 提取重复 6
- 1.3.3 查找多个播放列表中共同的音轨 7
- 1.3.4 收集统计信息 8
- 1.3.5 绘制数据 8
- 1.3.6 命令行选项 9
- 1.4 完整代码 10
- 1.5 运行程序 13
- 1.6 小结 14
- 1.7 实验 14
- 第2章 万花尺 15
- 2.1 参数方程 16
- 2.1.1 万花尺方程 17
- 2.1.2 海龟画图 19
- 2.2 所需模块 20
- 2.3 代码 20
- 2.3.1 Spiro构造函数 20
- 2.3.2 设置函数 21
- 2.3.3 restart()方法 21
- 2.3.4 draw()方法 22
- 2.3.5 创建动画 22
- 2.3.5 SpiroAnimator类 23
- 2.3.5 genRandomParams()方法 24
- 2.3.6 重新启动程序 24
- 2.3.7 update()方法 25
- 2.3.8 显示或隐藏光标 25
- 2.3.9 保存曲线 25
- 2.3.10 解析命令行参数和初始化 26
- 2.4 完整代码 27
- 2.5 运行万花尺动画 32
- 2.6 小结 33
- 2.7 实验 33
- 第二部分 模拟生命
- 第3章 Conway生命游戏 37
- 3.1 工作原理 38
- 3.2 所需模块 39
- 3.3 代码 40
- 3.3.1 表示网格 40
- 3.3.2 初始条件 41
- 3.3.3 边界条件 41
- 3.3.4 实现规则 42
- 3.3.5 向程序发送命令行参数 43
- 3.3.6 初始化模拟 43
- 3.4 完整代码 44
- 3.5 运行模拟人生的游戏 46
- 3.6 小结 47
- 3.7 实验 47
- 第4章 用Karplus-Strong算法产生音乐泛音 49
- 4.1 工作原理 51
- 4.1.1 模拟 51
- 4.1.2 创建WAV文件 52
- 4.1.3 小调五声音阶 53
- 4.2 所需模块 54
- 4.3 代码 54
- 4.3.1 用deque实现环形缓冲区 54
- 4.3.2 实现Karplus-Strong算法 55
- 4.3.3 写WAV文件 56
- 4.3.4 用pygame播放WAV文件 56
- 4.3.5 main()方法 57
- 4.4 完整代码 58
- 4.5 运行拨弦模拟 61
- 4.6 小结 62
- 4.7 实验 62
- 第5章 类鸟群:仿真鸟群 63
- 5.1 工作原理 64
- 5.2 所需模块 64
- 5.3 代码 64
- 5.3.1 计算类鸟群的位置和速度 65
- 5.3.2 设置边界条件 66
- 5.3.3 绘制类鸟群 67
- 5.3.4 应用类鸟群规则 68
- 5.3.5 添加个体 70
- 5.3.6 驱散类鸟群 71
- 5.3.7 命令行参数 71
- 5.3.8 Boids类 71
- 5.4 完整代码 72
- 5.5 运行类鸟群模拟 75
- 5.6 小结 76
- 5.7 实验 76
- 第三部分 图片之乐
- 第6章 ASCII文本图形 79
- 6.1 工作原理 80
- 6.2 所需模块 81
- 6.3 代码 81
- 6.3.1 定义灰度等级和网格 82
- 6.3.2 计算平均亮度 82
- 6.3.3 从图像生成ASCII内容 83
- 6.3.4 命令行选项 84
- 6.3.5 将ASCII文本图形字符串写入文本文件 84
- 6.4 完整代码 85
- 6.5 运行ASCII文本图形生成程序 87
- 6.6 小结 87
- 6.7 实验 88
- 第7章 照片马赛克 89
- 7.1 工作原理 90
- 7.1.1 分割目标图像 90
- 7.1.2 平均颜色值 91
- 7.1.3 匹配图像 91
- 7.2 所需模块 92
- 7.3 代码 92
- 7.3.1 读入小块图像 92
- 7.3.2 计算输入图像的平均颜色值 93
- 7.3.3 将目标图像分割成网格 93
- 7.3.4 寻找小块的最佳匹配 94
- 7.3.5 创建图像网格 95
- 7.3.6 创建照片马赛克 96
- 7.3.7 添加命令行选项 97
- 7.3.8 控制照片马赛克的大小 97
- 7.4 完整代码 98
- 7.6 运行照片马赛克生成程序 102
- 7.7 小结 103
- 7.7 实验 103
- 第8章 三维立体画 105
- 8.1 工作原理 106
- 8.1.1 感知三维立体画中的深度 106
- 8.1.2 深度图 108
- 8.2 所需模块 109
- 8.3 代码 109
- 8.3.1 重复给定的平铺图像 109
- 8.3.2 从创建随机圆平铺 110
- 8.3.3 创建三维立体画 111
- 8.3.4 命令行选项 112
- 8.4 完整代码 113
- 8.5 运行三维立体画生成程序 115
- 8.6 小结 117
- 8.7 实验 117
- 第四部分 走进三维
- 第9章 理解OpenGL 121
- 9.1 老式OpenGL 122
- 9.2 现代OpenGL:三维图形管线 124
- 9.2.1 几何图元 124
- 9.2.2 三维变换 125
- 9.2.3 着色器 127
- 9.2.4 顶点缓冲区 128
- 9.2.5 纹理贴图 129
- 9.2.6 显示OpenGL 129
- 9.3 所需模块 130
- 9.4 代码 130
- 9.4.1 创建OpenGL窗口 130
- 9.4.2 设置回调 131
- 9.4.3 Scene类 133
- 9.5 完整代码 137
- 9.6 运行OpenGL应用程序 142
- 9.7 小结 143
- 9.8 实验 143
- 第10章 粒子系统 145
- 10.1 工作原理 146
- 10.1.1 为粒子运动建模 147
- 10.1.2 设置最大范围 147
- 10.1.3 渲染粒子 149
- 10.1.4 利用OpenGL混合来创建更逼真火花 149
- 10.1.5 使用公告板 150
- 10.1.6 生成火花动画 151
- 10.2 所需模块 151
- 10.3 粒子系统的代码 151
- 10.3.1 定义粒子的几何形状 152
- 10.3.2 为粒子定义时间延迟数组 153
- 10.3.3 设置粒子初始速度 153
- 10.3.4 创建顶点着色器 154
- 10.3.5 创建片段着色器 156
- 10.3.6 渲染 156
- 10.3.7 Camera类 158
- 10.4 粒子系统完整代码 158
- 10.5 盒子代码 164
- 10.6 主程序代码 166
- 10.6.1 每步更新这些粒子 167
- 10.6.2 键盘处理程序 168
- 10.6.3 管理主程序循环 168
- 10.7 完整主程序代码 169
- 10.8 运行程序 172
- 10.9 小结 172
- 10.10 实验 172
- 第11章 体渲染 173
- 11.1 工作原理 174
- 11.1.1 数据格式 174
- 11.1.2 生成光线 175
- 11.1.3 显示OpenGL窗口 177
- 11.2 所需模块 178
- 11.3 项目代码概述 178
- 11.4 生成三维纹理 178
- 11.5 完整的三维纹理代码 180
- 11.6 生成光线 181
- 11.6.1 定义颜色立方体的几何形状 182
- 11.6.2 创建帧缓冲区对象 184
- 11.6.3 渲染立方体的背面 185
- 11.6.4 渲染立方体的正面 185
- 11.6.5 渲染整个立方体 186
- 11.6.6 调整大小处理程序 187
- 11.7 完整的光线生成代码 187
- 11.8 体光线投射 192
- 11.8.1 顶点着色器 194
- 11.8.2 片段着色器 194
- 11.9 完整的体光线投射代码 196
- 11.10 二维切片 199
- 11.10.1 顶点着色器 201
- 11.10.2 片段着色器 202
- 11.10.3 针对二维切片的用户界面 202
- 11.11 完整的二维切片代码 203
- 11.12 代码整合 206
- 11.13 完整的主文件代码 207
- 11.14 运行程序 209
- 11.15 小结 210
- 11.16 实验 210
- 第五部分 玩硬件
- 第12章 Arduino简介 215
- 12.1 Arduino 216
- 12.2 Arduino生态系统 217
- 12.2.1 语言 218
- 12.2.2 IDE 218
- 12.2.3 社区 218
- 12.2.4 外设 219
- 12.3 所需模块 219
- 12.4 搭建感光电路 219
- 12.4.1 电路工作原理 219
- 12.4.2 Arduino程序 220
- 12.4.3 创建实时图表 221
- 12.5 Python代码 222
- 12.6 完整的Python代码 224
- 12.7 运行程序 226
- 12.8 小结 227
- 12.9 实验 227
- 第13章 激光音乐秀 229
- 13.1 用激光产生图案 230
- 13.1.1 电机控制 230
- 13.1.2 快速傅里叶变换 232
- 13.2 所需模块 233
- 13.2.1 搭建激光秀 234
- 13.2.2 连接电机驱动器 236
- 13.3 Arduino程序 237
- 13.3.1 配置Arduino数字输出引脚 238
- 13.3.2 主循环 238
- 13.3.3 停止电机 240
- 13.4 Python代码 240
- 13.4.1 选择音频设备 241
- 13.4.2 从输入设备读取数据 241
- 13.4.3 计算数据流的FFT 242
- 13.4.4 从FFT值提取频率信息 243
- 13.4.5 将频率转换为电机速度和方向 243
- 13.4.6 测试电机设置 244
- 13.4.7 命令行选项 245
- 13.4.8 手动测试 245
- 13.5 完整的Python代码 246
- 13.6 运行程序 249
- 13.7 小结 250
- 13.8 实验 250
- 第14章 基于树莓派的天气监控器 253
- 14.1 硬件 254
- 14.1.1 DHT11温湿度传感器 254
- 14.1.2 树莓派 255
- 14.1.3 设置树莓派 255
- 14.2 安装和配置软件 256
- 14.2.1 操作系统 257
- 14.2.2 初始配置 257
- 14.2.3 Wifi设置 257
- 14.2.4 设置编程环境 258
- 14.2.5 通过SSH连接 259
- 14.2.6 Web框架Bottle 259
- 14.2.7 用flot绘制 260
- 14.2.8 关闭树莓派 261
- 14.3 搭建硬件 262
- 14.4 代码 263
- 14.4.1 处理传感器数据请求 264
- 14.4.2 绘制数据 264
- 14.4.3 update()方法 267
- 14.4.4 用于LED的JavaScript处理程序 267
- 14.4.5 添加交互性 268
- 14.5 完整代码 269
- 14.6 运行程序 272
- 14.7 小结 273
- 14.8 实验 273
- 附录A 软件安装 275
- 附录B 基础实用电子学 281
- 附录C 树莓派的建议和技巧 289