============================================================
[0] 本週一句話主線
------------------------------------------------------------把程式寫成「可重用工具」:
Input/Output 模板 + 函式封裝 + 資料結構 + 例外處理
考試看到題目 -> 直接套模板。
------------------------------------------------------------
[1] 必考核心觀念(W1 高頻)
------------------------------------------------------------
(1.1) 型別與轉型(超常考)
- input() 永遠是 str
- 轉型:int(x), float(x)
- 除法:/ (浮點) 整除:// (整數)
- 浮點比較不要用 ==,改用:
abs(a - b) < 1e-9
(1.2) 資料結構必會
- list : append, extend, sort, slicing
- tuple : 不可變(安全資料包)
- dict : get, items, setdefault(查找/統計)
- set : 去重、交集、差集
------------------------------------------------------------
[2] 輸入處理模板庫(必背)
------------------------------------------------------------
(2.1) 單行多個數
a, b, c = map(int, input().split())
(2.2) 多行固定筆數
n = int(input())
arr = [int(input()) for _ in range(n)]
(2.3) 讀到 EOF(大量資料最常用)
import sys
data = sys.stdin.read().strip().split()
nums = list(map(float, data))
------------------------------------------------------------
[3] 解題結構模板(W1 核心)
------------------------------------------------------------
主程式只管 I/O,計算放函式(可重用、可測試)
def solve(data):
return result
def main():
import sys
data = sys.stdin.read().strip().split()
ans = solve(data)
print(ans)
if __name__ == "__main__":
main()
------------------------------------------------------------
[4] 例外處理(進階題常考)
------------------------------------------------------------
常見例外:
- ValueError : 轉型失敗
- ZeroDivisionError: 除以 0
- KeyError : dict 查不到 key(可用 get 避免)
範例:
try:
x = float(input())
y = 1 / x
except ValueError:
print("Input is not a number")
except ZeroDivisionError:
print("Division by zero")
------------------------------------------------------------
[5] W1 必收「小工具函式」(可重用)
------------------------------------------------------------
(5.1) 平均 / 最小 / 最大
def stats(arr):
n = len(arr)
if n == 0:
return 0.0, None, None
mean = sum(arr) / n
return mean, min(arr), max(arr)
(5.2) dict 計數(統計題必用)
def freq_count(items):
freq = {}
for x in items:
freq[x] = freq.get(x, 0) + 1
return freq
(5.3) 字串處理(split / strip / join)
s = " a,b,c "
parts = s.strip().split(",")
out = "-".join(parts)
------------------------------------------------------------
[6] W1 範例(可直接改作業/考題)
------------------------------------------------------------
(6.1) 平均與最大(含空資料保護)
def solve(nums):
if not nums:
return "EMPTY"
mean = sum(nums) / len(nums)
mx = max(nums)
return f"mean={mean:.4f}, max={mx:.4f}"
def main():
import sys
data = sys.stdin.read().strip().split()
nums = list(map(float, data)) if data else []
print(solve(nums))
if __name__ == "__main__":
main()
(6.2) 出現最多元素(Top-1)
def most_common(items):
freq = {}
for x in items:
freq[x] = freq.get(x, 0) + 1
best_item, best_cnt = None, -1
for k, v in freq.items():
if v > best_cnt:
best_item, best_cnt = k, v
return best_item, best_cnt
def main():
items = input().strip().split()
item, cnt = most_common(items)
print(item, cnt)
if __name__ == "__main__":
main()
------------------------------------------------------------
[7] 易錯點(扣分熱區)
------------------------------------------------------------
[ ] 忘記 input() 是 str -> 沒轉型
[ ] append vs extend 混用
[ ] freq[key] 查不到就炸 -> 改用 get
[ ] 浮點誤差:0.1 + 0.2 != 0.3
[ ] while 忘記更新條件 -> 無限迴圈
[ ] 函式忘記 return -> 變 None
------------------------------------------------------------
[8] 考前 10 分鐘速讀清單(必背 10 條)
------------------------------------------------------------
1) map(int, input().split())
2) slicing: a[i:j:k]
3) dict count: freq[x] = freq.get(x,0)+1
4) try/except ValueError, ZeroDivisionError
5) main() 管 I/O, solve() 管計算
6) 大量輸入: sys.stdin.read()
7) 浮點比較: abs(a-b) < 1e-9
8) enumerate()
9) set() 去重
10) f-string: f"{x:.4f}"




















