# 🐍 Python 彎路終結者

## x. 刷題
### 📚 學習資源
- **zerojudge**
- [**問題集**](https://zerojudge.tw/Problems)
- [**部分解答**](https://steam.oxxostudio.tw/category/python/zerojudge/about.html)
## 1. Python 基礎
### 🔎 目標
理解 Python 的基本語法與常見內建功能。
### 📌 學習內容
- 了解 Python 的運作方式與環境安裝
- 變數、資料型態(數字 `int` 、字串 `str`、列表 `list`、字典 `dict`、集合 `set` ...)
- 條件判斷(`if-else`)、迴圈(`for`, `while`)
- 內建函式與常見操作(`range()`, `zip()`, `enumerate()`, `len()`)
- 例外處理(`try-except-else-finally`)
### 📚 學習資源
- 📗 **橙式學院**
- [**練習課程**](https://mandarinbits.com/zh/)
- 📗 **良葛格**
- [**Python :: 起步走**](https://openhome.cc/zh-tw/python/basics/)
- 注意:[**簡介模組**](https://openhome.cc/zh-tw/python/basics/module/)可以等到 [Python 物件導向]再回頭看。
- [**Python :: 內建型態**](https://openhome.cc/zh-tw/python/built-in-types/)
- [**Python :: 基本運算**](https://openhome.cc/zh-tw/python/math-abc/)
- [**Python :: 流程語法**](https://openhome.cc/zh-tw/python/flow-control/)
- 重要:[**for-comprehension**](https://openhome.cc/zh-tw/python/flow-control/for-comprehension/)
- 📗 **ChatGPT**
- [**Python 函式、方法、類別大全**](https://chatgpt.com/)(試試看這樣問 ChatGPT)
- `請幫我整理出 Python 3.12 中類別 list 的所有方法`
- `請幫我整理出 Python 3.12 中所有內建類別(如 int, float 等等)`
- `請幫我整理出 Python 3.12 中所有內建函式(不含內建類別如 int, float 等等)`
## 2. Python 函式
### 🔎 目標
學習函式、列表推導式(list comprehension)、檔案操作,讓程式碼更具結構化與可讀性。
### 📌 學習內容
- 函式(定義函式 `def`、參數 `*args` / `**kwargs`)
- Lambda 表達式(`lambda x: x*x`)
- 函式式程式設計(`map`, `filter`)
- 列表推導式(`[i*i for i in range(1, 5)]`)
- 檔案讀寫(`open()`, `with`)
### 📚 學習資源
- 📗 **良葛格**
- [**Python :: 流程語法**](https://openhome.cc/zh-tw/python/flow-control/)
- 重要:[**for-comprehension**](https://openhome.cc/zh-tw/python/flow-control/for-comprehension/)(列表推導式)
- [**Python :: 函式入門**](https://openhome.cc/zh-tw/python/function/)
- 注意:[**yield**](https://openhome.cc/zh-tw/python/function/yield/#google_vignette)(generator)可以等到 [Python 物件導向]再回頭看。
- 📗 **IT 邦**
- [**Python 檔案操作**](https://ithelp.ithome.com.tw/articles/10347344)(打開、讀取、寫入檔案)
## 3. Python 物件導向
### 🔎 目標
理解為何要將邏輯抽象成「物件」,以及物件的老爸們「類別」的真正來歷。
### 📌 學習內容
- 類別 `class`、物件 `self`、建構子 `__init__`
- 方法(method)
- 封裝(為什麼不要讓物件內部所有東西,都能讓外面看光光?)
- 繼承(方法的重複利用!)
- 好的設計應該要基於抽象,而非基於具體
- 粒度要足夠細,才能像堆積木一樣,堆出各種作品
- 粒度又不能太細,要保留足夠的抽象(積木的形狀要出來),要不然就是一盤散沙
### 📚 學習資源
- 📗 **良葛格**
- [**Python :: 封裝**](https://openhome.cc/zh-tw/python/encapsulation/)
- `@property` 建議理解用法就好(原理與 meta-programming 相關)
- [**Python :: 繼承**](https://openhome.cc/zh-tw/python/inheritance/)
- [**Python :: meta-programming**](https://openhome.cc/zh-tw/python/meta-programming/) <mark>先不用學</mark>(對新手不友善)
- 很少人會學到這部分,但這是邁向「真正精通」 Python 的門檻
## 4. Python 模組
### 🔎 目標
學習利用模組,讓自己的程式能夠模組化。
<mark>函式就像工具</mark>,可能有片幾(鉗子)、踏普(螺絲攻)、羅賴把(螺絲起子)、A呀練幾(氣動板手)?\
<mark>模組就像是工具箱</mark>,它負責將「功能類似」的函式「整理」成一箱,供外部使用。
### 📌 學習內容
- 自訂模組
- 內建模組(`os`, `sys`, `random`, `datetime`, ...)
- 如何 `import` 模組
### 📚 學習資源
- **良葛格**
- 📗 [**Python :: 起步走 - 簡介模組**](https://openhome.cc/zh-tw/python/basics/module/)
- 📗 [**Python :: 模組**](https://openhome.cc/zh-tw/python/module-package/)
## 5. Python 套件管理
### 🔎 目標
學習白嫖別人現成的套件,不用什麼東西都要自己從零開始(building it from scratch)。
當很多模組兜在一塊時,就會組成一個套件。\
Python 之所以強大,其中一個關鍵點就是豐富的第三方套件(別人寫的),\
你幾乎可以找到任何功能的<mark>現成工具</mark>來使用,\
<mark>而不必自己「重造輪子」</mark>(reinventing the wheel)。
### 📌 學習內容
- 套件管理工具:`pip`
- 套件的安裝、解除安裝、`requirements.txt` 的輸出
- 套件菜單:`requirements.txt`
- 你的程式就像一道菜,若詳細記錄它的原材料(用到的套件,即依賴套件)有哪些,就能在任何廚房(不同電腦)去煮這道菜(安裝依賴套件並執行)
- 虛擬環境建立工具:`virtualenv`(<mark>要學,不然你的同事會恨你</mark>)
- 蛤...為什麼我要虛擬環境?全域環境安裝不就好了嗎?
- 某一天,你手上有很多專案,每個專案都用到了各式各樣的套件
- 若你選擇把每個專案的所有依賴套件通通全域環境安裝,就有很高機率遇到套件版本的衝突(嗯?什麼意思?來,詳細舉個例子給你聽)
- 套件版本的衝突(全域環境安裝)
1. 今天你的專案一號,它需要套件 A,於是你安裝了套件 A 版本 `1.7`。
2. 今天你的專案一號,它需要套件 B。
3. 套件 B 指定套件 A 版本 `>=1.5,<2.0`,因為它用到了這版的套件 A 裡的某些功能。
4. 太好了,你本來就有套件 A,而且還符合版本需求。於是你可以安心安裝套件 B
5. 今天你的專案二號,它需要套件 C。
7. 套件 C 指定套件 A 版本 `>=2.0`,因為它用到了這版的套件 A 裡的某些功能。
8. 套件 C 和套件 B 的<mark>依賴衝突</mark>了(找不到一個合理的套件 A 版本,讓 B 和 C 能共存)!
- 嗯...那有沒有什麼方法,可以讓專案一號和專案二號有「各自的環境」阿...
- 比如說,專案一號裡面的環境只裝套件 B 和套件 A `1.7`
- 比如說,專案二號裡面的環境只裝套件 C 和套件 A `2.1`
- 這樣 B 和 C 就不會打架了!
- 大聰明,你要的就是<mark>虛擬環境</mark>啊!
- 很多文章對於虛擬環境的解釋過於籠統或艱澀,不易新手理解,因而特此說明
- 現在你知道為什麼要學虛擬環境了
### 📚 學習資源
- 📗 **Max行銷誌**
- [**【Python 教學】pip install 指令大全**](https://www.maxlist.xyz/2019/07/13/pip-install-python/)
- 📗 **Medium**
- [**Python 的 Virtualenv 虛擬環境安裝與使用**](https://medium.com/ai-for-k12/python-%E7%9A%84-virtualenv-%E8%99%9B%E6%93%AC%E7%92%B0%E5%A2%83%E5%AE%89%E8%A3%9D%E8%88%87%E4%BD%BF%E7%94%A8-8645f5884aac)
### 📦 經典套件
紀錄那些超紅超夯的第三方套件,身為一個 🐍 開發者,聽到一定要跳起來。
#### 數據分析
- `numpy`:數值運算,提供高效的多維陣列處理。
- `pandas`:數據處理與分析,擅長處理表格數據(DataFrame)。
- `scipy`:科學計算,包含線性代數、積分、統計等功能。
#### 機器學習
- `scikit-learn`:經典機器學習演算法
- `tensorflow` / `keras`:深度學習框架,適用於神經網路模型訓練。
- `pytorch`:靈活且適合研究的深度學習框架。
#### 資料視覺化
- `matplotlib`:最基本的繪圖工具,提供 2D / 3D 圖表。
- `seaborn`:基於 matplotlib,提供更高級的統計視覺化。
#### 網站開發
- `flask`:輕量級 Web 框架,適合小型應用。
- `django`:全功能 Web 框架,內建 ORM、認證等功能。
#### 爬蟲
- `requests`:簡單好用的 HTTP 請求函式庫。
- `beautifulsoup4`:解析 HTML/XML,適合網頁爬取。
#### 自動化
- `pyautogui`:模擬鍵盤滑鼠操作。
- `selenium`:自動化瀏覽器操作,適用於爬蟲與測試。
#### 影像處理
+ `opencv-python`:電腦視覺處理,支援影像識別與特徵提取。
+ `pillow`:圖片處理,支援格式轉換、縮放等。
+ `pytesseract`:OCR 文字辨識。
#### 資料庫
+ `pymysql`:連接 MySQL 資料庫。
+ `psycopg2`:連接 PostgreSQL 資料庫。
+ `sqlalchemy`:ORM 框架。
## 6. 里程碑
### 🎆 讚哦
建議到這就可以開始<mark>你的第一個專案</mark>了!
### 📚 學習資源
- 📗 **steam 學習網**
- [**Python 範例集錦**](https://steam.oxxostudio.tw/category/python/info/example.html)
[刷題]: #x-刷題
[Python 基礎]: #1-Python-基礎
[Python 函式]: #2-Python-函式
[Python 物件導向]: #3-Python-物件導向
[Python 模組]: #4-Python-模組
[Python 套件管理]: #5-Python-套件管理
[里程碑]: #6-里程碑