官术网_书友最值得收藏!

前言

歡迎閱讀本書!本書提供15個令人興奮的項目,旨在鼓勵讀者探索Python編程世界。這些項目涵蓋各種主題,如繪制繁花曲線圖案、進行三維渲染、讓激光圖案隨音樂起舞,以及使用機器學習識別語音等。除本身具有的趣味性外,這些項目還提供了很大的擴展空間,為讀者探索自己的創意提供跳板。

本書為誰而寫

本書是為想通過編程來理解和探索創意的人編寫的,閱讀本書需要了解基本的Python語法和編程概念,并熟悉高中數學。在每個項目中,我將竭盡全力詮釋所需的數學知識。

本書并非Python入門教程,不介紹基礎知識,而是通過一系列重要項目演示如何使用Python解決各種實際問題。在完成這些項目的過程中,你將探索Python編程語言的玄妙之處,并學習如何使用一些深受歡迎的Python庫。更重要的是,你將學習如何將問題化整為零、設計出解決問題的算法并使用Python從零開始實現解決方案。

一些實際問題解決起來可能很難,因為它們通常是開放性的,要求你具備眾多領域的專業知識,但Python提供了幫助你解決問題的工具。在成為專家級程序員的路途中,克服困難、找到實際問題的解決方案是最重要的。

本書涵蓋的內容

下面快速瀏覽一下本書的內容。

第一部分包含幾個幫助你熱身的項目。

第1章“科赫雪花”,介紹使用遞歸函數和海龜繪圖法繪制有趣的分形圖案。

第2章“繁花曲線”,介紹使用參數方程和海龜繪圖法繪制類似于萬花尺生成的曲線。

第二部分包含多個使用數學模型模擬真實現象的項目。

第3章“康威生命游戲”,介紹使用NumPy和Matplotlib實現著名的“元胞自動機”模型,根據幾個簡單規則生成不斷進化的模擬生命系統。

第4章“使用Karplus-Strong算法生成泛音”,介紹如何模擬彈撥樂器的聲音,并使用PyAudio播放這些聲音。

第5章“群體行為模擬”,介紹使用NumPy和Matplotlib實現Boids算法,并模擬鳥群的行為。

第三部分的項目介紹如何使用Python讀取和操作二維圖像。

第6章“文本圖形”,介紹Python圖像庫(Python Imaging Library,PIL)的模塊Pillow,演示如何將圖像轉換為文本圖形。

第7章“照片馬賽克”,介紹將一組較小的圖像拼接在一起,創建較大的可識別圖像。

第8章“裸眼立體畫”,介紹利用深度貼圖和像素操作賦予二維圖像立體效果。

第四部分介紹如何使用著色器和OpenGL庫,基于圖形處理單元(Graphics Processing Unit,GPU)快速而高效地渲染三維圖形。

第9章“理解OpenGL”,介紹有關如何使用OpenGL創建簡單三維圖形的基礎知識。

第10章“圓環面上的康威生命游戲”,介紹如何在三維環面上實現模擬生命系統。

第11章“體渲染”,介紹用于渲染體數據的體光線投射算法—— 一種常用于醫學成像領域(如MRI和CT)的技術。

最后,第五部分利用樹莓派和其他電子元件來介紹如何在嵌入式系統中使用Python進行編程。

第12章“在樹莓派Pico上實現Karplus-Strong算法”,介紹如何組裝可演奏的電子樂器,并使用MicroPython在微控制器樹莓派Pico上實現Karplus-Strong算法。

第13章“樹莓派激光音樂秀”,介紹如何在樹莓派中使用Python控制兩個旋轉鏡片和一束激光,從而生成隨音樂起舞的激光秀。

第14章“物聯網花園”,介紹使用低功耗藍牙將樹莓派與運行CircuitPython的Adafruit硬件連接起來,搭建一個對花園溫度和濕度進行監控的物聯網系統。

第15章“樹莓派音頻機器學習”,介紹如何在樹莓派中實現語音識別系統,帶你進入激動人心的TensorFlow機器學習領域。

每章都有“實驗”一節,提供如何擴展該章項目或進一步探索相關主題的建議。

本版新增內容

本版包含5個新項目,其中包括第1章“科赫雪花”和第10章“圓環面上的康威生命游戲”。此外,最重要的修訂在硬件部分,本版專注于基于樹莓派的系統,不再涉及Arduino。因此,第五部分的每個項目要么是全新的(第12章、第14章和第15章),要么做了全面修訂(第13章)。通過使用樹莓派,本書簡化了硬件項目的組裝過程,確保專注于Python編程,而不再需要在Python和Arduino編程語言(一種C++版本)之間切換。通過閱讀修訂后的第五部分,讀者還將體驗MicroPython和CircuitPython編程——兩個針對資源有限的嵌入式系統做了優化的Python版本。

本版的其他重要修訂如下。

? 第4章播放WAV文件時,使用PyAudio替代Pygame。

? 第7章為照片馬賽克查找最佳圖像匹配時,對線性查找算法和k-d樹數據結構的性能做了比較。

? 第8章新增介紹如何創建用于生成裸眼立體畫的自定義深度貼圖。

? 附錄A新增介紹如何使用Anaconda簡化Python安裝。

除這些具體修訂外,還對全書進行了審校和修正,并基于第1版出版后Python發生的變化對代碼做了必要的修訂。

為何使用Python

Python是一種非常適合用來探索編程的語言。作為一種多范式語言,它在程序編寫方式方面具有很大的靈活性。可將Python作為腳本語言用于執行代碼,可將其作為過程型語言用于將程序組織成一組相互調用的函數,還可將其作為面向對象語言,從而使用類、繼承和模塊來打造層次結構。這種靈活性讓用戶能夠根據項目的需求選擇最合適的編程風格。

使用C或C++等更傳統的語言進行開發時,必須在運行前編譯并鏈接代碼,但使用Python時,編寫好代碼后就可直接運行(在幕后,Python將代碼編譯為中間字節碼,再由Python解釋器運行,但這些過程對用戶來說是透明的)。在使用Python進行實踐時,反復修改并運行代碼的過程非常簡便。

Python提供了為數不多的幾個簡單而強大的數據結構,因此只要熟悉字符串、列表、元組、字典、列表推導式及基本控制結構(如for和while循環),便在學習Python的道路上邁出了巨大的一步。Python語法簡潔而富有表現力,只需編寫幾行代碼就能執行復雜的操作。熟悉Python內置模塊和第三方模塊后,便掌握了一整套解決實際問題(如本書中介紹的項目)的工具。可采用標準方式在Python中調用C/C++代碼(或者反過來),并且無論要實現什么功能,幾乎都能找到相應的Python庫,這讓用戶能夠在較大的項目中輕松地將Python和其他語言模塊結合起來使用。正因為如此,Python被認為是一種絕佳的“膠水語言”,讓用戶能夠輕松地將各種軟件組件組合在一起。第四部分的三維圖形項目表明,可將Python同類似C語言的OpenGL著色語言結合起來使用。此外,第 14 章將 HTML(超文本標記語言)、CSS(串聯樣式表)和JavaScript結合起來使用,為物聯網花園監控器創建Web界面。在開發實際軟件項目時,通常需要結合使用多種軟件技術,Python非常適合用于開發這樣的分層架構。

Python還提供了一個方便的工具——Python解釋器,讓用戶能夠輕松地檢查代碼語法、執行快速計算,乃至對正在開發的代碼進行測試。編寫Python代碼時,我會同時打開3個窗口:文本編輯器、Shell和Python解釋器。在編輯器中開發代碼時,我將函數或類導入解釋器,并在開發的同時進行測試。

在代碼中使用新模塊前,我還會先使用解釋器來熟悉它們。例如,開發第14章的物聯網花園項目時,我要測試數據庫模塊sqlite3。為此,我打開Python解釋器并嘗試執行如下代碼,確保自己知道如何創建和添加數據庫記錄。

>>> import sqlite3
>>> con = sqlite3.connect('test.db')
>>> cur = con.cursor()
>>> cur.execute("CREATE TABLE sensor_data (TS datetime, ID text, VAL numeric)")
>>> for i in range(10):
... cur.execute("INSERT into sensor_data VALUES (datetime('now'),'ABC', ?)", (i, ))
>>> con.commit()
>>> con.close()
>>> exit()

為確認上述做法可行,我執行如下代碼,以檢索前面添加的部分數據:

>>> con = sqlite3.connect('test.db')
>>> cur = con.cursor()
>>> cur.execute("SELECT * FROM sensor_data WHERE VAL > 5")
>>> print(cur.fetchall())
[('2021- 10- 16 13:01:22', 'ABC', 6), ('2021- 10- 16 13:01:22', 'ABC', 7),
('2021- 10- 16 13:01:22', 'ABC', 8), ('2021- 10- 16 13:01:22', 'ABC', 9)]

這個示例說明了Python解釋器這個強大工具在開發中的實際用途:要快速進行實驗,無須編寫完整的程序,打開解釋器就可開始。這只是我喜愛Python(同時認為你也會喜愛它)的眾多原因之一。

示例代碼

對于本書中每個項目的代碼,我都竭盡所能、力圖條分縷析地做出詳盡的剖析。你可手動輸入代碼,也可按“資源與支持”頁所述方式獲取本書所有程序的完整代碼。

接下來,我將帶領你完成眾多令人興奮的項目,但愿你玩得和我開發時一樣開心。別忘了探索每個項目中的實驗。祝你在閱讀本書的過程中擁有愉快的編程時光!

主站蜘蛛池模板: 永顺县| 泾川县| 灌云县| 金沙县| 禄丰县| 卢龙县| 土默特左旗| 桑植县| 思南县| 嘉鱼县| 临朐县| 阳谷县| 明光市| 太保市| 亚东县| 福清市| 哈密市| 新干县| 澳门| 北海市| 马山县| 武城县| 阿合奇县| 垦利县| 教育| 汶上县| 五家渠市| 营口市| 乌兰浩特市| 武山县| 昭通市| 马鞍山市| 蒙山县| 阳曲县| 沧州市| 息烽县| 乌拉特后旗| 齐河县| 合作市| 岱山县| 铁力市|