Python 學習目標規劃書
總體目標:在六個月內,從零基礎掌握 Python 編程,具備獨立開發簡單應用程式(如命令列工具、簡單 Web 應用或數據分析腳本)的能力,並為進階主題(如機器學習、進階 Web 開發)打下基礎。
前提條件:
- 每天學習 6 小時(可分為 2-3 段,如上午 3 小時、下午 3 小時)。
- 使用 MacBook Pro,安裝 Python 3.11+(免費):
- 訪問 Python 官方網站,下載適用於 macOS 的最新版本(建議 3.11 或以上)。
- 執行下載的 .pkg 安裝程式,遵循提示完成安裝。
- 打開終端(Terminal),輸入
python3 --version
檢查是否安裝成功(應顯示版本號)。
- macOS 內建 Python 2.x,務必使用
python3
和 pip3
命令運行 Python 3 和安裝模組。
- 使用免費 IDE VS Code 或線上編輯器 Replit:
- 下載並安裝 VS Code。
- 在 VS Code 中安裝 Python 擴展(搜尋 “Python”,選擇由 Microsoft 提供的擴展)。
- 配置 VS Code 使用 MacBook Pro 的 Python 3 解釋器(在終端輸入
which python3
獲取路徑,然後在 VS Code 中選擇該路徑)。
- 或者使用 Replit 進行線上編程,無需本地安裝。
第一階段:1 個月(基礎入門)
目標:掌握 Python 基礎語法,理解基本編程概念,能編寫簡單命令列程式(如計算器、文字處理工具)。
每日時間分配:理論學習(2 小時)、實作練習(3 小時)、複習與總結(1 小時)。
成果:能編寫 50-100 行簡單程式,熟悉語法和資料結構,處理簡單檔案操作。
第一階段測驗試題(10 題)
1. 變數與資料型別:請寫一個程式,定義兩個變數(一個整數、一個字串),並將它們相加後列印結果。
答案:
a = 5
b = "10"
result = a + int(b)
print(result) # 輸出:15
2. 字串操作:給定字串 s = “Hello, World!”,請提取 “World” 並列印。
答案:
s = "Hello, World!"
print(s[7:12]) # 輸出:World
3. 條件語句:寫一個程式,檢查輸入數字是否為偶數(使用 input())。
答案:
num = int(input("請輸入一個數字:"))
if num % 2 == 0:
print("是偶數")
else:
print("不是偶數")
4. 迴圈:列印 1 到 10 的所有奇數。
答案:
for i in range(1, 11, 2):
print(i) # 輸出:1, 3, 5, 7, 9
5. 函數:寫一個函數計算給定數字的平方。
答案:
def square(num):
return num * num
print(square(4)) # 輸出:16
6. 列表操作:給定列表 lst = [1, 2, 3, 4],將每個元素加倍並列印新列表。
答案:
lst = [1, 2, 3, 4]
new_lst = [x * 2 for x in lst]
print(new_lst) # 輸出:[2, 4, 6, 8]
7. 字典:創建一個字典儲存兩個人員的姓名和年齡,列印某人的年齡。
答案:
people = {"Alice": 25, "Bob": 30}
print(people["Alice"]) # 輸出:25
8. 元組:創建一個元組儲存 3 個數字,計算它們的總和。
答案:
numbers = (1, 2, 3)
print(sum(numbers)) # 輸出:6
9. 檔案寫入:將字串 “Hello, Python!” 寫入檔案 “test.txt”。
答案:
with open("test.txt", "w") as file:
file.write("Hello, Python!")
10. 異常處理:寫一個程式處理輸入非數字的錯誤。
答案:
try:
num = int(input("請輸入一個數字:"))
print(num)
except ValueError:
print("請輸入有效數字!")
第二階段:3 個月(進階基礎與實作)
目標:深入理解進階概念,熟悉模組,掌握數據結構與簡單算法,完成中型項目(如爬蟲或數據分析工具)。
每日時間分配:理論學習(1.5 小時)、實作練習(3 小時)、項目開發與複習(1.5 小時)。
成果:能進行資料處理和爬蟲,完成中型項目,熟悉 OOP 和模組。
第二階段測驗試題(10 題)
1. OOP:定義一個 Dog 類,包含 name 屬性和 bark() 方法,創建一個實例並調用方法。
答案:
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
return f"{self.name} says Woof!"
dog = Dog("Max")
print(dog.bark()) # 輸出:Max says Woof!
2. 繼承:創建一個 Animal 類和一個繼承它的 Cat 類,Cat 有 meow() 方法。
答案:
class Animal:
def __init__(self, name):
self.name = name
class Cat(Animal):
def meow(self):
return f"{self.name} says Meow!"
cat = Cat("Luna")
print(cat.meow()) # 輸出:Luna says Meow!
3. 模組:使用 random 模組生成 1 到 100 的隨機數。
答案:
import random
print(random.randint(1, 100))
4. 堆疊:使用列表實現堆疊,執行 push 和 pop 操作。
答案:
stack = []
stack.append(1) # push
stack.append(2) # push
print(stack.pop()) # 輸出:2
print(stack) # 輸出:[1]
5. 佇列:使用列表模擬佇列,執行 enqueue 和 dequeue。
答案:
queue = []
queue.append(1) # enqueue
queue.append(2) # enqueue
print(queue.pop(0)) # dequeue, 輸出:1
print(queue) # 輸出:[2]
6. 冒泡排序:對列表 [5, 2, 8, 1, 9] 進行冒泡排序。
答案:
lst = [5, 2, 8, 1, 9]
for i in range(len(lst)):
for j in range(len(lst)-i-1):
if lst[j] > lst[j+1]:
lst[j], lst[j+1] = lst[j+1], lst[j]
print(lst) # 輸出:[1, 2, 5, 8, 9]
7. 正則表達式:從字串 “email: test@example.com” 中提取 email 地址。
答案:
import re
text = "email: test@example.com"
email = re.findall(r'[\w\.-]+@[\w\.-]+', text)
print(email) # 輸出:['test@example.com']
8. 爬蟲:使用 requests 獲取一個網頁的標題(假設 URL 為 “http://example.com”)。
答案:
import requests
from bs4 import BeautifulSoup
response = requests.get("http://example.com")
soup = BeautifulSoup(response.text, "html.parser")
print(soup.title.text) # 輸出:Example Domain
9. Pandas:創建一個包含姓名和年齡的 DataFrame,篩選年齡大於 25 的人。
答案:
import pandas as pd
data = {"name": ["Alice", "Bob", "Charlie"], "age": [25, 30, 22]}
df = pd.DataFrame(data)
print(df[df["age"] > 25]) # 輸出:name=Bob, age=30
10. Numpy:創建一個 3×3 的全 1 陣列並計算其總和。
答案:
import numpy as np
arr = np.ones((3, 3))
print(arr.sum()) # 輸出:9.0
第三階段:6 個月(中級應用與專案)
目標:掌握 Web 開發基礎,熟悉資料庫操作,完成功能完整項目(如 Web 應用或自動化腳本),準備進階學習。
每日時間分配:理論學習(1 小時)、實作練習(2 小時)、項目開發(2 小時)、複習與優化(1 小時)。
成果:完成功能完整 Web 應用或腳本,熟悉 Web 開發和版本控制,具備獨立解決問題能力。
第三階段測驗試題(10 題)
1. Flask 路由:創建一個 Flask 應用,包含一個顯示 “Hello, Flask!” 的路由。
答案:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Hello, Flask!"
if __name__ == '__main__':
app.run()
2. Flask 模板:創建一個 Flask 應用,使用模板顯示用戶輸入的名字。
答案:
from flask import Flask, render_template, request
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
name = request.args.get('name', 'Guest')
return render_template('index.html', name=name)
# index.html: Hello, {{ name }}!
3. SQLite:創建一個 SQLite 資料庫,插入一筆資料(姓名、年齡)。
答案:
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)')
cursor.execute('INSERT INTO users (name, age) VALUES (?, ?)', ('Alice', 25))
conn.commit()
conn.close()
4. Django 模型:定義一個 Django 模型表示書籍(包含標題和作者)。
答案:
from django.db import models
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.CharField(max_length=50)
5. 多執行緒:使用 threading 模組並行執行兩個函數,各自列印數字 1-5。
答案:
import threading
def print_numbers():
for i in range(1, 6):
print(i)
t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_numbers)
t1.start()
t2.start()
t1.join()
t2.join()
6. API 請求:使用 requests 模組從公開 API 獲取 JSON 數據並列印第一筆資料。
答案:
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts')
data = response.json()
print(data[0]) # 輸出:第一筆 JSON 資料
7. Git 命令:初始化一個 Git 倉庫並提交一個檔案 “app.py”。
答案:
git init
git add app.py
git commit -m "Initial commit"
8. 資料庫查詢:從 SQLite 資料庫查詢年齡大於 25 的用戶。
答案:
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute('SELECT * FROM users WHERE age > 25')
print(cursor.fetchall())
conn.close()
9. Flask 表單:創建一個 Flask 應用,處理 POST 表單提交並返回輸入內容。
答案:
from flask import Flask, request
app = Flask(__name__)
@app.route('/', methods=['POST'])
def submit():
data = request.form['input']
return f"You submitted: {data}"
10. 項目整合:寫一個程式結合 API 和 SQLite,將 API 數據儲存到資料庫。
答案:
import requests
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS posts (id INTEGER, title TEXT)')
response = requests.get('https://jsonplaceholder.typicode.com/posts')
data = response.json()
cursor.execute('INSERT INTO posts (id, title) VALUES (?, ?)', (data[0]['id'], data[0]['title']))
conn.commit()
conn.close()
免費資源總結
- 基礎學習:
- 進階學習:
- Web 開發與項目:
- 練習平台:
注意事項
- 學習方法:每天記錄筆記,使用 Notion 或文字檔案整理知識點。
- 實作為主:多寫程式碼,通過練習題和項目鞏固知識。
- 問題解決:查閱 Stack Overflow 或 Google。
- 進度調整:根據個人進度靈活調整,若某部分耗時較長,可延長該階段。
- 測驗使用:完成每個階段後,嘗試獨立解答試題,參考答案檢查正確性。