Python是一種解釋型、面向?qū)ο、動態(tài)數(shù)據(jù)類型的高級程序設(shè)計語言,通過Python編程能夠解決現(xiàn)實生活中的很多問題。本書并不介紹Python語言的基礎(chǔ)知識,而是通過一系列有趣的項目,展示如何用Python解決各種實際問題,以及如何使用一些流行的Python庫。
本書共15章,每章講解一個有趣的Python項目,這些項目可以分成5個部分:第一部分是熱身,包括科赫雪花、繁花曲線;第二部分是模擬生命,包括康威生命游戲、使用Karplus-Strong算法生成泛音、群體行為模擬;第三部分是好玩的圖形,包括文本圖形、照片馬賽克、裸眼立體畫;第四部分是走進三維,包括理解OpenGL、圓環(huán)面上的康威生命游戲、體渲染;第五部分是玩轉(zhuǎn)硬件,包括在樹莓派Pico上實現(xiàn)Karplus-Strong算法、樹莓派激光音樂秀、物聯(lián)網(wǎng)花園、樹莓派音頻機器學習。此外,本書還通過附錄介紹如何安裝Python和設(shè)置樹莓派。
本書適合已經(jīng)了解了基本的Python語法和編程知識、想要嘗試和探索通過Python編程解決實際問題的讀者閱讀,也可作為Python初學者練習項目開發(fā)的參考用書。
		
	
Python以其簡潔的語法、強大的功能、較低的學習門檻而受到廣大編程愛好者的喜愛。但是,學習完P(guān)ython的基礎(chǔ)語法和編程知識后,如何提升Python編程技能呢?
本書通過15個有趣且富有創(chuàng)造性的編程項目,教你用Python生成圖像和音樂、模擬現(xiàn)實世界中的現(xiàn)象,并與樹莓派等硬件進行交互。
本書項目涵蓋繪畫、圖像處理、3D渲染、樹莓派、物聯(lián)網(wǎng)、AI機器學習等,講解眾多實用的Python庫:NumPy、Matplotlib、scipy、PyAudio、Pillow、sqlite3、turtle、math、argparse、OpenGL、tensorflow……
●  使用海龜繪圖法繪制復雜的分形圖案和繁花曲線;
●  模擬彈撥樂器的聲音生成音樂;
●  設(shè)計引人入勝的元胞自動機并實現(xiàn)群體行為模擬;
●  實現(xiàn)二維和三維空間中的康威生命游戲;
●  將普通圖像轉(zhuǎn)換為文本圖形、照片馬賽克和令人驚嘆的裸眼立體畫;
●  探索3D圖形,從基本的形狀渲染到MRI和CT掃描數(shù)據(jù)的可視化;
●  使用樹莓派創(chuàng)建隨音樂起舞的激光表演和物聯(lián)網(wǎng)花園監(jiān)測器;
●  構(gòu)建使用機器學習驅(qū)動的語音識別系統(tǒng)。
每個項目都按照【講解原理-分析需求-代碼精講-知識小結(jié)-擴展練習-完整代碼】的方式進行講解,并提供可下載運行的源代碼,贈送Python排障手冊+程序員面試手冊
本書相比上一版進行了如下修訂:
(1)新增/替換5個全新項目,緊跟前沿熱點
(2)基于Python 3.9全面更新所有項目
(3)采用更新、更實用的Python方法和算法
(4)使用Anaconda簡化Python安裝
(5)簡化硬件項目的組裝過程,專注于Python編程
馬赫什·文基塔查拉姆(Mahesh Venkitachalam)是一名計算機圖形學和嵌入式系統(tǒng)顧問,擁有二十余年從業(yè)經(jīng)驗。他是Electronut Labs的創(chuàng)始人,該公司以開發(fā)充滿創(chuàng)意的開源硬件著稱。他經(jīng)常撰寫有關(guān)編程和電子技術(shù)的博客。
第 一部分 熱身 
第 1 章 科赫雪花    2 
1.1 工作原理    2 
1.1.1 使用遞歸    2 
1.1.2 構(gòu)建科赫雪花    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 編寫函數(shù) main()    9 
1.4 運行程序    10 
1.5 小結(jié)    10 
1.6 實驗    11 
1.7 完整代碼    11 
第 2 章 繁花曲線    13 
2.1 工作原理    13 
2.1.1 理解參數(shù)方程    13 
2.1.2 使用海龜繪圖法繪制曲線    15 
2.2 需求    16 
2.3 代碼    17 
2.3.1 繪制繁花曲線    17 
2.3.2 協(xié)調(diào)動畫    20 
2.3.3 保存曲線    22 
2.3.4 分析命令行參數(shù)及初始化    23 
2.4 運行程序    24 
2.5 小結(jié)    25 
2.6 實驗    26 
2.7 完整代碼    26 
第二部分 模擬生命 
第 3 章 康威生命游戲    32 
3.1 工作原理    32 
3.2 需求    34 
3.3 代碼    34 
3.3.1 顯示網(wǎng)格    34 
3.3.2 設(shè)置初始狀態(tài)    35 
3.3.3 實現(xiàn)邊界條件    36 
3.3.4 實現(xiàn)規(guī)則    37 
3.3.5 向程序傳遞命令行參數(shù)    37 
3.3.6 初始化    38 
3.4 運行程序    38 
3.5 小結(jié)    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 小調(diào)五聲音階    47 
4.2 需求    48 
4.3 代碼    48 
4.3.1 使用 deque 實現(xiàn)環(huán)形緩沖區(qū)    48 
4.3.2 實現(xiàn) Karplus-Strong算法    48 
4.3.3 寫入 WAV 文件    50 
4.3.4 使用 PyAudio 播放 WAV文件    50 
4.3.5 創(chuàng)建音符及分析參數(shù)    52 
4.4 運行彈撥樂器模擬程序    53 
4.5 小結(jié)    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 設(shè)置邊界條件    60 
5.3.3 繪制個體    62 
5.3.4 應(yīng)用群體行為規(guī)則    63 
5.3.5 影響模擬    67 
5.3.6 分步模擬    68 
5.3.7 分析參數(shù)及實例化Boids 類    69 
5.4 運行群體行為模擬程序    69 
5.5 小結(jié)    69 
5.6 實驗    70 
5.7 完整代碼    70 
第三部分 好玩的圖形 
第 6 章 文本圖形    74 
6.1 工作原理    75 
6.2 需求    76 
6.3 代碼    76 
6.3.1 定義灰度標尺和網(wǎng)格    76 
6.3.2 計算平均亮度    77 
6.3.3 根據(jù)圖像生成 ASCII 內(nèi)容    77 
6.3.4 定義命令行參數(shù)    78 
6.3.5 將表示文本圖形的字符串寫入文本文件    79 
6.4 運行文本圖形生成程序    79 
6.5 小結(jié)    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 將目標圖像分割為網(wǎng)格    88 
7.3.4 查找與分片最匹配的圖像    89 
7.3.5 創(chuàng)建圖像網(wǎng)格    90 
7.3.6 創(chuàng)建照片馬賽克    91 
7.3.7 編寫函數(shù) main()    93 
7.4 運行照片馬賽克生成程序    94
7.5 小結(jié)    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 創(chuàng)建由隨機圓組成的分片    106 
8.3.2 重復分片    107 
8.3.3 創(chuàng)建裸眼立體畫    108 
8.3.4 提供命令行參數(shù)    109 
8.4 運行裸眼立體畫生成程序    109 
8.5 小結(jié)    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 輔助函數(shù)    129 
9.4 運行 OpenGL 應(yīng)用程序    130 
9.5 小結(jié)    130 
9.6 實驗    130 
9.7 完整代碼    131 
第 10 章 圓環(huán)面上的康威生命游戲    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 將網(wǎng)格映射到圓環(huán)面    141 
10.2 需求    142 
10.3 代碼    142 
10.3.1 渲染圓環(huán)面    142 
10.3.2 實現(xiàn)康威生命游戲模擬    148 
10.3.3 創(chuàng)建相機   149 
10.3.4 整合代碼   151 
10.4 運行三維版康威生命游戲模擬    153 
10.5 小結(jié)    154 
10.6 實驗    155 
10.7 完整的圓環(huán)面渲染代碼    155 
10.8 完整的康威生命游戲模擬代碼    160 
10.9 完整的相機創(chuàng)建代碼    161 
10.10 RenderWindow 類的完整代碼    162 
第 11 章 體渲染    166 
11.1 工作原理    166 
11.1.1 數(shù)據(jù)格式    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 實現(xiàn)體光線投射算法    176 
11.3.4 顯示二維切片    180 
11.3.5 整合代碼    183 
11.4 運行程序    185 
11.5 小結(jié)    185 
11.6 實驗    185 
11.7 完整的三維紋理生成代碼    186 
11.8 完整的光線生成代碼    187 
11.9 完整的體光線投射算法代碼    192 
11.10 顯示二維切片的完整代碼    195 
11.11 完整的主文件代碼    198 
第五部分 玩轉(zhuǎn)硬件 
第 12 章 在樹莓派 Pico 上實現(xiàn)Karplus-Strong 算法    202 
12.1 工作原理    203 
12.1.1 輸入和輸出    203 
12.1.2 I2S 協(xié)議    204 
12.2 需求    205 
12.2.1 組裝硬件    205 
12.2.2 安裝 MicroPython    207 
12.3 代碼    207 
12.3.1 設(shè)置    207 
12.3.2 生成音符    208 
12.3.3 播放音頻    210 
12.3.4 編寫函數(shù) main()    211 
12.4 運行程序    212 
12.5 小結(jié)    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 在樹莓派上安裝系統(tǒng)和軟件    224 
13.2.2 搭建激光秀裝置    225 
13.2.3 連接硬件   226 
13.3 代碼    228 
13.3.1 設(shè)置    228 
13.3.2 控制硬件   229 
13.3.3 處理音頻   230 
13.3.4 測試電機   233 
13.3.5 整合代碼   234 
13.4 運行激光音樂秀程序    235 
13.5 小結(jié)    236 
13.6 實驗    236 
13.7 完整代碼    237 
第 14 章 物聯(lián)網(wǎng)花園    242 
14.1 工作原理    242 
14.1.1 低功耗藍牙    243 
14.1.2 Web 框架 Bottle    245 
14.1.3 SQLite 數(shù)據(jù)庫    246 
14.2 需求    247 
14.2.1 在樹莓派上安裝系統(tǒng)和軟件    247 
14.2.2 安裝 CircuitPython    247
14.2.3 設(shè)置 IFTTT 服務(wù)    248 
14.3 代碼    249 
14.3.1 CircuitPython 代碼    249 
14.3.2 BLE 掃描器代碼    252 
14.3.3 Web 服務(wù)器代碼    258 
14.3.4 主程序文件    264 
14.4 運行物聯(lián)網(wǎng)花園程序    266 
14.5 小結(jié)    267 
14.6 實驗    267 
14.7 完整的 CircuitPython 代碼    268 
14.8 完整的 BLE 掃描器代碼    270 
14.9 完整的 Python Web 服務(wù)器代碼    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 運行語音識別系統(tǒng)    301 
15.6 小結(jié)    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 設(shè)置樹莓派    312 
B.1 安裝操作系統(tǒng)    312 
B.2 測試連接    314 
B.3 使用 SSH 登錄樹莓派    315 
B.4 安裝 Python 模塊    316 
B.5 遠程使用 Visual Studio Code    316