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

作者:Howshin Wang
#Python#APCS#f-string#字串格式化#輸出格式#小數點#補零#欄位對齊#程式入門#print
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.22.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 程式教學 - 隨時可以學習

免費試用

Ah Ha Coding AI 程式教學

?常見問題 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 輸出題型裡是非常常見的細節。