一起玩Python程式:新手寫程式也可以這麼簡單!

Week 15: 課程檢視、回顧與統整

張傑帆

National Taiwan University

目錄

🎯 本週學習目標

  • 系統回顧 第11-14週的核心概念與技術要點
  • 整合應用 模組化、檔案處理、資料分析與物件導向
  • 實戰演練 透過綜合專案體驗完整開發流程
  • 強化思維 鞏固運算思維四大核心能力

準備好一起複習與統整,邁向Python大師之路了嗎?

Let's review! 🐍✨

📚 Week 11 回顧:模組的無限可能

🔑 核心概念

  • 模組化設計:將程式拆分為獨立、可重用的模組
  • 套件管理:使用pip安裝與管理外部套件
  • 視覺化工具:Matplotlib繪製圖表
  • GUI開發:Tkinter製作圖形介面

💡 Week 11:關鍵技術回顧

# 模組的三種匯入方式
import math                    # 完整匯入
from math import sqrt          # 部分匯入
from math import *             # 全部匯入(不建議)

# 自定義模組範例
# filepath: calculator.py
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

# filepath: main.py
import calculator
result = calculator.add(5, 3)

📈 Matplotlib 基礎回顧

import matplotlib.pyplot as plt

# 繪製線圖
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]
plt.plot(x, y, marker='o', color='blue')
plt.title('簡單線圖')
plt.xlabel('X軸')
plt.ylabel('Y軸')
plt.show()

# 繪製柱狀圖
categories = ['A', 'B', 'C']
values = [10, 20, 15]
plt.bar(categories, values)
plt.show()

🖼️ Tkinter GUI 回顧

import tkinter as tk

def say_hello():
    label.config(text="Hello, Python!")

window = tk.Tk()
window.title("我的第一個GUI")

button = tk.Button(window, text="點我", command=say_hello)
button.pack()

label = tk.Label(window, text="")
label.pack()

window.mainloop()

📁 Week 12 回顧:檔案處理基礎

🔑 核心概念

  • 檔案開啟與關閉:使用 with 語法確保資源安全
  • 讀取操作:read(), readline(), readlines()
  • 寫入操作:write(), writelines()
  • 實作應用:個人日記系統

💡 Week 12:檔案操作技術

# 安全的檔案讀寫(使用 with)
with open('diary.txt', 'w', encoding='utf-8') as f:
    f.write('2024-01-15\n')
    f.write('今天學習了檔案處理!\n')

# 讀取檔案內容
with open('diary.txt', 'r', encoding='utf-8') as f:
    content = f.read()
    print(content)

# 逐行讀取
with open('diary.txt', 'r', encoding='utf-8') as f:
    for line in f:
        print(line.strip())

📔 日記系統實作回顧

# filepath: diary_system.py
import datetime

def add_diary_entry(content):
    today = datetime.date.today()
    with open('diary.txt', 'a', encoding='utf-8') as f:
        f.write(f"\n--- {today} ---\n")
        f.write(content + "\n")

def search_diary(keyword):
    with open('diary.txt', 'r', encoding='utf-8') as f:
        for line in f:
            if keyword in line:
                print(line.strip())

# 使用範例
add_diary_entry("今天學會了檔案處理!")
search_diary("檔案")

📊 Week 13 回顧:資料分析入門

🔑 核心概念

  • CSV格式:逗號分隔值檔案的讀寫
  • Pandas基礎:DataFrame 與 Series 資料結構
  • 資料分析:篩選、排序、統計計算
  • 實作應用:成績管理與統計分析

💡 Week 13:Pandas 核心操作

import pandas as pd

# 讀取CSV檔案
df = pd.read_csv('grades.csv')

# 基礎資料檢視
print(df.head())        # 顯示前5筆
print(df.info())        # 資料結構資訊
print(df.describe())    # 統計摘要

# 資料篩選
high_scores = df[df['成績'] >= 80]

# 資料排序
sorted_df = df.sort_values('成績', ascending=False)

# 統計計算
avg_score = df['成績'].mean()
max_score = df['成績'].max()

📈 成績分析視覺化

import pandas as pd
import matplotlib.pyplot as plt

# 讀取成績資料
df = pd.read_csv('grades.csv')

# 繪製成績分布圖
plt.figure(figsize=(10, 6))
plt.hist(df['成績'], bins=10, edgecolor='black')
plt.title('成績分布圖')
plt.xlabel('成績')
plt.ylabel('人數')
plt.show()

# 繪製科目平均分數比較
subject_avg = df.groupby('科目')['成績'].mean()
subject_avg.plot(kind='bar')
plt.title('各科平均成績')
plt.show()

🎮 Week 14 回顧:物件導向設計

🔑 核心概念

  • 類別與物件:使用 class 定義藍圖
  • 初始化方法__init__ 建構子
  • 屬性與方法:物件的狀態與行為
  • 實作應用:寶可夢圖鑑系統

💡 Week 14:物件導向基礎

class Pokemon:
    def __init__(self, name, type_, level, hp):
        self.name = name
        self.type = type_
        self.level = level
        self.hp = hp
        self.max_hp = hp
    
    def attack(self, target):
        damage = self.level * 5
        target.hp -= damage
        print(f"{self.name}攻擊{target.name},造成{damage}點傷害!")
    
    def heal(self):
        self.hp = min(self.hp + 20, self.max_hp)
        print(f"{self.name}恢復20點HP!")
    
    def evolve(self):
        if self.level >= 16:
            self.name = "進化型" + self.name
            self.max_hp += 20
            print(f"恭喜!{self.name}進化了!")

🗂️ 圖鑑系統設計

class Pokedex:
    def __init__(self):
        self.pokemons = {}
    
    def add_pokemon(self, pokemon):
        self.pokemons[pokemon.name] = pokemon
        print(f"已將{pokemon.name}加入圖鑑!")
    
    def search(self, name):
        if name in self.pokemons:
            p = self.pokemons[name]
            print(f"名稱: {p.name}")
            print(f"屬性: {p.type}")
            print(f"等級: {p.level}")
            print(f"HP: {p.hp}/{p.max_hp}")
        else:
            print("找不到這隻寶可夢!")
    
    def show_all(self):
        for pokemon in self.pokemons.values():
            print(f"{pokemon.name} (Lv.{pokemon.level})")

🔗綜合實戰:整合四週所學

現在讓我們整合所有技術,打造一個完整的寶可夢管理系統!

專案架構

  • 模組化設計(Week 11)
  • 檔案存取功能(Week 12)
  • 資料分析與視覺化(Week 13)
  • 物件導向設計(Week 14)

📦 專案結構設計

.
├── Pokemon.py
├── pokedex.py
├── main.py
├── diary_system.py
├── grades.csv
└── requirements.txt

🚀 專案實作:寶可夢管理系統

# filepath: main.py
from pokedex import Pokedex
from Pokemon import Pokemon
import pandas as pd
import matplotlib.pyplot as plt

# 初始化圖鑑
dex = Pokedex()

# 新增寶可夢
dex.add_pokemon(Pokemon("皮卡丘", "電", 12, 100))
dex.add_pokemon(Pokemon("妙蛙種子", "草", 8, 80))

# 顯示圖鑑
dex.show_all()

# 進行戰鬥
pikachu = dex.pokemons["皮卡丘"]
bulbasaur = dex.pokemons["妙蛙種子"]
pikachu.attack(bulbasaur)

# 恢復HP
pikachu.heal()

# 進化寶可夢
pikachu.evolve()

# 寫入檔案
with open('diary.txt', 'a', encoding='utf-8') as f:
    f.write('皮卡丘進化為雷丘\n')

dex.add_pokemon(Pokemon("噴火龍", "火", 20, 120))
dex.add_pokemon(Pokemon("傑尼龜", "水", 10, 90))
dex.add_pokemon(Pokemon("卡比獸", "一般", 25, 200))
dex.add_pokemon(Pokemon("耿鬼", "幽靈", 18, 85))
dex.add_pokemon(Pokemon("快龍", "龍", 30, 150))

# 將圖鑑中的寶可夢資料寫入CSV檔案
pokemon_data = []
for p in dex.pokemons.values():
    pokemon_data.append({
        '名稱': p.name,
        '屬性': p.type,
        '等級': p.level,
        'HP': p.hp,
        '最大HP': p.max_hp
    })

pokemon_df = pd.DataFrame(pokemon_data)
pokemon_df.to_csv('pokemon.csv', index=False)

# 讀取CSV檔案並分析
df_pokemon = pd.read_csv('pokemon.csv')
print(df_pokemon.describe())

# 繪製等級分布圖
plt.figure(figsize=(8, 5))
plt.hist(df_pokemon['等級'], bins=5, edgecolor='black')
plt.title('寶可夢等級分布')
plt.xlabel('等級')
plt.ylabel('數量')
plt.show()

🧠 運算思維總整理

  • 抽象化:用類別與模組封裝複雜邏輯
  • 模式識別:找出程式設計的共通結構
  • 問題分解:將大問題拆解成小模組
  • 演算法思維:設計資料處理與自動化流程

📝 本週練習

  1. 完成寶可夢圖鑑進化與存檔功能
  2. 分享你最喜歡的進階程式設計技巧

-----------------------------------------

圖片放大特效

table樣式