項目地址:https://github.com/DeqianBai/Python-Project/tree/master
(大家可以先star這個倉庫,把程序下載下來先在自己的機器上運行一下,看一下效果)
此倉庫中放置的一系列的python小項目,均是我本人親自敲過的,有的來自各種書本,有的是網上收集的。敲這些項目是為了提高自己的編程能力以及對python的掌握。
“世事洞明皆學問,人情練達即文章”,熟能生巧,勤能補拙,加油
10. 3D建模
在這個項目中,我們將了解
如何開發可擴展的數據結構來表示場景中的對象。
如何使用Composite設計模式和基于樹的數據結構可以輕松遍歷場景進行渲染,并允許我們添加新類型的節點而不會增加復雜性。
利用這種數據結構將設計渲染到屏幕上,并在場景圖的遍歷中操縱OpenGL矩陣。為應用程序級事件構建了一個非常簡單的回調系統,并使用它來封裝操作系統事件的處理。
討論了光線對象碰撞檢測的可能實現,以及正確性,復雜性和性能之間的權衡。
最后,我們實現了操作場景內容的方法。
你可以在生產3D軟件中找到這些相同的基本構建塊。場景圖結構和相對坐標空間可以在許多類型的3D圖形應用程序中找到,從CAD工具到游戲引擎。該項目的一個主要簡化是在用戶界面中。生產3D建模器應該具有完整的用戶界面,這將需要更復雜的事件系統而不是我們簡單的回調系統。
9. 3D,2D 動畫
9.1.1 使用python,matplotlib.pyplot和animation.artistanimation在一個圖中組合兩個2D動畫
9.1.2 使用python,matplotlib.pyplot和animation.timedanimation在一個圖中組合兩個2D動畫
9.2.1 使用python,matplotlib.pyplot和animation.artistanimation在一個圖中組合一個3D和兩個2D動畫
9.2.2 使用python,matplotlib.pyplot和animation.timedanimation在一個圖中組合一個3D和兩個2D動畫
參考:
- https://pythonmatplotlibtips.blogspot.com/2018/01/combine-two-2d-animations-in-one-figure-matplotlib-artistanimation.html
- https://pythonmatplotlibtips.blogspot.com/2018/01/combine-two-2d-animations-in-one-figure-matplotlib-timedanimation.html
- https://pythonmatplotlibtips.blogspot.com/2018/01/combine-3d-two-2d-animations-in-one-figure-timedanimation.html
- https://pythonmatplotlibtips.blogspot.com/2018/01/combine-3d-two-2d-animations-in-one-figure-artistdanimation.html
8. 三維立體畫
本項目將用 Python 創建一張三維立體畫。下面是本項目涉及的一些概念:
? 線性間距和深度知覺;
? 深度圖;
? 用 Pillow 創建和編輯圖像;
? 用 Pillow 繪制圖像。
該項目的代碼將遵循以下步驟:
1.讀入深度圖;
2.讀入一幅平鋪圖像或創建一個“隨機點”平鋪圖像;
3.通過重復平鋪圖像創建一幅新圖像。該圖像的尺寸與深度圖一致;
4.對新圖像中的每個像素,根據該像素相關聯的深度值,將它按比例地向
右移;
5.將三維立體畫寫入一個文件。
7. 類鳥群:仿真鳥群
本項目將利用 Reynolds 的 3 個規則,創建一個類鳥群,模擬 N 只鳥的群體行為,并畫出隨著時間的推移,它們的位置和運動方向。我們還會提供一個方法,向鳥群中添加一只鳥,以及一種驅散效果,可以用于研究群體的局部干擾效果。
模擬類鳥群的三大核心規則如下:
- 分離:保持類鳥個體之間的最小距離;
- 列隊:讓每個類鳥個體指向其局部同伴的平均移動方向;
- 內聚:讓每個類鳥個體朝其局部同伴的質量中心移動
對于群體中的所有類鳥個體,做以下幾件事:
- 應用三大核心規則;
- 應用所有附加規則;
- 應用所有邊界條件。
- 更新類鳥個體的位置和速度。
- 繪制新的位置和速度。
通過本項目,你將了解到 - 如何使用 numpy 數組,如何使用顯式循環,以及用整個數組上的 numpy
方法來提高計算速度。 - 利用 scipy.spatial 模塊來執行快速和方便的距離計算,實現了一個 matplotlib 技巧,利用兩個記號來表示個體的位置和方向。
-
最后,增加了UI 交互,可以按下鼠標按鈕來改變 matplotlib 的繪圖
項目運行時的效果圖
6. Conway 生命游戲
這個項目將創建一個 N×N 的細胞網格,通過應用 Conway 生命游戲的規則,模擬系統隨時間的演進。你將顯示每個時間段的游戲狀態,并提供一些方式將輸出保存到文件。你會設置系統的初始狀態,要么是隨機分布,要么是預先設計的圖案。該模擬由以下幾部分組成:
- 在一維或兩維空間中定義的屬性;
- 在模擬中的每一步,改變這種屬性的數學規則;
- 隨著系統的演進,顯示或記錄系統狀態的方式。
在 Conway 生命游戲中的細胞可以處于 ON 或 OFF 狀態。游戲從一個初始狀態開始,其中每個細胞分配一個狀態,數學規則決定其狀態如何隨時間而改變。Conway生命游戲中令人驚奇的是,只有 4 個簡單的規則,系統演進會產生行為極其復雜的圖案,仿佛它們是活的。圖案包括“滑翔機”,即在網格上滑動,“眨眼”,即閃爍ON 和 OFF,甚至還有復制圖案
該項目包含的一些主要概念:
- 利用 matplotlib imshow 來展示數據的二維網格;
- 利用 matplotlib 生成動畫;
- 使用 numpy 數組;
- 將%運算符用于邊界條件;
-
設置值的隨機分布。
Figure_1.png
5.萬花尺
使用Python來創建動畫,就像萬花尺一樣繪制曲線,我們的spiro.py程序將用Python和參數方程來描述程序的萬花尺齒輪的運動,并繪制曲線——螺旋線,我們可以將完成的畫圖保存為PNG圖像文件,并用命令行選項來指定參數或者生成隨機曲線。學習到的內容有:
- 使用Turtle模塊創建圖形
- 使用參數方程
- 利用數學方程來生成曲線
- 用線段來畫曲線
- 用定時器來生成圖像動畫
- 將圖形保存為圖像文件
4. 解析iTunes播放列表
目標是找到音樂收藏中重復的樂曲,確定播放列表之間共同的音軌,繪制音軌時長的分布圖,以及歌曲評分和時長之間的關系圖。
學習到的內容有:
- XML和屬性列表(p-list)文件:
- Python 列表和字典
- 使用Python 的set duix
- 直方圖和散點圖
- 創建和保存數據文件
3. 使用API
在這個項目中,你將學到:
- 如何使用API來編寫獨立的程序,它們自動采集所需的數據并對其進行可視化;
- 如何在圖表中添加可單擊的鏈接
- 在圖表中添加添加自定義工具提示
- 使用GitHub API來探索GitHub上星級最高的Python項目;
-
如何使用requests包來自動執行GitHub API調用,以及如何處理調用的結果
使用API
2. 下載數據
在這個項目中你將學到:
- 如何使用網上的數據集;
- 如何處理CSV和JSON文件,以及如何提取你感興趣的數據;
- 如何使用matplotlib來處理以往的天氣數據,包括如何使用模塊 datetime ,以及如何在同一個圖表中繪制多個數據系列;
- 如何使用Pygal繪制呈現各國數據的世界地圖,以及如何設置Pygal地圖和圖表的樣式。
- 如何使用模塊json來訪問以JSON格式存儲的交易收盤價數據,并使用Pygal繪制圖形以探索價格變化的周期性,以及如何將Pygal圖形組合成數據儀表盤
有了使用CSV和JSON文件的經驗后,你將能夠處理幾乎任何要分析的數據。大多數在線數
據集都可以以這兩種格式中的一種或兩種下載。學習使用這兩種格式為學習使用其他格式的數據做好了準備。
1. 數據可視化
在這個項目中你將學到:
- 如何生成數據集以及如何對其進行可視化;
- 如何使用matplotlib創建簡單的圖表,以及如何使用散點圖來探索隨機漫步過程;
- 如何使用Pygal來創建直方圖,以及如何使用直方圖來探索同時擲兩個面數不同的骰子的結果