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

作者:Howshin Wang
#Python#APCS#input#split#程式入門#國中程式#高中生程式#競賽程式#字串處理#型態轉換#測資處理
 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 程式教學 - 隨時可以學習

免費試用

Ah Ha Coding AI 程式教學

?常見問題 FAQ

Q.為什麼 APCS 一定要會 input().split()

APCS 的測資格式幾乎都是「一行內多個數字用空格分開」,例如 3 5 710 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()) 這行到底做了什麼事?

這行程式碼一次完成三件事:

  1. input() 讀進使用者輸入的整行文字
  2. .split() 用空格把這行字串拆成列表
  3. map(int, ...) 把列表裡每個字串都轉成整數

最後用 Python 的「拆包(unpacking)」語法,把三個整數一次塞進 abc 三個變數裡。

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 資料時逗號分隔也很常見。