APCS 必學 Python 程式設計:f-string 格式化輸出

TL;DR 重點摘要
- APCS 採電腦自動評分,輸出格式錯一個空格或換行就可能拿不到分數
- f-string 是 Python 3.6 之後最簡潔、最易讀的字串格式化方式
- 控制小數位數、補零、對齊欄位這些常見需求,f-string 都能一行解決
- 學會 f-string 後,你的輸出會精準對應題目要求,不會因為「格式問題」白白丟分
- 這個技巧不只考試用得到,寫任何需要顯示資料的程式都會反覆使用
目錄
為什麼 APCS 考生一定要學 f-string
APCS 採用電腦自動評分,評分系統會把你的輸出跟標準答案逐字元比對。這代表:
- 多打一個空格 → 不對
- 少打一個換行 → 不對
- 小數點寫成
3.14159但題目要3.14→ 不對
很多學生程式邏輯完全正確,只因為輸出格式跟題目要求差一點點,就拿不到分數。f-string 就是用來精準控制輸出格式的工具,學會它能幫你避免這類失分。
f-string 是什麼
f-string 的全名是「formatted string literal」,寫法很簡單:字串前面加一個 f,然後在 {} 裡面放變數。
name = "小明"
score = 85
print(f"{name} 的分數是 {score} 分")
# 輸出: 小明 的分數是 85 分
比起傳統寫法,f-string 又短又好讀:
# 舊寫法 1:用 + 連接
print(name + " 的分數是 " + str(score) + " 分")
# 舊寫法 2:用 .format()
print("{} 的分數是 {} 分".format(name, score))
# f-string 新寫法
print(f"{name} 的分數是 {score} 分")
{} 裡面甚至可以直接做運算:
math = 80
english = 90
print(f"平均分數是 {(math + english) / 2}")
# 輸出: 平均分數是 85.0
APCS 最常用的三種格式控制
控制一:小數點位數
題目常要求「保留小數點後 2 位」,寫法是 :.2f:
pi = 3.14159265
print(f"圓周率約為 {pi:.2f}")
# 輸出: 圓周率約為 3.14
冒號 : 後面寫格式,.2f 表示「小數點後 2 位的浮點數」。要 3 位就寫 .3f,要 0 位就寫 .0f。
score = 87.6543
print(f"{score:.0f}") # 88(自動四捨五入)
print(f"{score:.1f}") # 87.7
print(f"{score:.3f}") # 87.654
控制二:整數補零
題目要求「輸出 4 位數,不足前面補 0」,寫法是 :04d:
day = 5
print(f"日期: 2026-01-{day:02d}")
# 輸出: 日期: 2026-01-05
04d 的意思是「整數,總共佔 4 位,不足的用 0 補滿」。02d 就是 2 位,以此類推。
num = 7
print(f"{num:03d}") # 007
print(f"{num:05d}") # 00007
控制三:欄位對齊
要把成績排成整齊的表格,可以用 :<、:>、:^ 來對齊:
name = "Alice"
print(f"{name:<10}|") # 靠左,佔 10 個字元
print(f"{name:>10}|") # 靠右,佔 10 個字元
print(f"{name:^10}|") # 置中,佔 10 個字元
輸出:
Alice |
Alice|
Alice |
實戰練習:輸出考試成績單
來綜合應用一下,寫一個能輸出整齊成績單的小程式:
students = [
("Alice", 92.5),
("Bob", 78.345),
("Charlie", 85.0),
]
print(f"{'姓名':<10}{'分數':>8}")
print("-" * 18)
for name, score in students:
print(f"{name:<10}{score:>8.2f}")
輸出:
姓名 分數
------------------
Alice 92.50
Bob 78.35
Charlie 85.00
每一欄寬度固定、小數點位數統一,看起來就像專業的報表。這種寫法在 APCS 處理「輸出多筆資料」的題目時很實用。
使用時容易出錯的地方
問題一:忘記加 f
name = "小明"
print("{name} 的分數")
# 輸出: {name} 的分數 ← 直接印出 {name} 字串,沒有代入變數
字串前面一定要加 f,否則 Python 會把 {name} 當成普通文字。
問題二:小數位數的格式記反
.2f 是「f 在後面」,很多人會寫成 f.2、2.f 之類的:
# 錯誤
print(f"{pi:f.2}")
# 正確
print(f"{pi:.2f}")
記法:冒號 → 點 → 數字 → f,順序固定。
問題三:print() 自動換行
print() 預設會在最後加一個換行符號。如果題目要求「同一行輸出多個結果」,要用 end="":
for i in range(5):
print(i, end=" ")
# 輸出: 0 1 2 3 4
如果不加 end=" ",結果會變成:
0
1
2
3
4
這在 APCS 考試裡是非常常見的格式問題,要特別注意題目要求的輸出長什麼樣子。
f-string 是 Python 寫法現代化的代表之一。學會它之後,你的輸出會更精準、更專業,也更不容易因為格式問題在 APCS 考場上失分。
下一篇我們會聊列表推導式(list comprehension)——一個能把 for 迴圈濃縮成一行的強大工具,也是 Python 程式設計師的標誌性寫法。
AI導師 Python 程式教學 - 隨時可以學習

?常見問題 FAQ
Q.為什麼 APCS 對輸出格式這麼挑剔?
因為 APCS 採用電腦自動評分系統,會把你的輸出跟標準答案逐字元比對。多一個空格、少一個換行、小數點位數不對,系統都會判定為「答案錯誤」。很多學生程式邏輯完全正確,卻因為輸出格式差一點點而拿不到分數。f-string 就是用來精準控制每個字元的工具。
Q.f-string 跟舊的 .format() 寫法有什麼差別?
功能差不多,但 f-string 更簡潔、更易讀。比較看看:
# 舊寫法(用 + 連接)
print(name + " 的分數是 " + str(score) + " 分")
# .format() 寫法
print("{} 的分數是 {} 分".format(name, score))
# f-string 新寫法
print(f"{name} 的分數是 {score} 分")
f-string 可以直接把變數寫在 {} 裡,不用額外傳參數,也不用 str() 轉型,是目前最推薦的寫法。
Q..2f 這個格式怎麼記比較不會搞錯?
順序固定是「冒號 → 點 → 數字 → f」:
print(f"{pi:.2f}") # 正確
print(f"{pi:f.2}") # 錯誤
記法:「冒號表示開始格式設定,點和數字代表小數位數,f 代表浮點數類型」。
常見組合:
.0f:整數(會四捨五入).2f:小數點後 2 位.3f:小數點後 3 位
Q.補零格式 :04d 是什麼意思?
意思是「整數,總共佔 4 位,不足的位數用 0 從左邊補滿」:
day = 5
print(f"{day:04d}") # 0005
print(f"{day:02d}") # 05
這在輸出日期、編號、學號這類「需要固定位數」的資料時很常用。例如要輸出 2026-01-05,月和日都用 :02d 就能保證永遠是兩位數。
Q.f-string 的 :<、:>、:^ 分別代表什麼?
這三個符號用來控制欄位對齊方式:
:<10:靠左對齊,總共佔 10 個字元(右邊補空白):>10:靠右對齊,總共佔 10 個字元(左邊補空白):^10:置中對齊,總共佔 10 個字元(兩邊補空白)
name = "Alice"
print(f"{name:<10}|") # Alice |
print(f"{name:>10}|") # Alice|
print(f"{name:^10}|") # Alice |
輸出表格、成績單時非常實用。
Q.為什麼我寫 print("{name}") 沒有印出變數值?
因為字串前面忘了加 f。沒有 f 的話,Python 會把 {name} 當成普通文字直接印出來:
name = "小明"
print("{name}") # 輸出: {name} ← 沒代入變數
print(f"{name}") # 輸出: 小明 ← 正確代入
只要在引號前加一個 f,Python 就會把 {} 裡的內容當成變數或運算式處理。
Q.APCS 題目要求「同一行輸出多個結果」要怎麼做?
預設 print() 會在最後加一個換行符號。如果要讓多次 print() 印在同一行,要用 end="" 參數:
for i in range(5):
print(i, end=" ")
# 輸出: 0 1 2 3 4
end=" " 表示「印完之後接一個空格,而不是換行」。如果要完全不分隔就寫 end=""。這在 APCS 輸出題型裡是非常常見的細節。
相關文章
2026/5/4APCS 必學map() 函式 : 一行解決批次轉換
map()是 Python 的「批次處理工具」——一行就能把整個列表的每個元素套用同一個函式,比 for 迴圈短一半。配合int、float、abs、round,APCS 處理測資和批次運算都用得到。本篇從 for 迴圈和map()的對照寫法、三個常見用法、到map()vs 列表推導式的選用時機,帶你寫出更接近 Python 老手的程式碼。#Python#APCS#map函式
2026/5/4APCS 必學的輸入魔法第一篇:input().split()
打開 APCS 任何一份考題,幾乎每題的測資都是「一行裡好幾個數字用空格分開」。如果你還在用int(input())一個一個讀,光讀題就花光時間。input().split()是 APCS 給每位考生的第一道門檻——學會它,就跨進競賽程式的世界。本篇從新手寫法、split()的運作原理、到實戰計算平均分數,帶你一行讀完整行測資。#Python#APCS#input
2026/6/7APCS 必學 Python 程式設計:列表推導式
列表推導式(List Comprehension)是 Python 最具代表性的寫法之一——能把 for 迴圈濃縮成一行,加上 if 條件還能一次完成「篩選 + 轉換」雙重任務。本篇從基本格式、與 for 迴圈的對照、APCS 三個常見應用、到map()的選用時機,帶你跨過從「Python 初學者」到「Python 使用者」的關鍵分水嶺。#Python#APCS#列表推導式