Python 輸入輸出技巧
遇到不熟悉的輸入輸出格式時,不必從頭閱讀。先判斷問題發生在「輸入」還是「輸出」,再從左側目錄找到最接近題目的格式。
每種格式依序提供題目範例、目前推薦寫法、簡短說明與常見錯誤。精簡或較進階的寫法會折疊起來,不需要一次全部記住。
一、輸入格式
input()每次讀取一整行,而且讀進來的資料一開始都是文字(str)。需要計算時,再依題意轉成int或float。
1. 每行只有一筆資料
題目可能出現的格式
12
35
目前推薦寫法
題目有兩行輸入,因此依序執行兩次input()。如果資料是小數,將int()改成float();如果要保留文字,就直接使用input()。
常見錯誤
- 在
input()中加入題目沒有要求的「請輸入」等提示文字。 - 題目提供小數,卻使用
int()讀取。 - 題目有兩行資料,卻只執行一次
input()。
2. 同一行有固定數量的資料
題目可能出現的格式
12 35
目前推薦寫法
這裡只有一次input()。split()按照空白切開資料,first和second依序接住兩段文字,再分別使用int()轉成整數。
請先看懂「讀取整行 → 按空白切開 → 分別接住 → 轉成整數」四個步驟,再考慮下方的精簡寫法。
常見錯誤
- 因為有兩個數字,就誤用兩次
input()。 - 忘記
split()得到的仍是文字,直接拿來做數值計算。 - 忘記左邊需要兩個變數,才能分別接住切開後的兩筆資料。
學過map()後的精簡寫法
這一行會先切開輸入,再把兩筆資料都轉成整數,最後依序交給first與second。兩個變數仍是獨立的整數,這段程式沒有建立整數串列。
這只是較短的寫法,不會取代讀取、切割、取出與轉型的觀念。還不熟悉map()時,繼續使用分步寫法即可。
3. 資料使用逗號或其他符號分隔
題目可能出現的格式
12,35
目前推薦寫法
split()沒有填入內容時按照空白切割;題目使用逗號時,就在括號中指定逗號。
常見錯誤
- 題目使用逗號,程式卻仍寫成
split()。 - 資料需要保留為文字時,沒有注意逗號後的空白也可能留在文字內容中;若接著使用
int()轉成整數,前後空白通常可以正常處理。 - 把輸入使用的分隔符號誤認為輸出也必須使用相同符號。
4. 已知共有幾筆,接著逐行輸入
題目可能出現的格式
3
72
85
63
第一行的3表示後面還有三筆資料。
目前推薦寫法
input()放在迴圈內,因此會隨著迴圈執行n次。
常見錯誤
- 把逐筆輸入寫在迴圈外,最後只讀到一筆。
- 使用
range(n + 1),導致多讀一行。 - 迴圈內只輸入資料,卻忘記同步處理或累積。
5. 同一行有多筆同類資料
題目可能出現的格式
12 35 8 24 19
目前推薦寫法
即使題目告訴你總共有幾筆,也不適合替每一筆各取一個變數名稱。先用串列保存切割後的所有資料,再逐項轉型。
常見錯誤
- 尚未學過串列,就只背誦這段程式而不知道
data[i]的意義。 - 忘記逐項轉型,導致數字按照文字規則比較。
- 題目其實是一行一筆,卻誤以為所有資料都在同一行。
學過map()後的精簡寫法
6. 不知道筆數,讀到EOF為止
有些題目不先提供資料筆數,而是讀到檔案結束(EOF)為止。
目前推薦寫法
常見錯誤
- 寫成空白的
except,把其他程式錯誤也一起隱藏。 - 誤以為沒有資料筆數就一定要使用EOF;應先仔細閱讀題目的輸入說明。
- 在尚未理解
while與例外處理前,把模板改壞卻不知道錯誤位置。
二、輸出格式
print()可以一次輸出多個項目,預設會在相鄰項目之間加入一個空白,並在整行結束後換行。
1. 一行或多行輸出結果
題目要求分成兩行
12
35
目前推薦寫法
如果題目要求兩行,就使用兩次print()。
常見錯誤
- 使用
print(first, second),把原本的兩行輸出成同一行。 - 加入
答案是等題目沒有要求的文字。 - 輸出順序與題目要求相反。
2. 同一行使用空白分隔
題目要求的格式
12 35
目前推薦寫法
print()預設會在兩個項目之間加入一個空白,因此不需要自己拼接空白字串。
常見錯誤
- 使用兩次
print(),變成兩行。 - 自行加入多個空白,造成格式不符。
- 把兩個整數直接使用
+連接,結果變成數值加法。
3. 使用逗號或指定符號分隔
題目要求的格式
12,35
目前推薦寫法
sep控制相鄰輸出項目之間的內容。若要求12, 35,分隔文字應改成", "。
輸出算式且不能有空白時:
常見錯誤
- 沒注意逗號後是否需要空白。
- 將
sep寫在print()外面。 - 題目只要求一般空白,卻多加不必要的格式設定。
4. 連續輸出而不立即換行
題目要求的格式
A B
目前推薦寫法
end控制一次print()結束後接續的內容。預設的end是換行。
常見錯誤
- 每次都使用
end=" ",造成最後多出一個空白或缺少換行。 - 把
end誤認為項目之間的分隔;多個參數之間應使用sep。 - 在迴圈中輸出時沒有另外處理最後一項。
5. 固定小數位數或前方補零
小數點後兩位
0.67
日期補零
2026/03/08
常見錯誤
- 把顯示到兩位小數誤認為變數本身只剩兩位小數。
- 大括號、冒號或小數點的位置寫錯。
- 題目沒有要求固定小數位數,卻自行格式化。
6. 輸出串列中的所有資料
題目要求以空白分隔
1 2 3 4 5
目前推薦寫法
在print()的參數位置使用*numbers,會把串列中的元素分別送入print()。
*只改變這一次傳給print()的方式,不會修改原本的numbers串列。
常見錯誤
- 直接寫
print(numbers),輸出中出現中括號與逗號。 - 忘記題目指定的分隔符號。
- 尚未學過串列,就只背誦
*的寫法。
串列內容都是文字時,也可以使用join()
join()只能直接連接文字;數字必須先轉成文字。
三、提交前快速檢查
- 每一行需要執行幾次
input()? - 同一行有幾筆資料?使用空白、逗號還是其他符號分隔?
- 每筆資料要保持文字,還是轉成
int或float? - 輸出應該是一行還是多行?
- 輸出項目之間應該是空白、逗號,還是不能有分隔?
- 是否要求固定小數位數、補零或不能換行?
- 是否誤加了提示文字或除錯用的額外輸出?
- 大小寫、空格、小數位數與輸出順序是否完全符合題目?
