Python極客項目編程(第2版) Python Playground, 2nd Edition: Geeky Projects for the Curious Programmer

[美] 馬赫什·文基塔查拉姆(Mahesh Venkitachalam)

  • Python極客項目編程(第2版)-preview-1
  • Python極客項目編程(第2版)-preview-2
Python極客項目編程(第2版)-preview-1

相關主題

商品描述

Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言,通過Python編程能夠解決現實生活中的很多問題。本書並不介紹Python語言的基礎知識,而是通過一系列有趣的項目,展示如何用Python解決各種實際問題,以及如何使用一些流行的Python庫。

本書共15章,每章講解一個有趣的Python項目,這些項目可以分成5個部分:第一部分是熱身,包括科赫雪花、繁花曲線;第二部分是模擬生命,包括康威生命游戲、使用Karplus-Strong算法生成泛音、群體行為模擬;第三部分是好玩的圖形,包括文本圖形、照片馬賽克、裸眼立體畫;第四部分是走進三維,包括理解OpenGL、圓環面上的康威生命游戲、體渲染;第五部分是玩轉硬件,包括在樹莓派Pico上實現Karplus-Strong算法、樹莓派激光音樂秀、物聯網花園、樹莓派音頻機器學習。此外,本書還通過附錄介紹如何安裝Python和設置樹莓派。

本書適合已經瞭解了基本的Python語法和編程知識、想要嘗試和探索通過Python編程解決實際問題的讀者閱讀,也可作為Python初學者練習項目開發的參考用書。

作者簡介

马赫什·文基塔查拉姆(Mahesh Venkitachalam)是一名计算机图形学和嵌入式系统顾问,拥有二十余年从业经验。他是Electronut Labs的创始人,该公司以开发充满创意的开源硬件著称。他经常撰写有关编程和电子技术的博客。

目錄大綱

第 一部分 熱身

第 1 章 科赫雪花 2

1.1 工作原理 2

1.1.1 使用遞歸 2

1.1.2 構建科赫雪花 3

1.1.3 使用海龜繪圖法繪圖 6

1.2 需求 8

1.3 代碼 8

1.3.1 計算點的坐標 8

1.3.2 遞歸 8

1.3.3 繪製片段 9

1.3.4 編寫函數 main() 9

1.4 運行程序 10

1.5 小結 10

1.6 實驗 11

1.7 完整代碼 11

第 2 章 繁花曲線 13

2.1 工作原理 13

2.1.1 理解參數方程 13

2.1.2 使用海龜繪圖法繪制曲線 15

2.2 需求 16

2.3 代碼 17

2.3.1 繪制繁花曲線 17

2.3.2 協調動畫 20

2.3.3 保存曲線 22

2.3.4 分析命令行參數及初始化 23

2.4 運行程序 24

2.5 小結 25

2.6 實驗 26

2.7 完整代碼 26

第二部分 模擬生命

第 3 章 康威生命游戲 32

3.1 工作原理 32

3.2 需求 34

3.3 代碼 34

3.3.1 顯示網格 34

3.3.2 設置初始狀態 35

3.3.3 實現邊界條件 36

3.3.4 實現規則 37

3.3.5 向程序傳遞命令行參數 37

3.3.6 初始化 38

3.4 運行程序 38

3.5 小結 40

3.6 實驗 40

3.7 完整代碼 40

第 4 章 使用 Karplus-Strong 算法生成泛音 43

4.1 工作原理 442

4.1.1 模擬 45

4.1.2 WAV 文件格式 46

4.1.3 小調五聲音階 47

4.2 需求 48

4.3 代碼 48

4.3.1 使用 deque 實現環形緩沖區 48

4.3.2 實現 Karplus-Strong算法 48

4.3.3 寫入 WAV 文件 50

4.3.4 使用 PyAudio 播放 WAV文件 50

4.3.5 創建音符及分析參數 52

4.4 運行彈撥樂器模擬程序 53

4.5 小結 54

4.6 實驗 54

4.7 完整代碼 54

第 5 章 群體行為模擬 58

5.1 工作原理 58

5.2 需求 59

5.3 代碼 59

5.3.1 初始化模擬 59

5.3.2 設置邊界條件 60

5.3.3 繪制個體 62

5.3.4 應用群體行為規則 63

5.3.5 影響模擬 67

5.3.6 分步模擬 68

5.3.7 分析參數及實例化Boids 類 69

5.4 運行群體行為模擬程序 69

5.5 小結 69

5.6 實驗 70

5.7 完整代碼 70

第三部分 好玩的圖形

第 6 章 文本圖形 74

6.1 工作原理 75

6.2 需求 76

6.3 代碼 76

6.3.1 定義灰度標尺和網格 76

6.3.2 計算平均亮度 77

6.3.3 根據圖像生成 ASCII 內容 77

6.3.4 定義命令行參數 78

6.3.5 將表示文本圖形的字符串寫入文本文件 79

6.4 運行文本圖形生成程序 79

6.5 小結 80

6.6 實驗 80

6.7 完整代碼 80

第 7 章 照片馬賽克 83

7.1 工作原理 83

7.1.1 分割目標圖像 84

7.1.2 計算平均 RGB 值 84

7.1.3 匹配圖像 85

7.2 需求 87

7.3 代碼 87

7.3.1 讀入輸入圖像 87

7.3.2 計算圖像的平均 RGB 值 88

7.3.3 將目標圖像分割為網格 88

7.3.4 查找與分片最匹配的圖像 89

7.3.5 創建圖像網格 90

7.3.6 創建照片馬賽克 91

7.3.7 編寫函數 main() 93

7.4 運行照片馬賽克生成程序 94

7.5 小結 95

7.6 實驗 95

7.7 完整代碼 95

第 8 章 裸眼立體畫 101

8.1 工作原理 102

8.1.1 感知裸眼立體畫中的深度 102

8.1.2 使用深度圖 103

8.1.3 平移像素 105

8.2 需求 106

8.3 代碼 106

8.3.1 創建由隨機圓組成的分片 106

8.3.2 重復分片 107

8.3.3 創建裸眼立體畫 108

8.3.4 提供命令行參數 109

8.4 運行裸眼立體畫生成程序 109

8.5 小結 110

8.6 實驗 111

8.7 完整代碼 111

第四部分 走進三維

第 9 章 理解 OpenGL 116

9.1 OpenGL 的工作原理 117

9.1.1 圖元 117

9.1.2 三維變換 118

9.1.3 著色器 120

9.1.4 頂點緩存 121

9.1.5 紋理映射 121

9.1.6 OpenGL 上下文 122

9.2 需求 122

9.3 代碼 122

9.3.1 RenderWindow 類 123

9.3.2 Scene 類 125

9.3.3 輔助函數 129

9.4 運行 OpenGL 應用程序 130

9.5 小結 130

9.6 實驗 130

9.7 完整代碼 131

第 10 章 圓環面上的康威生命游戲 136

10.1 工作原理 136

10.1.1 計算頂點 136

10.1.2 計算光照法線 138

10.1.3 渲染 139

10.1.4 給三角形帶著色 140

10.1.5 控制相機 140

10.1.6 將網格映射到圓環面 141

10.2 需求 142

10.3 代碼 142

10.3.1 渲染圓環面 142

10.3.2 實現康威生命游戲模擬 148

10.3.3 創建相機 149

10.3.4 整合代碼 151

10.4 運行三維版康威生命游戲模擬 153

10.5 小結 154

10.6 實驗 155

10.7 完整的圓環面渲染代碼 155

10.8 完整的康威生命游戲模擬代碼 160

10.9 完整的相機創建代碼 161

10.10 RenderWindow 類的完整代碼 162

第 11 章 體渲染 166

11.1 工作原理 166

11.1.1 數據格式 167

11.1.2 生成光線 167

11.1.3 OpenGL 窗口 169

11.2 需求 169

11.3 代碼 169

11.3.1 生成三維紋理 170

11.3.2 生成光線 171

11.3.3 實現體光線投射算法 176

11.3.4 顯示二維切片 180

11.3.5 整合代碼 183

11.4 運行程序 185

11.5 小結 185

11.6 實驗 185

11.7 完整的三維紋理生成代碼 186

11.8 完整的光線生成代碼 187

11.9 完整的體光線投射算法代碼 192

11.10 顯示二維切片的完整代碼 195

11.11 完整的主文件代碼 198

第五部分 玩轉硬件

第 12 章 在樹莓派 Pico 上實現Karplus-Strong 算法 202

12.1 工作原理 203

12.1.1 輸入和輸出 203

12.1.2 I2S 協議 204

12.2 需求 205

12.2.1 組裝硬件 205

12.2.2 安裝 MicroPython 207

12.3 代碼 207

12.3.1 設置 207

12.3.2 生成音符 208

12.3.3 播放音頻 210

12.3.4 編寫函數 main() 211

12.4 運行程序 212

12.5 小結 213

12.6 實驗 213

12.7 完整代碼 214

第 13 章 樹莓派激光音樂秀 218

13.1 工作原理 218

13.1.1 使用激光生成圖案 219

13.1.2 使用快速傅里葉變換分析音頻 222

13.2 需求 224

13.2.1 在樹莓派上安裝系統和軟件 224

13.2.2 搭建激光秀裝置 225

13.2.3 連接硬件 226

13.3 代碼 228

13.3.1 設置 228

13.3.2 控制硬件 229

13.3.3 處理音頻 230

13.3.4 測試電機 233

13.3.5 整合代碼 234

13.4 運行激光音樂秀程序 235

13.5 小結 236

13.6 實驗 236

13.7 完整代碼 237

第 14 章 物聯網花園 242

14.1 工作原理 242

14.1.1 低功耗藍牙 243

14.1.2 Web 框架 Bottle 245

14.1.3 SQLite 數據庫 246

14.2 需求 247

14.2.1 在樹莓派上安裝系統和軟件 247

14.2.2 安裝 CircuitPython 247

14.2.3 設置 IFTTT 服務 248

14.3 代碼 249

14.3.1 CircuitPython 代碼 249

14.3.2 BLE 掃描器代碼 252

14.3.3 Web 服務器代碼 258

14.3.4 主程序文件 264

14.4 運行物聯網花園程序 266

14.5 小結 267

14.6 實驗 267

14.7 完整的 CircuitPython 代碼 268

14.8 完整的 BLE 掃描器代碼 270

14.9 完整的 Python Web 服務器代碼 273

14.10 完整的主程序代碼 275

第 15 章 樹莓派音頻機器學習 277

15.1 機器學習概述 277

15.2 工作原理 278

15.2.1 聲譜圖 280

15.2.2 在樹莓派上推斷 281

15.3 需求 283

15.4 代碼 284

15.4.1 在 Colab 中訓練模型 284

15.4.2 在樹莓派上使用模型 293

15.5 運行語音識別系統 301

15.6 小結 302

15.7 實驗 303

15.8 完整代碼 303

附錄 A 安裝 Python 309

A.1 獲取本書項目的源代碼 309

A.2 安裝 Python 和 Python 模塊 309

A.2.1 Windows 309

A.2.2 macOS 310

A.2.3 Linux 311

附錄 B 設置樹莓派 312

B.1 安裝操作系統 312

B.2 測試連接 314

B.3 使用 SSH 登錄樹莓派 315

B.4 安裝 Python 模塊 316

B.5 遠程使用 Visual Studio Code 316