114學年度下學期|電腦程式與計算分析(二)CP & CA
WEEK 8 期中考複習 NOTE(Python 進階一~六)
高分必過重點整理 💻🐍🧮🔥一句話主線
期中考真正的主線,不是把每個語法零碎背起來,而是看到題目後,立刻判斷它屬於哪一類資料處理問題,然後套用對應模板穩定解出來。
1) 期中考範圍主線總整理
依照你前面的課程進度,期中考前主要都還在 Python 程式設計-進階 的內容,所以核心範圍大致可整理成:
- Week 1–3:Python 基本到進階語法整合
- Week 4:檔案處理、模組化、遞迴、多層資料結構
- Week 5:排序、搜尋、進階資料處理、演算法入門模板
- Week 6:國定假日前後的統整複習
- Week 7:綜合題拆解、函式整合、除錯與模板化
也就是說,這次期中考最可能考的,不是艱深 AI 演算法,而是下面這些高頻主線:
Part A|Python 基本結構與函式
- 輸入輸出
- 型別轉換
- 函式 function
- print vs return
- 模組化 main 架構
Part B|常見資料結構
- list
- dict
- string
- 二維 list
- dict + list 綜合應用
Part C|常見資料處理流程
- 排序 sorting
- 搜尋 searching
- 統計 counting
- 篩選 filtering
- 去重複 remove duplicates
Part D|進階主題
- 檔案處理
- 遞迴 recursion
- list comprehension
- 綜合題拆解
- 除錯 debugging
2) 期中考最重要觀念
(1) 考試不是考你炫技,而是考你選對模板
很多 Python 題目表面不同,但本質其實都很像。
例如:
- 看到很多資料,要先想 list
- 看到次數統計,要先想 dict
- 看到排名或大小順序,要先想 sorting
- 看到找某元素或位置,要先想 searching
- 看到重複處理邏輯,要先想 function
- 看到多層資料,就要注意 索引層數
- 看到可重複拆小的問題,要想 recursion
所以期中考最高分的關鍵,不是背很多,而是:
先分類,再下手。
(2) 很多題目不是不會,而是死在小地方
Python 題最常見的失分,不是大方向不懂,而是:
- split() 後忘記轉 int
- print() 和 return 混淆
- sort() 和 sorted() 混淆
- dict key 不存在
- 二維 list 索引寫錯
- 遞迴漏掉 base case
- 排序條件 key 寫錯
- 縮排錯一層
所以考前最重要的一句話是:
模板要熟,細節更要穩。
3) 期中必考主線 A:函式 Function
1. 函式是整份考卷的骨架
從前面幾週一路看下來,你會發現 Python 題目只要稍微長一點,就很適合拆成函式。
為什麼函式重要?
因為它可以讓你:
- 邏輯更清楚
- 程式更短
- 更容易測試
- 更容易除錯
- 更容易重複使用
2. 基本模板一定要熟
def solve(data):
# 處理邏輯
return result
搭配主程式:
data = input()
result = solve(data) print(result)
3. print 和 return 一定要分清楚
print()
只是顯示結果。
return
是把值傳出去,讓外面能繼續使用。
這是期中最愛考、也最容易錯的點。
4. 經典架構
def get_data():
return list(map(int, input().split()))
def solve(nums): return max(nums) - min(nums)
def main(): nums = get_data()
print(solve(nums))
main()
5. 必考陷阱
- 函式沒寫 return
- 以為有 print() 就等於有回傳
- 函式拆了但參數沒傳對
- 忘記呼叫 main()
4) 期中必考主線 B:List / Dict / String
A. List
1. List 幾乎一定考
最常用來:
- 存資料
- 排序
- 搜尋
- 切片
- 統計
- 篩選
2. 必會操作
nums = [3, 1, 4, 2]
print(nums[0]) print(nums[-1]) print(nums[1:3]) nums.append(5) nums.sort()
3. 常見模板
多整數輸入
nums = list(map(int, input().split()))
總和 / 平均
total = sum(nums)
avg = total / len(nums)
篩選偶數
evens = [x for x in nums if x % 2 == 0]
4. 必考陷阱
- 索引從 0 開始
- nums[3] 可能越界
- sort() 直接改原資料
- 切片右邊不包含
B. Dict
1. Dict 最常用在計數
這是超高頻題型:
- 統計單字次數
- 統計字元次數
- 統計成績分佈
- 統計數字出現次數
2. 最常考模板
items = input().split()
count = {} for x in items: count[x] = count.get(x, 0) + 1
print(count)
3. items() 很重要
for k, v in count.items():
print(k, v)
4. 必考陷阱
- count[x] += 1 前沒初始化
- 取不存在 key 會錯
- 計數完不會轉成排序結果
C. String
1. 字串題很常搭配輸入處理
最常見操作:
- strip()
- split()
- replace()
- lower()
- upper()
- [::-1]
2. 超高頻模板
反轉字串
s = input().strip()
print(s[::-1])
判斷回文
s = input().strip()
print(s == s[::-1])
數字字串轉整數串列
nums = list(map(int, input().split()))
3. 必考陷阱
- split() 後仍是字串
- 字串不能直接改單一字元
- 忘記 strip() 導致換行殘留
5) 期中必考主線 C:排序與搜尋
A. 排序 Sorting
1. sort() 和 sorted() 一定要分清楚
sort()
改原 list。
sorted()
回傳新 list,不改原資料。
2. 經典模板
由小到大
nums.sort()
由大到小
nums.sort(reverse=True)
依字串長度排序
sorted(words, key=len)
依 tuple 第二項排序
sorted(data, key=lambda x: x[1], reverse=True)
3. 排序高頻題
- 成績由高到低
- 名字依長度排序
- 統計後依次數排序
- Top k 題型
4. 必考陷阱
- x = nums.sort() 會得到 None
- reverse=True 忘記寫
- key=lambda x: x[0] 和 x[1] 混掉
B. 搜尋 Searching
1. 必會操作
- in
- index()
- max()
- min()
- 線性搜尋
2. 經典模板
檢查是否存在
if target in nums:
print(nums.index(target))
else: print(-1)
線性搜尋
def linear_search(nums, target):
for i in range(len(nums)):
if nums[i] == target:
return i
return -1
3. 必考陷阱
- index() 找不到會報錯
- 手動找最大值時初值亂設
- 找到後忘記停止
6) 期中必考主線 D:檔案、遞迴、模組化
A. 檔案處理
1. 最推薦寫法
with open("data.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip())
2. 必背觀念
- "r":讀
- "w":覆蓋寫入
- "a":追加
- read():整份
- readline():一行
- readlines():每行一個元素的 list
3. 必考陷阱
- 檔案內容進來通常是字串
- \n 沒去掉
- "w" 會覆蓋原檔
B. 遞迴 Recursion
1. 核心只有兩件事
- base case
- recursive case
2. 階乘模板
def factorial(n):
if n <= 1:
return 1
return n * factorial(n - 1)
3. 必考陷阱
- 沒有終止條件
- 問題沒有縮小
- 少了 return
C. 模組化
1. 最穩架構
def get_data():
return list(map(int, input().split()))
def solve(nums): return sum(nums)
def main(): nums = get_data()
print(solve(nums))
main()
2. import 基本觀念
import math
print(math.sqrt(16))
3. 必考陷阱
- 變數名和模組名衝突
- math.sqrt() 和 sqrt() 混用
7) 期中必考主線 E:綜合題拆解
1. 綜合題標準流程
看到較長題目時,先拆成:
Step 1:輸入
是單一值、list、多行資料,還是檔案?
Step 2:整理
需要轉 int 嗎?需要 split 嗎?需要存成 dict 嗎?
Step 3:核心處理
是要排序?搜尋?統計?篩選?去重複?
Step 4:輸出
輸出一個值,還是一整列結果?
2. 經典綜合題模板
統計單字次數並排序
words = input().split()
count = {} for w in words: count[w] = count.get(w, 0) + 1
result = sorted(count.items(), key=lambda x: (-x[1], x[0])) for word, freq in result: print(word, freq)
這題一次整合了:
- split
- dict 計數
- items()
- sorted
- lambda
- 多條件排序
3. 綜合題最容易輸的點
- 題目沒拆就直接寫
- 資料型別沒先轉好
- 函式分工不清
- 排序條件錯
- 回傳值錯
8) 期中考最常考的大題分類
類型 1:基本輸入處理題
常考:
- int(input())
- input().split()
- list(map(int, input().split()))
類型 2:函式封裝題
常考:
- 寫一個函式完成某功能
- 回傳結果
- 主程式呼叫函式
類型 3:list / string 操作題
常考:
- 總和、平均
- 反轉
- 回文
- 篩選偶數
- 最大最小
類型 4:dict 計數題
常考:
- 單字次數
- 字元次數
- 出現最多次元素
類型 5:排序題
常考:
- 數值排序
- 字串長度排序
- tuple / 成績排序
類型 6:搜尋題
常考:
- 檢查是否存在
- 找索引
- 線性搜尋
- 找最大最小
類型 7:綜合資料處理題
常考:
- 多步驟整理
- 計數後排序
- 二維資料處理
- 去重複保留順序
類型 8:檔案或遞迴題
若老師有教,通常會出基本型,不會太誇張。
9) 期中考前最容易失分的地方總整理
Part A|輸入與型別
1. split() 後忘記轉 int
2. 字串和整數混用
3. 多筆輸入格式看錯
Part B|函式
1. print() 和 return 混淆
2. 函式沒回傳值
3. 參數沒傳進去
Part C|資料結構
1. list 索引越界
2. dict key 不存在
3. 二維 list 索引層數錯
Part D|排序搜尋
1. sort() 和 sorted() 混淆
2. index() 找不到報錯
3. reverse=True 忘記
4. key 條件寫錯
Part E|遞迴與檔案
1. 遞迴漏掉 base case
2. 檔案內容當成數字直接算
3. "w" 和 "a" 模式搞混
10) 期中考前最後速背模板區
這一區考前一定要能默寫。
模板 1:多整數輸入
nums = list(map(int, input().split()))
模板 2:函式封裝
def solve(nums):
return max(nums) - min(nums)
模板 3:dict 計數
count = {}
for x in items: count[x] = count.get(x, 0) + 1
模板 4:排序
nums.sort()
nums.sort(reverse=True) sorted(words, key=len) sorted(data, key=lambda x: x[1], reverse=True)
模板 5:搜尋
if target in nums:
print(nums.index(target))
else: print(-1)
模板 6:list comprehension
evens = [x for x in nums if x % 2 == 0]
模板 7:遞迴
def f(n):
if n <= 1:
return 1
return n * f(n - 1)
模板 8:檔案處理
with open("data.txt", "r", encoding="utf-8") as file:
for line in file:
print(line.strip())
11) 期中考作答 SOP
這段很重要,考前背這個就很有用。
Step 1:先分類題型
不要急著寫。
Step 2:先寫輸入模板
把資料型別先處理對。
Step 3:決定資料結構
這題該用 list、dict、string 還是二維 list?
Step 4:套對應模板
排序、搜尋、計數、遞迴、檔案,各有固定套路。
Step 5:最後檢查
- 有沒有 return
- 有沒有型別錯
- 有沒有排序方向錯
- 有沒有索引越界
- 有沒有縮排錯
12) 期中考前 1 分鐘速讀版
這次期中考最重要的,不是把所有 Python 語法重新看一遍,而是記住每一類題目的辨識方式與固定模板。
函式重點在 print 和 return 的差別;
資料結構重點在 list、dict、string 的用途;
資料處理重點在排序、搜尋、統計與篩選;
進階題重點在檔案、遞迴與綜合題拆解。
真正高分關鍵,是看到題目先分類,再套模板,不要一開始就寫亂。
13) 一句收尾
期中考真正決勝點,不是你背多少語法,而是你能不能在 3 秒內看出這題該用哪一種 Python 模板。





















