-----------------------------------------
圖片放大特效
table樣式
 <style scoped> img[alt="Alt1"]{ background: rgba(255, 255, 255, 0); position: absolute; top: 10%; left: 10%; /* transform: translate(-50%, -50%); */ width: 200px; /* 調整圖片寬度 */ height: auto; /* 保持原始比例 */ padding:0; margin:0; z-index: 1; } img[alt="Alt2"]{ background: rgba(255, 255, 255, 0); position: absolute; top: 10%; left: 75%; /* transform: translate(-50%, -50%); */ width: 200px; /* 調整圖片寬度 */ height: auto; /* 保持原始比例 */ padding:0; margin:0; z-index: 2; } </style>

- [數學相關內建函式](#數學相關內建函式) - [字串與串列操作](#字串與串列操作) - [進階內建函式](#進階內建函式)
- [Python模組的優勢](#python模組的優勢) - [Python模組的三大類型](#python模組的三大類型) - [常用內建模組介紹](#常用內建模組介紹)
- [方法一:基本匯入](#方法一基本匯入) - [方法二:匯入特定功能](#方法二匯入特定功能) - [方法三:使用別名](#方法三使用別名) - [方法四:匯入所有功能-不建議](#方法四匯入所有功能-不建議)
- [建立你的第一個模組](#建立你的第一個模組) - [使用自定義模組](#使用自定義模組) - [模組組織結構](#模組組織結構) - [character_tools.py 範例](#charactertools.py-範例) - [整合多個模組](#整合多個模組)
- [常用的Python套件](#常用的python套件) - [requirements.txt](#requirementstxt)
- [第一個圖表:折線圖](#第一個圖表折線圖) - [柱狀圖:角色屬性比較](#柱狀圖角色屬性比較) - [圓餅圖:技能使用分布](#圓餅圖技能使用分布) - [散點圖:怪物分布圖](#散點圖怪物分布圖) - [進階應用:多子圖布局](#進階應用多子圖布局) - [儲存圖表](#儲存圖表)
- [進階挑戰](#💡-進階挑戰)
- [🧠 運算思維總整理](#🧠-運算思維總整理) - [模組化思維 (Modularization)](#模組化思維-modularization) - [資料視覺化思維 (Data Visualization)](#資料視覺化思維-data-visualization)
 <style scoped> img[alt="Alt1"]{ background: rgba(255, 255, 255, 0); position: absolute; top: 15%; right: 3%; /* transform: translate(-50%, -50%); */ width: 300px; /* 調整圖片寬度 */ height: auto; /* 保持原始比例 */ padding:0; margin:0; z-index: 1; } </style>
- 🖼️ 用Tkinter製作GUI視窗程式
### 常用的內建函式

```python # 給模組取個簡短的別名 import matplotlib.pyplot as plt import numpy as np import pandas as pd # 使用別名(業界慣例) data = np.array([1, 2, 3, 4, 5]) plt.plot(data) plt.show() # 也可以給函式取別名 from math import sqrt as square_root result = square_root(16) ```
### 什麼是pip?
--- ## 🖼️ Tkinter GUI介面入門 ### 第一個視窗程式 ```python import tkinter as tk # 創建主視窗 window = tk.Tk() window.title("我的第一個GUI程式 🎮") window.geometry("400x300") # 寬x高 # 加入標籤 label = tk.Label(window, text="歡迎來到冒險世界!", font=("Arial", 16), fg="blue") label.pack(pady=20) # pady是上下邊距 # 啟動視窗(進入事件迴圈) window.mainloop() ``` --- ### 常用GUI元件 | 元件 | 用途 | 語法 | |------|------|------| | `Label` | 顯示文字或圖片 | `tk.Label(window, text="...")` | | `Button` | 可點擊的按鈕 | `tk.Button(window, text="...")` | | `Entry` | 單行輸入框 | `tk.Entry(window)` | | `Text` | 多行文字框 | `tk.Text(window)` | | `Frame` | 容器,組織元件 | `tk.Frame(window)` | | `Canvas` | 繪圖畫布 | `tk.Canvas(window)` | --- ### 加入按鈕互動 ```python import tkinter as tk def on_click(): """按鈕點擊事件""" label.config(text="按鈕被點擊了!✨") counter.set(counter.get() + 1) count_label.config(text=f"點擊次數:{counter.get()}") # 創建視窗 window = tk.Tk() window.title("互動程式 🎯") window.geometry("400x300") # 標籤 label = tk.Label(window, text="點擊下方按鈕", font=("Arial", 14)) label.pack(pady=20) # 計數器變數 counter = tk.IntVar(value=0) count_label = tk.Label(window, text="點擊次數:0", font=("Arial", 12)) count_label.pack(pady=10) # 按鈕 button = tk.Button(window, text="點我!", command=on_click, font=("Arial", 12), bg="lightblue", width=15, height=2) button.pack(pady=20) window.mainloop() ``` --- ### 輸入框與顯示 ```python import tkinter as tk def greet_user(): """處理使用者輸入""" name = entry.get() # 取得輸入內容 if name: result_label.config(text=f"哈囉,{name}!歡迎冒險!🎉") else: result_label.config(text="請輸入你的名字!", fg="red") # 創建視窗 window = tk.Tk() window.title("角色命名 ✏️") window.geometry("400x250") # 提示標籤 prompt_label = tk.Label(window, text="請輸入你的角色名稱:", font=("Arial", 12)) prompt_label.pack(pady=20) # 輸入框 entry = tk.Entry(window, font=("Arial", 12), width=30) entry.pack(pady=10) # 確認按鈕 button = tk.Button(window, text="確認", command=greet_user, font=("Arial", 11), bg="lightgreen", width=10) button.pack(pady=10) # 結果顯示標籤 result_label = tk.Label(window, text="", font=("Arial", 13), fg="blue") result_label.pack(pady=20) window.mainloop() ``` --- ### 完整範例:角色屬性面板 ```python import tkinter as tk class CharacterPanel: def __init__(self): self.window = tk.Tk() self.window.title("角色屬性面板 ⚔️") self.window.geometry("500x400") # 角色資料 self.hp = 100 self.mp = 50 self.level = 1 self.create_widgets() def create_widgets(self): """創建所有GUI元件""" # 標題 title = tk.Label(self.window, text="勇者屬性", font=("Arial", 18, "bold")) title.pack(pady=20) # 屬性顯示框架 info_frame = tk.Frame(self.window) info_frame.pack(pady=10) # HP標籤 self.hp_label = tk.Label(info_frame, text=f"❤️ HP: {self.hp}/100", font=("Arial", 14)) self.hp_label.grid(row=0, column=0, padx=20, pady=5) # MP標籤 self.mp_label = tk.Label(info_frame, text=f"💙 MP: {self.mp}/50", font=("Arial", 14)) self.mp_label.grid(row=1, column=0, padx=20, pady=5) # 等級標籤 self.level_label = tk.Label(info_frame, text=f"⭐ Level: {self.level}", font=("Arial", 14)) self.level_label.grid(row=2, column=0, padx=20, pady=5) # 按鈕框架 button_frame = tk.Frame(self.window) button_frame.pack(pady=30) # 治療按鈕 heal_btn = tk.Button(button_frame, text="治療 +20HP", command=self.heal, bg="lightgreen", width=12, font=("Arial", 10)) heal_btn.grid(row=0, column=0, padx=10) # 使用魔法按鈕 magic_btn = tk.Button(button_frame, text="魔法 -10MP", command=self.use_magic, bg="lightblue", width=12, font=("Arial", 10)) magic_btn.grid(row=0, column=1, padx=10) # 升級按鈕 levelup_btn = tk.Button(button_frame, text="升級", command=self.level_up, bg="gold", width=25, font=("Arial", 10)) levelup_btn.grid(row=1, column=0, columnspan=2, pady=10) def heal(self): """治療功能""" self.hp = min(100, self.hp + 20) self.update_display() def use_magic(self): """使用魔法""" if self.mp >= 10: self.mp -= 10 self.update_display() else: tk.messagebox.showwarning("MP不足", "魔法值不夠了!") def level_up(self): """角色升級""" self.level += 1 self.hp = 100 self.mp = 50 self.update_display() tk.messagebox.showinfo("升級", f"恭喜升到 Lv.{self.level}!") def update_display(self): """更新顯示""" self.hp_label.config(text=f"❤️ HP: {self.hp}/100") self.mp_label.config(text=f"💙 MP: {self.mp}/50") self.level_label.config(text=f"⭐ Level: {self.level}") def run(self): """執行程式""" self.window.mainloop() # 執行程式 if __name__ == "__main__": app = CharacterPanel() app.run() ```
--- ### 抽象化思維 (Abstraction) **從具體到抽象的過程:** ```python # 具體實作 hp = 100 mp = 50 name = "勇者" # ↓ 抽象化為函式 def create_character(name, hp, mp): return {"name": name, "hp": hp, "mp": mp} # ↓ 再抽象化為模組 # character_tools.py def create_character(name, job, level=1): """通用的角色創建函式""" stats = calculate_stats(job, level) return { "name": name, "job": job, "level": level, "hp": stats["hp"], "mp": stats["mp"] } ``` --- ### 介面設計思維 (Interface Design) **好的模組設計原則:** ```python # ✅ 好的設計:清晰的介面 import character_tools hero = character_tools.create_character("亞瑟", "騎士", 5) character_tools.show_status(hero) character_tools.level_up(hero) # ❌ 不好的設計:複雜的使用方式 hero = {"n": "亞瑟", "j": "騎士", "l": 5, "h": 500, "m": 250} print(f"名:{hero['n']} 職:{hero['j']} 級:{hero['l']}") hero['l'] += 1 hero['h'] = 100 * hero['l'] ``` **介面設計要點:** - 📝 **命名清楚**:函式名稱要一看就懂 - 📖 **文件完整**:加上docstring說明 - 🎯 **功能單一**:一個函式做好一件事 - 🔒 **減少參數**:參數越少越好用
--- ### GUI設計思維 (User Interface Thinking) **以使用者為中心的設計:** ``` 使用者體驗考量: ┌─────────────────────────────┐ │ 1. 直觀性 → 按鈕功能一目了然 │ │ 2. 回饋性 → 操作後有明確反應 │ │ 3. 容錯性 → 防呆設計,避免錯誤│ │ 4. 一致性 → 風格、邏輯要統一 │ └─────────────────────────────┘ ``` **範例:** ```python # ✅ 好的設計 def on_click(): result = process_data() if result: show_success_message() else: show_error_message("處理失敗,請檢查輸入") # ❌ 不好的設計 def on_click(): process_data() # 沒有回饋,使用者不知道是否成功 ```
✅ **GUI程式設計** - 建立視窗應用程式 - 處理使用者互動事件 - 設計友善的使用者介面
--- ### 模組化的威力 💪 **沒有模組化:** ```python # 所有程式碼都混在一起,難以維護 def main(): # 500行程式碼... # 角色、戰鬥、物品全部混在一起 pass ``` **有模組化:** ```python # 主程式:簡潔清晰 import character_tools import battle_system import item_manager def main(): hero = character_tools.create_character("勇者", "戰士") enemy = battle_system.spawn_enemy("哥布林") result = battle_system.fight(hero, enemy) if result == "win": item_manager.add_item(hero, "寶劍") ```
--- ### 從工具使用者到工具創造者 🛠️ ``` 第一階段:使用別人的工具 └─ import random, math, datetime 第二階段:組合現有工具 └─ 用matplotlib繪製圖表,用tkinter做介面 第三階段:創造自己的工具 ⭐ └─ 寫出自己的模組,分享給其他人使用 第四階段:工具生態系統 └─ 發布到PyPI,全世界都能用你的套件! ``` **你現在正處於第二到第三階段之間!** 🎉 --- ### 下週預告 🔮 **更進階的主題:** - 📂 檔案讀寫與資料處理 - 🐛 錯誤處理與除錯技巧 - 🎯 物件導向程式設計入門 - 🌐 網路爬蟲與API應用 **持續精進:** - 多寫自己的模組 - 嘗試更多視覺化專案 - 設計更多互動程式 - 閱讀別人的程式碼
--- ### 📝 **選項一:基礎練習** (適合初學者) #### 🎯 任務:打造個人化工具模組 **目標:** 建立一個 `my_tools.py` 模組,包含至少3個實用函式 **範例函式:** 1. **BMI計算器** ```python def calculate_bmi(weight, height): """計算BMI值並回傳健康建議""" pass ``` 2. **溫度轉換器** ```python def celsius_to_fahrenheit(celsius): """攝氏轉華氏""" pass def fahrenheit_to_celsius(fahrenheit): """華氏轉攝氏""" pass ``` 3. **密碼強度檢查** ```python def check_password_strength(password): """檢查密碼強度(長度、大小寫、數字、特殊字元)""" pass ``` **要求:** - ✅ 每個函式要有docstring說明 - ✅ 寫一個測試程式使用這些函式 - ✅ 加上適當的錯誤處理 --- ### 🔧 **選項二:進階應用** (有點挑戰性) #### 🎯 任務:成績管理系統 **目標:** 建立一個完整的成績管理系統,包含模組化設計和視覺化 **專案結構:** ``` grade_system/ ├── main.py # 主程式 ├── student_manager.py # 學生管理模組 ├── grade_calculator.py # 成績計算模組 ├── data_visualizer.py # 資料視覺化模組 └── gui_interface.py # GUI介面(選擇性) ``` **功能需求:** 1. **student_manager.py** - 新增學生資料 - 修改學生成績 - 刪除學生資料 - 查詢學生成績 2. **grade_calculator.py** - 計算平均分數 - 計算最高/最低分 - 統計及格/不及格人數 - 成績排名 3. **data_visualizer.py** - 繪製成績分布直方圖 - 繪製科目成績比較圖 - 繪製及格率圓餅圖 4. **main.py**(範例) ```python import student_manager as sm import grade_calculator as gc import data_visualizer as dv # 新增學生 sm.add_student("小明", {"國文": 85, "英文": 90, "數學": 78}) sm.add_student("小華", {"國文": 92, "英文": 88, "數學": 95}) # 計算統計 avg = gc.calculate_average() print(f"全班平均:{avg}") # 視覺化 dv.plot_grade_distribution() dv.plot_subject_comparison() ``` **額外挑戰:** - 🎨 加入Tkinter GUI介面 - 💾 資料持久化(存檔/讀檔) - 📊 更多視覺化圖表 --- ### 🚀 **選項三:創意發揮** (自由度高) #### 🎯 任務:創造你的專屬應用 **選擇一個你感興趣的主題,設計一個完整的應用程式!** **靈感來源:** 1. **🎮 小遊戲** - 猜數字遊戲(加入GUI和統計圖表) - 井字遊戲(Tic-Tac-Toe) - 打磚塊遊戲 2. **📊 資料分析工具** - 個人記帳本(支出分析圖表) - 健身追蹤器(體重/運動量記錄) - 學習時間統計工具 3. **🛠️ 實用工具** - 待辦事項管理器 - 簡易計算機(有GUI介面) - 檔案整理工具 4. **🎨 創意專案** - 隨機抽籤程式 - 問卷調查系統 - 簡易聊天機器人 **設計要求:** - ✅ 至少使用3個模組(可以自己寫或import) - ✅ 包含視覺化元素(圖表或GUI) - ✅ 程式碼要模組化、有註解 - ✅ 寫一份README.md說明如何使用 **範例專案結構:** ``` my_project/ ├── README.md # 專案說明 ├── main.py # 主程式 ├── core_functions.py # 核心功能模組 ├── ui_interface.py # 使用者介面 ├── data_handler.py # 資料處理 └── requirements.txt # 需要的套件 ``` --- ### 📤 繳交方式 **所有選項都需要:** 1. 📁 完整的程式碼檔案 2. 📸 執行結果截圖(至少3張) 3. 📝 簡短的心得報告(200字以上) - 你做了什麼? - 遇到什麼困難? - 學到了什麼? **截止日期:** 下週上課前 **加分項目:** - 🌟 程式碼註解完整 - 🌟 使用Git版本控制 - 🌟 設計精美的使用者介面 - 🌟 功能創新有創意