2025年12月31日 星期三

列表推導式應用

 d = '''

►  2025 (174)

►  2024 (155)

►  2023 (21)

►  2022 (49)

►  2021 (6)

►  2020 (7)

►  2019 (24)

►  2018 (17)

'''

d = d.strip().split('\n')

d = [int((i[:-1].split('('))[1]) for i in d]

print(d)

print(sum(d))


Output:

[174, 155, 21, 49, 6, 7, 24, 17]
453

2025年12月22日 星期一

賓果

 import random

d = list(range(1,25+1))

random.shuffle(d)

# print(d)



for i in range(0,25):

  print(d[i],end='\t')

  if (i+1)%5==0:print()

  

outs = [1,2,3,4,5,6,7,8,9,10]

outs = list(range(1,26))

outs = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]

for out in outs:

  for i in range(25):

    if d[i]==out:d[i]=-d[i]


print()

for i in range(0,25):

  print(d[i],end='\t')

  if (i+1)%5==0:print()

  

c = 0

for i in range(5):

  if d[0+5*i]<0 and d[1+5*i]<0 and d[2+5*i]<0 and d[3+5*i]<0 and d[4+5*i]<0:

    print(d[0+5*i],d[1+5*i],d[2+5*i],d[3+5*i],d[4+5*i])

    c = c + 1


for i in range(5):

  if d[0+i]<0 and d[5+i]<0 and d[10+i]<0 and d[15+i]<0 and d[20+i]<0 : 

    print(d[0+i],d[5+i],d[10+i],d[15+i],d[20+i])

    c = c + 1


if d[0]<0 and d[6]<0 and d[12]<0 and d[18]<0 and d[24]<0 : 

  print(d[0]<0,d[6],d[12],d[18],d[24] )

  c = c + 1

if d[4]<0 and d[8]<0 and d[12]<0 and d[16]<0 and d[20]<0 :

  print(d[4],d[8],d[12], d[16],d[20] )

  c = c + 1


print(c,'line')



Output:


19 22 18 6 4

5 3 9 1 7

25 12 17 15 10

20 2 14 24 13

21 8 11 23 16


-19 22 -18 -6 -4

-5 -3 -9 -1 -7

25 -12 -17 -15 -10

-20 -2 -14 24 -13

21 -8 -11 23 -16

-5 -3 -9 -1 -7

-18 -9 -17 -14 -11

-4 -7 -10 -13 -16

3 line

2025年11月15日 星期六

bfs 最簡版

 from collections import deque

g = {

    'a':['b','c'],

    'b':['d'],

    'c':['e','f'],

    'd':['g'],

    'e':[],

    'f':[],

    'g':[]    

}


def trav_bfs(g,n,v):

    q = deque([n])

    v.add(n)   

    while q:

        cnode = q.popleft()

        print(cnode,end=' ')

        for nn in g[cnode]:

            if nn not in v:

                v.add(nn)

                q.append(nn)

    

v = set()

n = 'a'

trav_bfs(g, n, v)

                

# a b c d e f g 

dfs 最簡版

 g = {

    'a':['b','c'],

    'b':['d'],

    'c':['e','f'],

    'd':['g'],

    'e':[],

    'f':[],

    'g':[]    

    }



def dfs_trav(g,n,v):

    v.add(n)

    print(n,end=' ')

    for nn in g[n]:

        if nn not in v:

            dfs_trav(g, nn, v)


v = set()

n = 'a'

dfs_trav(g, n, v)

執行結果
#a b d g c e f 

2025年11月6日 星期四

2025年10月14日 星期二

最大化最小距離(牛棚放牛問題)

# 例題 : # 題目: # 有 N 個牛棚位置(已排序),要放 K 頭牛, # 希望「任意兩頭牛之間的最小距離」最大化。 # 輸入: # ``` # 位置 = [1, 2, 8, 12, 17] # K = 3 # ``` # 期望輸出: # ``` # 最大化後的最小距離 = 7 # # 放在位置 1, 8, 17 # ``` # 思路: # 設最小距離為 d, # 若能成功放完 K 頭牛,代表 d 可行; # 否則 d 太大,需縮小。 # 用二分搜尋尋找最大的可行距離。 def can_place(a, k, d): count = 1 last = a[0] for x in a[1:]: if x-last >=d: count+=1 last=x if count==k: return True return False def max_min_d(a, k): a.sort() lo,hi = 0,a[-1]-a[0] while lo<=hi: m = (lo+hi)//2 if can_place(a,k,m): ans = m lo = m+1 else: hi = m-1 return ans print(max_min_d([1, 2, 8, 12, 17], 3)) # 7 # 重點概念: # 「距離越大越難放下」具有單調性 → 二分搜尋最大可行距離。

二分搜簡例

# 題目: # 某公司每天能完成 x 單位工作量,共有 n 項工作要完成。 # 請問至少要幾天才能做完? # 例如: # 每天完成量 = 3 # 總量 = 17 # 則答案為 6 天(因為 3×5=15 <17,3×6=18 ≥17)。 # 思路: # 天數越多 → 工作越可能完成, # 這是一個「單調可行性」問題。 def min_days(w,ws): lo,hi = 0,ws ans = hi while lo<=hi: m = (lo+hi)//2 if m * w ==ws: ans = m return ans elif m*w>ws: ans = m hi = m -1 else: lo = m +1 return ans print(min_days(3, 17)) # 6 print(min_days(5, 25)) # 5 print(min_days(15, 150)) # 10 print(min_days(105, 150000000000000000150000000000000)) # Output: # 6 # 5 # 10 # 1428571428571428572857142857143

最小可能的「最大段和」-- 二分搜應用

題目(Problem) 給定一個長度為 n 的正整數陣列 A[0..n-1],你要把它切成 恰好 k 段連續子陣列(k ≤ n)。定義每段的「段和」為該段元素總和。目標是最小化所有段和中的最大值。 必須保持原來順序、只能切割、段與段不可交錯(連續切段)。 回傳(或輸出)。 def can_split(A, k, cap): """在每段和 ≤ cap 的限制下,最少需要幾段;是否 ≤ k。""" segments = 1 cur = 0 for x in A: if cur + x <= cap: cur += x else: segments += 1 cur = x if segments > k: # 及早停止 return False return True # 需要的段數 ≤ k def minimize_largest_sum(A, k): lo, hi = max(A), sum(A) # 下界:至少要容得下最大元素;上界:全部一段 ans = hi while lo <= hi: mid = (lo + hi) // 2 if can_split(A, k, mid): # mid 可行 → 嘗試更小 ans = mid hi = mid - 1 else: # mid 不可行 → 增大容量 lo = mid + 1 return ans A ,k = [7, 2, 5, 10, 8], 2 print(minimize_largest_sum(A, k)) A ,k = [7, 2, 5, 10, 8], 3 print(minimize_largest_sum(A, k)) # Output: # 18 # 14

最小可能的「最大段和」暴力解

題目(Problem) 給定一個長度為 n 的正整數陣列 A[0..n-1],你要把它切成 恰好 k 段連續子陣列(k ≤ n)。定義每段的「段和」為該段元素總和。目標是最小化所有段和中的最大值。 必須保持原來順序、只能切割、段與段不可交錯(連續切段)。 回傳(或輸出)最小可能的「最大段和」。 例子 A = [7, 2, 5, 10, 8], k = 2 最佳切法是 [7, 2, 5] | [10, 8],兩段和分別為 14 與 18,最大為 18;證明不存在更小的可能,答案是 18。 a = [7, 2, 5, 10, 8] k = 2 minmax = float('inf') for i in range(0,5-1): left = a[:i+1] right = a[i+1:] print(left,right) if max(sum(left),sum(right))

二分搜應用簡例-求根號2

lo,hi = 0,2 m = (lo+hi)/2 while abs(m*m-2)>0.0000001: if m*m > 2: hi = m else: lo = m m = (lo+hi)/2 print(m) # Output: # 1.4142135381698608

2025年10月7日 星期二

適合初學者的暴力法-背包

import itertools weights = [2, 3, 4, 5] values = [3, 4, 5, 6] capacity = 8 vmax = 0 smax = [] for s in range(len(weights)+1): for c in itertools.combinations(weights, s): if sum(c)<=capacity: # print(c) v = 0 for j in c: v =v+ values[weights.index(j)] # print(v) if v > vmax: vmax = v smax = c print(vmax,smax) # Output: # 10 (3, 5)

2025年9月17日 星期三

使用深津式 框架 Prompt 範例

提示詞:

#Instructions
你是一位英文老師,負責解釋文法並設計練習題。

#Constraints
文章限制 200 字
使用繁體中文
每個例句附上翻譯

#Input
主題:被動語態(Passive Voice)的用法

#Output
簡單定義
三個例句(英文 + 中文翻譯)
兩題練習題(附答案)

AI輸出的示範結果

簡單定義
被動語態(Passive Voice)強調「動作的接受者」。
句型結構為:主詞 + be 動詞 + 過去分詞 (p.p.) + (by + 動作者)。
若動作者不重要,可省略 by 片語。

例句
The homework was finished by Tom.(這份作業被湯姆完成了。)
English is spoken in many countries.(英文在許多國家被使用。)
The window has been broken.(這扇窗戶已經被打破了。)

練習題
改寫成被動語態:The teacher teaches math.
答案:Math is taught by the teacher.

翻譯成英文:這本書是昨天出版的。
答案:The book was published yesterday.

使用 CO-STAR 框架的 Prompt 範例

提示詞:
 #Context(情境) 我正在準備英文考試,常常在作文中錯用被動語態,需要更清楚的解釋與練習。
 #Role(角色) 你是一位英文老師,專長是高中英文文法教學。 
 #Specific Question(具體問題) 請解釋「被動語態」的用法,並提供例句與練習題。
 #Format(格式) 
 	輸出需包含三部分: 
       1. 簡單定義 
       2. 三個例句(英文 + 中文翻譯) 
       3. 兩題練習題(附答案) 
 #Style(風格) 簡單、淺顯易懂,適合高中生。
 #Tone(語氣) 親切、鼓勵,像家教老師一樣。
 #Example(範例) 
   定義:現在完成式表示過去到現在的經驗。 
   例句:I have visited Japan twice.(我去過日本兩次。) 
   練習題:造 3 句現在完成式句子。 

 #Multi-step(多步驟)
   1. 先解釋文法規則
   2. 接著舉例句 
   3. 最後設計練習題


AI:
被動語態(Passive Voice)
簡單定義
  ● 結構:主詞 + be(依時態/人稱變化)+ 過去分詞 p.p.(+ by + 動作者)
  ● 功能:突出「動作的承受者」或「結果」,當動作者未知/不重要可省略 by + 人。
  ● 主動→被動三步驟:把受詞變主詞 → 動詞改 be + p.p. → 原主詞放 by 字片語或省略。

例句(英文 + 中文)
The bike was fixed (by the mechanic).
● 這台腳踏車被修好了(由技師)。

English is taught at our school.
● 我們學校有教授英文(英文被教授)。

The package has been delivered.
● 這個包裹已經被送達。

練習題(附答案)
改寫成被動:Someone stole my wallet yesterday.
● 答案:My wallet was stolen yesterday.

翻成英文(用被動):這座橋是 1990 年建成的。
● 答案:The bridge was built in 1990.

● 小提醒:
  ● 只能及物動詞可做被動(有受詞)。
  ● 時態由 be 動詞承擔(如 is/was/has been/will be),p.p. 不變。
  ● 若想更口語或不強調動作者,直接省略 by + 人。

CO-STAR 框架

CO-STAR Prompt 框架八大元素
Context(情境)
● 提供任務背景,讓 AI 知道「為什麼要做這件事」。
● 範例:你正在準備英文考試,需要針對文法弱點進行加強。

Role(角色)
● 指定 AI 扮演的身份,影響其專業角度。
● 範例:你是一位英文老師,專長是高中英文文法教學。

Specific Question(具體問題)
● 清楚寫出任務或問題,避免籠統。
● 範例:請解釋現在完成式與過去完成式的差異。

Format(格式)
● 規定輸出結構(清單、表格、段落等)。
● 範例:請以「定義、例句、練習題」三部分呈現。

Style(風格)
● 控制輸出的表達方式。
● 範例:簡單、淺顯易懂,適合高中生。

Tone(語氣)
● 決定回答的態度與氛圍。
● 範例:鼓勵式、親切、像家教老師一樣。

Example(範例)
● 提供參考輸出,讓 AI 模仿格式與風格。
● 範例:
  定義:現在完成式表示過去到現在的經驗。  
  例句:I have visited Japan twice.(我去過日本兩次。)  
  練習題:造 3 句現在完成式句子。  
Multi-step(多步驟)
● 要求 AI 先思考步驟,再生成答案,避免跳過推理。
● 範例:
  第一步:列出文法規則
  第二步:舉例句
  第三步:設計練習題

小結
深津式 Prompt 側重結構簡單、好記,快速清楚。
CO-STAR Prompt 更完整,適合複雜任務或需要一致風格的場景。
建議:教學場合用深津式方便學生上手,專業產出(教材、文章、專案)則可採用 CO-STAR。

深津式 Prompt 例

深津式 Prompt 例

Prompt:
#Instructions 你是一位程式設計老師,負責解釋程式並設計練習題。 

#Constraints - 文章限制 200 字 - 使用繁體中文 - 每個程式碼附上解釋 

#Input 主題:二分搜尋與線性搜尋的差異 

#Output 1. 簡單定義 2. 三個例子(程長碼 + 中文解釋) 3. 練習題與答案


ChatGPT:

二分搜尋與線性搜尋的差異

簡單定義
線性搜尋:從頭到尾逐一比對,適用於未排序的資料,時間複雜度 O(n)。
二分搜尋:針對排序好的資料,透過中點切分逐步縮小範圍,時間複雜度 O(log n)。

例子
線性搜尋
def linear_search(arr, target):
    for i, v in enumerate(arr):
        if v == target:
            return i
    return -1

中文解釋:逐一比對陣列中的元素,直到找到目標或遍歷結束。

二分搜尋
def binary_search(arr, target):
    left, right = 0, len(arr)-1
    while left <= right:
        mid = (left + right)//2
        if arr[mid] == target:
            return mid
        elif arr[mid] < target:
            left = mid + 1
        else:
            right = mid - 1
    return -1

中文解釋:每次取中點,比大小後縮小搜尋範圍。


比較範例

輸入 arr = [2,4,6,8,10], target=8

線性搜尋:第 4 次找到

二分搜尋:第 2 次找到


練習題

題目:給一個排序好的陣列 [1,3,5,7,9,11],用二分搜尋法找數字 7,過程中比較了幾次?

答案:2 次(第一次檢查 5,第二次檢查 7)。

英文學習 Prompt 句型整理

 

英文學習 Prompt 句型整理

一、單字與片語

● 造句練習
「請用單字__造 5 個句子,並提供中文翻譯。」

● 同義詞/反義詞
「請給我單字__的同義詞與反義詞,並各造一句例句。」

● 情境應用
「請幫我設計一段對話,情境是__,並用到單字__。」


二、文法學習

● 解釋文法
「請用簡單方式解釋__文法,並舉例。」

● 造句練習
「請給我 5 個使用__文法的句子,並翻譯成中文。」

● 文法比較
「請比較__與__兩種文法的差異,並各提供例句。」

● 糾錯練習
「我寫了一句話:__。請幫我找出錯誤,修改並解釋原因。」


三、閱讀理解

● 段落翻譯
「請將以下英文翻譯成中文,並逐句標註文法重點:__。」

● 文章摘要
「請將以下文章濃縮成 100 字摘要,並用中文解釋生字:__。」

● 閱讀問答
「請根據以下文章,設計 5 個理解問題,並提供答案:__。」


四、寫作訓練

● 基本寫作
「請幫我寫一篇 150 字的作文,主題是__,並提供修改後的版本。」

● 句型改寫
「請將這句話改寫成三種不同表達方式:__。」

● 段落優化
「請幫我將以下段落改寫,使語氣更正式,並保持意思不變:__。」


五、口說與對話

● 角色扮演
「請模擬一位英文老師,和我進行關於__的對話,並糾正我的錯誤。」

● 口語練習
「請給我 10 個常用在__場合的口語表達,並附中文解釋。」

● 即時糾錯
「在我們的對話過程中,請即時指出我的文法錯誤並給出正確說法。」


六、考試準備

● 題目練習
「請幫我設計 10 題關於__文法的選擇題,並提供答案解析。」

● 寫作模考
「我正在準備__考試,請出一題寫作題目,並提供範文與批改重點。」

● 模擬測驗
「請幫我做一份 20 分鐘的英文模擬測驗,包含文法題、閱讀題與寫作題。

Prompt 句型整理

Prompt 句型整理

一、學習類

● 解釋用
「請用簡單的方式解釋__,並舉例說明。」
(用途:學習文法、單字、概念)

● 練習用
「請設計 5 題關於__的練習題,並附上解答。」
(用途:自我練習)

● 糾錯用
「我寫了一句話:__。請幫我找出錯誤,並提供修改建議與原因。」
(用途:英文/程式寫作改錯)


二、寫作類

● 生成初稿
「請幫我寫一篇__字的文章,主題是__,語氣__,讀者對象是__。」

● 重寫優化
「請幫我把這段文字改寫成__風格,並保持原本的意思。」

● 摘要整理
「請將以下文章濃縮為__字的摘要,保留重點與關鍵詞。」


三、程式類

● 程式解釋
「請逐行解釋以下程式碼,並說明它的功能:__。」

● 除錯提示
「這段程式有錯誤:__。請指出錯誤原因並提供正確寫法。」

● 程式生成
「請用__語言,寫一個__功能的程式,程式碼需附註解。」


四、工作類

● 任務規劃
「請幫我規劃一個__計畫,包含__步驟與時程建議。」

● 文件撰寫
「請幫我寫一封__用途的 Email,收件人是__,語氣__。」

● 會議整理
「請將以下會議紀錄整理成三大重點與後續行動清單。」

2025年9月3日 星期三

python 學習參考:線上教材、線上解題

線上教材

1.介紹

https://ai4kids.ai/blogs/blog/introduction-to-python


2.彭彭的 Python 入門教學課程

https://www.youtube.com/playlist?list=PL-g0fdC5RMboYEyt6QS2iLb_1m7QcgfHk


3. python 18 小時教材

https://lt945935.blogspot.com/2025/03/python-18_37.html


4.python 官網

https://docs.python.org/zh-tw/3.13/tutorial/index.html


線上解題

1.台中女中 前30題

https://web.archive.org/web/20210919055337/http://www.tcgs.tc.edu.tw:1218/Problems?&page=1


2.中華開放教育平台 挑100題

https://oj.openedu.tw/problem


3. 瘋狂程設 挑100題

http://mcu01.arping.me/


4.zero judge  挑100題

https://zerojudge.tw/


5.LeetCode 

https://leetcode.com/

2025年7月11日 星期五

Pandoc

 Pandoc 是一個強大的 Haskell 程式庫與命令列工具,用於在多種標記語言格式之間進行文件轉換,例如 Markdown、HTML、LaTeX 和 Word docx 等。它的設計是模組化的,透過「讀取器」(readers)將文本解析為抽象語法樹(AST),再由「寫入器」(writers)將 AST 轉換為目標格式。

•
基本轉換
◦
pandoc [options] [input-file]...
◦
若未指定輸入檔案,Pandoc 將從標準輸入 (stdin) 讀取;預設輸出到標準輸出 (stdout)。
◦
範例:pandoc -o output.html input.txt 會將 input.txt 轉換為 output.html。

2025年7月10日 星期四

robocopy

robocopy 是 Windows 內建的高效能檔案拷貝工具,全名為 Robust File Copy,適用於大量資料搬移與同步用途,特別在處理:

  1. 大量小檔案

  2. 巨大資料夾

  3. 網路傳輸

  4. 自動化備份

      robocopy %SRC% %DEST% /E /Z /W:1 /R:3 /LOG:log.txt

參數 中文說明 用途
%SRC% 資料來源路徑變數 例如:D:\MyData
%DEST% 資料目的地路徑變數 例如:\\192.168.0.2\SharedFolder
/MIR Mirror(鏡像)同步 將目的地變成跟來源一模一樣❗會刪除目的地中多餘檔案
/Z 可中斷續傳 傳輸中斷(如網路掉線)可恢復接續拷貝
/W:1 每次失敗後等待 1 秒 遇錯重試前的等待秒數
/R:3 最多重試 3 次 檔案讀寫錯誤時最多嘗試幾次
/LOG:log.txt 將日誌寫入 log.txt 檔案 可追蹤哪個檔案有成功/失敗

2025年6月25日 星期三

python 縮格練習

 n =int(input())

s = list(range(n))

f = [int(i) for i in input().split()]


print(s)

print(f)

print()


print('正確')

v = []

for i in s:

  if i not in v:

    cur =i

    g = []

    while cur not in g:

      v.append(cur)

      g.append(cur)

      cur = f[cur]

  

    print(g)


print('錯誤1')

v = []

for i in s:

  if i not in v:

    cur =i

    g = []

    while cur not in g:

      v.append(cur)

      g.append(cur)

      cur = f[cur]

  

      print(g)


print('錯誤2')

v = []

for i in s:

  if i not in v:

    cur =i

    g = []

    while cur not in g:

      v.append(cur)

      g.append(cur)

      cur = f[cur]

  

  print(g)


print('錯誤3')

v = []

for i in s:

  if i not in v:

    cur =i

    g = []

    while cur not in g:

      v.append(cur)

      g.append(cur)

      cur = f[cur]


print(g)


10

4 7 2 9 6 0 8 1 5 3


STDIN

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[4, 7, 2, 9, 6, 0, 8, 1, 5, 3]


Output:

正確

[0, 4, 6, 8, 5]

[1, 7]

[2]

[3, 9]

錯誤1

[0]

[0, 4]

[0, 4, 6]

[0, 4, 6, 8]

[0, 4, 6, 8, 5]

[1]

[1, 7]

[2]

[3]

[3, 9]

錯誤2

[0, 4, 6, 8, 5]

[1, 7]

[2]

[3, 9]

[3, 9]

[3, 9]

[3, 9]

[3, 9]

[3, 9]

[3, 9]

錯誤3

[3, 9]


2025年6月24日 星期二

小群體-拆解逐步完成版

 ss = [0,1,2,3,4,5,6,7,8,9]

f = [4, 7, 2, 9, 6, 0, 8, 1, 5, 3]


# 1:找到第一群'

# g = []

# cur = 0

# while cur not in g:

#   g.append(cur)

#   cur = f[cur]

# print(g)


# 2:'找到每一群'

# for s in ss:

#   g = []

#   cur = s

#   while cur not in g:

#     g.append(cur)

#     cur = f[cur]

#   print(g)


# 3: '找到每一群,去重覆群'

# v = []

# for s in ss:

#   g = []

#   cur = s

#   if s not in v:

#     while cur not in g:

#       g.append(cur)

#       v.append(cur)

#       cur = f[cur]

#     print(g)

    

# 4: '找到每一群,去重覆群,算出共幾群'

v = []

gs = []

for s in ss:

  g = []

  cur = s

  if s not in v:

    while cur not in g:

      g.append(cur)

      v.append(cur)

      cur = f[cur]

    print(g)

    gs.append(g)

print('共',len(gs),'群')


Output:


[0, 4, 6, 8, 5]

[1, 7]

[2]

[3, 9]

共 4 群

2025年6月20日 星期五

高中一年級新生準備 APCS準備計畫

 1. 了解 APCS 的重要性與目標設定

  • 升學優勢:APCS 成績已被多所大學(包含臺灣大學、清華大學、陽明交通大學、成功大學等頂尖大學的資工系)納入入學審查與甄選加分依據。參與 APCS 檢測並取得成績,能為學生在大學個人申請中,透過 APCS 組、資安組或特殊選才,大大增加進入理想資訊相關科系(如資工系、資管系)的競爭力與選擇。
  • 目標設定:若以大學升學為導向,建議至少考取 APCS 實作三級,這在特殊選才中已有機會申請上國立後段資工系。若能達到實作四級,更有機會透過特殊選才錄取中字輩資工系。考量到大學資訊系課程的嚴謹度(例如,有教授可能當掉70%的學生),提前準備 APCS 有助於銜接大學課程。

2. 基礎程式能力建立(高中一年級上學期)

  • 程式語言選擇:Python 是最推薦的入門語言。Python 語法簡潔、易讀性高,且是全球最受歡迎的程式語言,特別在人工智慧和資料科學領域廣泛應用。從 2025 年起,APCS 的「程式識讀」和「程式實作」都新增了 Python 語言選項,這意味著考生若熟悉 Python,便能應付所有模組的測驗。
  • 學習內容:
    • Python 基礎語法與觀念:學習變數、資料型態、運算子、輸入/輸出、條件判斷(選擇)和迴圈(重複)等程式流程控制。
    • 常用容器:掌握列表(list)等資料結構的基本使用。
    • 函式:了解函式的定義與呼叫,初步建立模組化概念。

3. 進階程式能力與解題思維(高中一年級下學期至二年級)

  • 強化邏輯與問題解決能力:APCS 檢測旨在訓練學生的邏輯思維與問題解決能力。課程應培養學生「從拆解、分析,到解決複雜問題」的能力。
  • 擴展程式語言能力:雖然主要學習 Python,但觀念題可能涉及 C/C++。因此,建議花時間學習「讀懂」C 語言,這有助於應對觀念題型。有些培訓課程會提供程式語法轉換的教學。
  • 學習進階資料結構與演算法:這是 APCS 的核心考點。
    • 基礎資料結構:深入學習佇列(queue)、堆疊(stack)、陣列(array)、字元(character)、字串(string)等。
    • 基礎演算法:學習排序(sorting)、搜尋(searching,如二分搜尋 binary search、深度優先搜尋 DFS)等。
    • 進階概念:函式、遞迴、樹狀圖(tree,如二元樹)、圖形(graph,如網格)、枚舉(enumeration)、資料遍歷(traversal)等。
    • 高階演算法:對於目標高級的學生,還需學習動態規劃(dynamic programming)、分治法(divide and conquer)、貪心法則(greedy method)等。

4. 實戰演練與應試技巧(高中二年級至三年級)

  • 考古題練習:充分利用 APCS 歷屆考古題庫進行實作練習,例如 Yui Huang 筆記中提供了從 2016 年到 2025 年的考古題。
  • 模擬測驗:透過實作模擬檢定當時的狀況,加強學生記憶與應試能力。
  • 題型分析與解題技巧:針對「程式識讀」的程式運行追蹤、填空、測試除錯、效能分析、計算邏輯解析,以及「程式實作」的撰寫完整程式或副程式等題型進行專項訓練,從技巧觀念、例題實作到挑戰題,由簡入難提升解題策略。
  • 理解新制實作分級與報名策略:
    • 從 2025 年起,「程式實作」改採等級制檢定,分為初級、中級、中高級、高級四個等級。
    • 學生需根據自身目標級分,選擇對應的檢測等級報名。例如,若目標為三級分,可報考中高級(100-149 分)或中級(150-300 分)。若報考的測驗等級錯誤,即使獲得滿分也無法得到理想級分,因此務必注意選測等級的重要性。

5. APCS 考試時程規劃

  • 考試頻率增加:自 2025 年起,APCS 檢定次數增加至每年 6 次,分別於 1 月、3 月、6 月、7 月、10 月、11 月舉辦,這提供了學生更大的考試彈性,可以根據學習進度安排應試時間。
  • 科目報考時間:
    • 程式識讀:每次檢測月份皆可報考,並有 C/C++ 或 Python 程式語言的檢測題目供選擇。
    • 程式實作:不同等級舉辦月份不同,其中初級與中級舉辦月份較多(5 次),中高級為 3 次,高級為 2 次。

6. 綜合能力與視野提升

  • 拓展科技視野:除了程式技術,應積極了解人工智慧、區塊鏈、5G、VR、AR、駭客思維、創新創業等最新的科技趨勢與思維模式。這不僅能開拓視野,也能在大學面試時與教授進行深入交流。
  • 培養軟實力:除了學業,也建議高中生多探索不同科系領域,並參與球隊、興趣性社團等,培養運動習慣、社交能力和興趣。這些多元發展對於長遠人生和解決問題的能力都有助益。

2025 新制 APCS 重點整理

APCS(大學程式設計先修檢測)是由教育部指導、臺師大資工系執行的全國性程式設計檢定,主要評量高中職學生在邏輯推理、演算法思維與程式撰寫能力的表現,並成為各大學資訊相關科系參採的重要升學依據。目前已有超過 30 所大學、80 多個科系納入 APCS 成績,包括台大、清大、交大與成大等頂尖學校。

APCS 分為兩部分:程式識讀(筆試)與 程式實作(電腦上機)。2025 年起的新制 APCS有三大關鍵改變:

  1. 考試次數加倍:由原本每年 3 次(1月、6月、10月)調整為 每年 6 次(新增 3月、7月、11月),提供學生更高的彈性安排,並降低單次壓力。

  2. 語言選擇與實作分級:

    • 程式識讀新增 Python 語言,讓初學者有更親切的選擇。

    • 程式實作改採 等級制檢定,分為初級、中級、中高級與高級。考生須依照目標級分選擇相應等級,若報考較低等級,即使拿滿分也無法獲得高級分。

  3. 成績更具辨識力:程式實作除了 1~5 級分外,還會列出原始分數與報考等級,使大學更能掌握學生的實際能力,有利於備審資料與面試表現。

準備建議:

  1. 建議考生可專注學習 Python,並搭配資料結構(陣列、堆疊、佇列、樹、圖)與演算法(排序、搜尋、遞迴、動態規劃等)系統訓練。
  2. 配合歷屆題型、模擬練習及錯題整理,有助於提升解題技巧與應試信心。


APCS 7級必勝秘笈:學習、練習、突破|觀念題C+實作題Python


https://www.books.com.tw/products/0011004302?sloc=main

APCS 7級必勝秘笈:學習、練習、突破|觀念題C+實作題Python

AI 提問 X 學習 X 應用

 https://www.books.com.tw/products/0011022505?sloc=main


AI 提問 X 學習 X 應用:ChatGPT、NotebookLM、Gemini、GitHub Copilot從零到完全實戰

目標設為 APCS 「程式識讀」4級分、「程式實作」3級分

 目標設定為 APCS 「程式識讀」4級分及「程式實作」3級分,主要是基於大學入學的實質需求、考試的策略性考量以及學習的可達成性。

以下是詳細的解釋:

  1. 對應大學校系的錄取門檻

    • 根據來源資料,許多大學資訊相關科系在採計 APCS 成績時,觀念題和實作題會設有不同的級分門檻。
    • 「程式識讀」4級分(分數範圍 70-89 分)搭配「程式實作」3級分(報考中級檢定並獲得 150-300 分,或報考中高級檢定並獲得 100-149 分),這個組合是許多國立大學資訊相關科系的篩選標準。
    • 具體來說,國立中山大學電機工程學系、國立中興大學資訊工程學系、國立彰化師範大學資訊工程學系、國立成功大學工業與資訊管理學系、國立政治大學資訊科學系、國立臺北大學資訊工程學系,以及國立臺灣師範大學資訊工程學系等,都將「程式識讀」4級分和「程式實作」3級分納為其 APCS 組的篩選門檻。這表示達成這個目標,能大幅增加進入這些大學的機會。
  2. 提升升學競爭力與入學選擇

    • 擁有 APCS 成績能「大大增加孩子的競爭力與入學選擇」,讓學生「不用在一般的入學管道裡和他人擠破頭,而是靠 APCS 成績脫穎而出」。
    • 透過 APCS 成績申請大學資訊科系,甚至可能讓學測成績最多可差到 8 級分,有助於學生「前進理想大學」。
    • 達到「程式實作」三級分,對於一般組的第二階段甄試有「絕對優勢,幾乎是保證錄取」,即便不是透過 APCS 組入學,也能在備審資料和面試中展現程式能力。
    • APCS 成績也為學生開啟了更多升學管道,如 APCS 組、資安組或特殊選才。
  3. 務實且可達成的目標

    • 從歷屆成績統計來看,「程式實作」三級分的人數比例約為 20.5%。相較於四級分(2.7%)和五級分(0.8%)的比例,三級分是一個相對較易達成但仍具備競爭力的目標。
    • 「APCS實作三級難度不高」。這在系統學習下是可實現的。
    • 設定觀念題4級、實作題3級,可以讓學生在學習上更有方向性,避免好高騖遠,同時又能符合多數採計校系的需求,是一個策略性的分數組合。

總結來說,觀念題4級、實作題3級是一個兼具競爭力與可達成性的目標,它直接對應了國內許多資訊相關學系的入學門檻,並能顯著提升學生在大學申請過程中的優勢,尤其對於希望進入國立大學的相關科系而言,是個極具價值的目標。

APCS「程式實作」三級分準備要領

 您好!針對 APCS「程式實作」取得三級分的準備要領,以下將根據提供的資料為您詳細說明:

1. 了解「程式實作」三級分的定義與要求

自 114 學年度(2025 年)起,APCS 檢定「程式實作」科目引入了分級選擇。若您的目標是「程式實作」三級分,您可以透過以下兩種方式達成:

  • 報考中級檢定,並獲得 150-300 分的成績。
  • 報考中高級檢定,並獲得 100-149 分的成績。

這表示您需要對中級或中高級所涵蓋的程式設計能力有紮實的掌握。值得注意的是,如果選擇了不符合自己程度的等級,即使取得高分也可能無法獲得理想的級分,例如報考中級並獲得滿分 300 分,也只能得到三級分。

2. 「程式實作」中級與中高級的檢測範圍

「程式實作」主要檢測考生撰寫完整程式或副程式的能力。針對三級分的目標,您需要掌握中級與中高級所要求的內容:

  • 中級檢測範圍:
    • 基礎程式設計能力:能使用變數儲存與操作資料,利用選擇控制進行選輯判斷,並透過迴圈控制處理重複性任務。
    • 序列型資料結構運用能力:能夠以序列型資料結構(如陣列或列表)來儲存與處理資料,並進行文字處理與流程模擬。
    • 具體內容包括:輸入與輸出、算術運算、邏輯運算、位元運算、條件判斷與迴圈、陣列、字元、字串。
  • 中高級檢測範圍:
    • 基礎資料結構運用能力:能夠利用基礎資料結構與演算思維來解決問題。
    • 具體內容包括:函式、遞迴、佇列 (queues)、堆疊 (stacks)。
    • 簡單結構的樹狀圖 (tree)(例如:二元樹)以及簡單結構的圖 (graph)(例如:網格)。
    • 枚舉 (enumeration)、資料遍歷 (traversal)、搜尋 (search)(例如:二分搜尋 (binary search)、深度優先搜尋 (depth-first search, DFS))。

3. 準備要領

要有效準備「程式實作」三級分,建議採取以下策略:

  • 選擇主要學習語言:
    • 自 114 學年度(2025 年)起,「程式實作」除了 C/C++,也提供了 Java 和 Python 程式語言供選擇。
    • Python 語法簡潔、易讀性高,且更符合學界與程式設計的學習趨勢,尤其在 AI 和資料科學領域受到重視,非常適合初學者。橘子蘋果學苑和愷哥程式都主要以 Python 進行教學。
  • 紮實掌握基礎程式語法與邏輯:
    • 透徹理解變數、資料型態、運算子、條件判斷(選擇)、迴圈(重複)、函式、遞迴、陣列和字串等核心概念。這是所有程式解題的基礎。
  • 學習並應用基礎資料結構:
    • 重點學習堆疊 (stack) 和佇列 (queue) 的原理與操作,並練習如何應用它們來解決問題。
  • 理解基礎演算法:
    • 熟練排序 (sorting) 和搜尋 (searching) 的基本演算法。二分搜尋和深度優先搜尋 (DFS) 是中高級的重要考點。
    • Yui Huang 演算法學習筆記也提供了排序和搜尋的相關筆記。
  • 大量練習歷屆考古題與模擬試題:
    • APCS 歷屆考古題是準備的黃金資源。Yui Huang 演算法學習筆記提供了從 2016 年 3 月到 2025 年 6 月的歷屆考古題,包含題目、題解和命題範圍,並連結至 ZeroJudge 測試平台供練習。
    • 練習時,應注重培養問題分析與解題思維,學會如何拆解問題、分析程式邏輯、判斷效能並找出錯誤.
  • 善用學習資源與培訓課程:
    • Yui Huang 演算法學習筆記:提供了詳細的命題範圍筆記和推薦學習教材,例如吳邦一教授的「PythAPCS123-Python 程式設計從 APCS 實作 1 級到 3 級」。

透過上述準備要領,並善用這些豐富的學習資源,您將能有效提升「程式實作」的能力,並達成三級分的目標。

「程式識讀」四級分準備要領

 程式識讀的四級分對應的分數範圍是 70-89 分。

以下是針對 APCS「程式識讀」取得四級分的準備要領:
1. 了解「程式識讀」的考試內容與評量重點
「程式識讀」主要檢測考生的運算思維、程式設計解析與問題解決能力。考試時間為90 分鐘,以選擇題方式命題。
檢測範圍涵蓋以下內容:
•
基礎語法與概念:
◦
資料型態 (data types)、常數 (constants)、變數 (variables)、指定 (assignment)、表達式 (expressions)。
◦
控制結構 (control structures):循序 (sequence)、選擇 (selection) 及重複 (repetition)。
◦
函式與模組化 (functions and modularity)。
◦
遞迴 (recursion)。
◦
陣列與串列 (arrays and lists)。
•
基礎資料結構:
◦
佇列 (queues)。
◦
堆疊 (stacks)。
◦
自訂資料型態。
•
基礎演算法:
◦
排序 (sorting)。
◦
搜尋 (searching)。
檢測題型包括:
•
程式運行追蹤 (code tracing)。
•
程式填空 (code completion)。
•
程式測試與除錯 (code testing and debugging)。
•
程式效能分析 (code performance analysis)。
•
解析計算邏輯 (computational logic analysis)。
自 114 學年度(2025 年)起,「程式識讀」的檢測語言除了 C/C++ 外,也新增了 Python 程式語言供考生選擇。
2. 準備要領
為了在「程式識讀」中取得四級分,以下是具體的準備策略:
•
選擇主要學習語言並兼顧閱讀能力:
◦
雖然您可以選擇 C/C++ 或 Python 題本,但 Python 因其語法簡潔、易讀性高,更適合初學者。
◦
即使選擇 Python,部分培訓課程(例如橘子蘋果和愷哥程式)仍會提供程式語法轉換課程,教導學生閱讀 C/C++ 的題目,以應對觀念題的潛在需求。
•
紮實掌握基礎程式語法與邏輯概念:
◦
務必透徹理解變數、資料型態、運算子、條件判斷、迴圈、函式、遞迴、陣列與字串等核心概念.。
◦
這些是程式設計的基石,也是「程式識讀」中程式運行追蹤、填空等題型的基礎。
•
深入學習基礎資料結構與演算法:
◦
熟練堆疊 (stack) 和佇列 (queue) 的操作與應用。
◦
掌握排序 (sorting) 和搜尋 (searching) 的基本演算法,例如二分搜尋 (binary search) 等。
•
大量練習歷屆考古題與模擬試題:
◦
APCS 歷屆考古題是最佳的練習資源。Yui Huang 演算法學習筆記網站提供了從 2016 年 3 月到 2025 年 6 月的歷屆考古題,包含題目、題解和命題範圍。
◦
透過練習,熟悉題型(如程式運行追蹤、除錯等)並掌握解題技巧。
◦
練習在 ZeroJudge 等線上解題平台提交程式碼,熟悉評測系統。
•
培養問題分析與解題思維:
◦
「程式識讀」著重於運算思維、程式設計解析與問題解決能力。
◦
練習拆解問題、分析程式邏輯、判斷程式效能,並找出潛在錯誤。
3. 參考學習資源與培訓課程
•
Yui Huang 演算法學習筆記:
◦
提供 APCS 命題範圍的詳細內容,包括 C++ 基礎語法、基礎資料結構(佇列、堆疊、樹狀圖、圖形)、基礎演算法(排序、搜尋、貪心法則、動態規劃)等筆記。
◦
提供 APCS 歷屆考古題庫,並連結至 ZeroJudge 測試平台。
◦
推薦多本優質學習教材,如吳邦一教授的「PythAPCS123-Python 程式設計從 APCS 實作 1 級到 3 級」和「AP325-從 APCS 實作題檢測三級到五級」。
•

◦
「演算實作」部分則涵蓋演算法與資料結構概論、陣列、鏈結串列、堆疊、佇列、排序、搜尋、枚舉、分治、樹結構、圖形結構、貪婪演算法與動態規劃。
善用這些學習資源,將能有效提升「程式識讀」的能力,並達到四級分的目標。