APCS 必學的輸入魔法第一篇:input().split()

TL;DR 重點摘要
input().split()是 APCS 考試最基礎也最常用的輸入處理技巧- 一行就能讓使用者一次輸入多筆資料,省去重複呼叫
input()的麻煩- 配合
map(int, ...)可以把一堆字串瞬間轉成整數,是處理測資的標配- 國中生只要理解「拆字串」這個概念,就能解決 APCS 一半以上的輸入題型
- 這個技巧不只考試用得到,寫小工具處理多筆資料時也是利器
目錄
為什麼 APCS 一定要會 input().split()
打開任何一份 APCS 觀念題或實作題,你會發現幾乎每一題的測資格式都長這樣:
3 5 7
10 20 30 40 50
題目會在一行裡丟給你好幾個數字,中間用空格分開。如果你還在用「一個 input() 讀一個數字」的方式寫程式,光是讀題就要花掉一半的時間,更別說後面還有更難的邏輯要處理。
input().split() 就是 APCS 給每個考生的第一道門檻——學會它,你就跨進了競賽程式的世界。
從一個問題開始:你會怎麼讀進三個數字?
假設題目要你讀進三個整數,然後算出總和。輸入長這樣:
10 20 30
新手寫法:呼叫三次 input()
剛學 Python 的人會這樣寫:
a = int(input("第一個數: "))
b = int(input("第二個數: "))
c = int(input("第三個數: "))
print(a + b + c)
這在自己練習時沒問題,但要對應 APCS 的測資格式就不夠順手。APCS 的測資是預先準備好的純文字檔,評分系統會把整份測資一次餵給你的程式。當題目給的是「一行三個數字用空格分開」,你就需要一個能一次讀進整行、再把數字拆開的寫法,效率才會跟得上考試節奏。
進階寫法:一行搞定
正確的寫法是這樣:
a, b, c = map(int, input().split())
print(a + b + c)
短短一行,把三個動作做完了。看起來像魔法,但其實邏輯非常清楚,我們拆開來看。
split() 到底在做什麼?
split() 的工作非常單純:把一個字串依照空格拆開,變成一個列表。
text = "10 20 30"
result = text.split()
print(result)
# 輸出: ['10', '20', '30']
注意!拆出來的元素還是字串——是 '10' 不是 10。所以我們需要再用 map(int, ...) 把每一個元素都轉成整數:
nums = list(map(int, "10 20 30".split()))
print(nums)
# 輸出: [10, 20, 30]
最後用 Python 的「拆包(unpacking)」一次把三個值塞進三個變數:
a, b, c = map(int, input().split())
這就是為什麼 APCS 的解題模板第一行常常都是這個寫法。
實戰練習:計算多科平均分數
讓我們寫一個小程式,讓使用者一次輸入五科分數,然後算出平均:
# 一行讀入五科分數
scores = list(map(int, input("請輸入五科分數(空格分開): ").split()))
# 計算平均
average = sum(scores) / len(scores)
# 輸出結果(保留小數點後 2 位)
print(f"總分: {sum(scores)}")
print(f"平均: {average:.2f}")
執行畫面:
請輸入五科分數(空格分開): 85 92 78 88 95
總分: 438
平均: 87.60
只要 4 行程式碼,就完成了一個能處理任意科目數的計算器。比起一個一個 input() 慢慢問,這種寫法在 APCS 考場上能幫你省下大量時間。
常見錯誤與除錯技巧
剛開始用 input().split() 的學生最常碰到三個問題:
問題一:忘記加 int() 或 map(int, ...)
a, b = input().split()
print(a + b) # 輸入 10 20,會印出 "1020" 而不是 30
因為 split() 拆出來的東西是字串,字串相加是「接在一起」,不是數學加法。
問題二:變數數量對不上
a, b, c = input().split() # 如果使用者只輸入 "10 20",會直接報錯
如果題目說會輸入 N 個數字,而 N 不固定,要用列表接:
nums = list(map(int, input().split()))
問題三:小數點要用 float
如果輸入是 1.5 2.7 3.8,要把 int 換成 float:
nums = list(map(float, input().split()))
掌握這三個小細節,你就能應付 APCS 八成以上的輸入題型了。
學會 input().split() 只是第一步,但它是真正屬於「競賽程式設計」的第一步。下一篇我們會聊 map() 函式還能做什麼神奇的事——讓你一行程式碼就把整個列表的資料變形。
AI導師 Python 程式教學 - 隨時可以學習

?常見問題 FAQ
Q.為什麼 APCS 一定要會 input().split()?
APCS 的測資格式幾乎都是「一行內多個數字用空格分開」,例如 3 5 7 或 10 20 30 40 50。如果用 int(input()) 一個一個讀,不但程式碼變長,也無法對應 APCS 評分系統的測資格式。input().split() 能一次讀進整行、再拆成列表,是處理 APCS 輸入題的標準寫法。
Q.split() 拆出來的東西為什麼不能直接相加?
因為 split() 拆出來的元素都是字串,不是數字。例如 "10 20".split() 得到的是 ['10', '20'],這時候 '10' + '20' 會變成 '1020'(字串接在一起),不是數學上的 30。要做數學運算,必須先用 int() 或 map(int, ...) 把字串轉成整數。
Q.a, b, c = map(int, input().split()) 這行到底做了什麼事?
這行程式碼一次完成三件事:
input()讀進使用者輸入的整行文字.split()用空格把這行字串拆成列表map(int, ...)把列表裡每個字串都轉成整數
最後用 Python 的「拆包(unpacking)」語法,把三個整數一次塞進 a、b、c 三個變數裡。
Q.如果題目輸入的是小數,要怎麼處理?
把 int 換成 float 就可以了:
nums = list(map(float, input().split()))
這樣 1.5 2.7 3.8 就會被讀成 [1.5, 2.7, 3.8]。
Q.如果題目沒有告訴我會輸入幾個數字,該怎麼接?
用列表來接,不要用 a, b, c 這種固定變數數量的寫法:
nums = list(map(int, input().split()))
這樣不管輸入幾個數字都不會出錯,後續用 len(nums)、sum(nums)、迴圈走訪都可以。如果寫成 a, b, c = ... 但實際輸入只有兩個數字,程式會直接崩潰報錯。
Q.input().split() 預設是用空格分開,如果是逗號分開呢?
把分隔符號當成參數傳進去:
nums = list(map(int, input().split(",")))
這樣輸入 1,2,3,4,5 就能正確拆開。APCS 通常用空格,但寫小工具或處理 CSV 資料時逗號分隔也很常見。
相關文章
2026/5/4APCS 必學map() 函式 : 一行解決批次轉換
map()是 Python 的「批次處理工具」——一行就能把整個列表的每個元素套用同一個函式,比 for 迴圈短一半。配合int、float、abs、round,APCS 處理測資和批次運算都用得到。本篇從 for 迴圈和map()的對照寫法、三個常見用法、到map()vs 列表推導式的選用時機,帶你寫出更接近 Python 老手的程式碼。#Python#APCS#map函式
2026/5/18APCS 必學 Python 程式設計:f-string 格式化輸出
APCS 採電腦自動評分,輸出格式跟標準答案逐字元比對——多一個空格、少一個換行就拿不到分數。f-string 是 Python 3.6 之後最簡潔的字串格式化方式,能精準控制小數位數、補零、欄位對齊。本篇從 f-string 基本寫法、APCS 三大格式控制、到實戰輸出整齊成績單,幫你避免「邏輯對但格式錯」的失分。#Python#APCS#f-string
2026/6/7APCS 必學 Python 程式設計:列表推導式
列表推導式(List Comprehension)是 Python 最具代表性的寫法之一——能把 for 迴圈濃縮成一行,加上 if 條件還能一次完成「篩選 + 轉換」雙重任務。本篇從基本格式、與 for 迴圈的對照、APCS 三個常見應用、到map()的選用時機,帶你跨過從「Python 初學者」到「Python 使用者」的關鍵分水嶺。#Python#APCS#列表推導式