Python極客項目編程 (Python Playground)
內容描述
Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。通過Python編程,我們能夠解決現實生活中的很多任務。
本書通過14個有趣的項目,幫助和鼓勵讀者探索Python編程的世界。全書共14章,分別介紹了通過Python編程實現的一些有趣項目,包括解析iTunes播放列表、模擬人工生命、創建ASCII碼藝術圖、照片拼接、生成三維立體圖、創建粒子模擬的煙花噴泉效果、實現立體光線投射算法,以及用Python結合Arduino和樹莓派等硬件的電子項目。本書並不介紹Python語言的基礎知識,而是通過一系列不簡單的項目,展示如何用Python來解決各種實際問題,以及如何使用一些流行的Python庫。
本書適合那些想要通過Python編程來進行嘗試和探索的讀者,適合瞭解基本的Python語法和基本的編程概念的讀者進一步學習,對於Python程序員有一定的啟發和參考價值。
目錄大綱
第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
作者介紹
Mahesh Venkitachalam是一位擁有二十年編程經驗的軟件工程師。他從八年級就開始培養對技術的熱情,匯集成了他受歡迎的電子和編程博客:electronut.in。