1. 前言
Python 是一種結合了簡潔語法與強大功能的程式語言,廣泛應用於初學者到高階開發者之間。尤其是在建立互動式程式時,接收使用者輸入的功能是不可或缺的。
本文將詳細說明如何使用 Python 接收使用者輸入。從 input()
函式的基本用法、數值轉換、多筆輸入處理、錯誤處理到進階的輸入技巧,皆以容易理解的方式呈現,適合初學者至中階讀者閱讀。
閱讀本文後,你將學會以下內容:
- Python 中
input()
函式的基本使用方式 - 如何接收字串輸入並進行數值轉換
- 如何接收多筆輸入資料
- 輸入時的錯誤處理(try-except)
- 進階輸入技巧(檔案讀取、命令列引數、密碼輸入)
透過深入了解 Python 的使用者輸入機制,你將能撰寫出更實用的互動式程式!
2. Python 的 input()
函式基本用法【初學者向】
在 Python 中,最基本的使用者輸入方式就是透過 input()
函式。這個函式可以在程式執行時接收使用者的輸入資料,並儲存到變數中。
本章節將說明 input()
函式的基本行為,以及如何處理字串與數值輸入。
2.1 input()
函式的基本用法
使用 input()
函式可以在終端機(Console)上顯示提示訊息並接收使用者的輸入。以下是最簡單的使用範例:
name = input("請輸入你的名字:")
print(f"你好,{name}!")
執行結果範例
請輸入你的名字:太郎
你好,太郎!
運作方式說明
- 當執行
input("請輸入你的名字:")
時,程式會暫停等待使用者輸入。 - 使用者輸入資料並按下 Enter 鍵後,該資料會以字串(str 類型)形式儲存在變數
name
中。 - 使用
print()
函式可將輸入的內容輸出到畫面上。
2.2 使用 input()
接收數值輸入(型別轉換)
透過 input()
取得的資料預設為字串(str 類型)。即使輸入數字,也會被當成字串處理。
範例:直接輸入數字
age = input("請輸入你的年齡:")
print(type(age)) # 結果為 str 類型
執行結果
請輸入你的年齡:25
<class 'str'>
如上所示,透過 input()
取得的 age
是 “25”(字串型別),並不是數值。
若想將其作為數值處理,則需進行型別轉換。
轉換為整數(int 類型)
若要將輸入值轉為整數,可使用 int()
函式:
age = int(input("請輸入你的年齡:"))
print(f"你的年齡是 {age} 歲。")
執行結果
請輸入你的年齡:25
你的年齡是 25 歲。
透過 int()
,輸入的值會以整數(int 類型)進行處理。
轉換為浮點數(float 類型)
若需輸入小數,則使用 float()
函式:
height = float(input("請輸入你的身高(cm):"))
print(f"你的身高是 {height} 公分。")
執行結果
請輸入你的身高(cm):170.5
你的身高是 170.5 公分。
使用 float()
可正確處理含有小數點的數值輸入。
2.3 input()
使用上的注意事項與錯誤發生
若在轉換型別時(如 int()
或 float()
)輸入了非數字資料,會發生錯誤。
發生錯誤的範例
age = int(input("請輸入你的年齡:"))
請輸入你的年齡:abc
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abc'
上述例子中出現了 ValueError
,導致程式崩潰。
為避免這種情況,需實作錯誤處理(例外處理),後續章節將詳細說明。
2.4 小結
input()
是用來接收使用者輸入的基本函式。- 透過
input()
取得的資料預設為字串(str 類型)。 - 若需取得數值,應使用
int()
或float()
進行型別轉換。 - 使用
int()
或float()
時,建議加入錯誤處理來避免輸入錯誤導致程式中斷。
3. 使用 Python 接收多筆輸入的方法【使用 split 與迴圈技巧】
在 Python 中,可以一次性接收多個輸入值。特別是在需要以列表形式取得資料或進行重複輸入時,有一些實用的方法可以使用。本章節將說明如何使用 split()
函式以及搭配迴圈的多行輸入技巧。
3.1 使用 split()
在一行中輸入多個值
通常使用 input()
接收的輸入會被當作單一字串處理。不過,若使用 split()
,可依空格(預設)將多個值分割成列表。
基本範例
values = input("請以空格分隔輸入多個值:").split()
print("輸入的值:", values)
執行範例
請以空格分隔輸入多個值:10 20 30 40
輸入的值:['10', '20', '30', '40']
運作機制說明
- 透過
input()
接收使用者輸入的整行資料。 - 使用
.split()
將資料依空格分割成多個項目。 - 結果會以列表(list)的形式儲存。
這種方式可讓你彈性地接收可變長度的輸入資料。
3.2 結合 split()
與型別轉換
前述方法取得的輸入值都是字串(str 類型)。若需以數值方式處理,需將列表中的每個元素轉換為對應的數值型別。
範例:將輸入轉換為數字處理
numbers = list(map(int, input("請以空格分隔輸入整數:").split()))
print("整數總和:", sum(numbers))
執行範例
請以空格分隔輸入整數:5 10 15 20
整數總和:50
說明
- 使用
input().split()
取得並分割輸入。 - 透過
map(int, ...)
將每個元素轉換為整數。 - 再用
list()
將轉換後的結果存為列表。 - 最後使用
sum()
計算總和。
這種方法非常適合同時處理多筆數值資料。
3.3 使用 while
迴圈接收多行輸入
使用 split()
只能處理單行輸入。若希望使用者能輸入多行資料,可以使用 while
迴圈來達成。
接收多行輸入的方式
lines = []
print("請輸入資料(若要結束,請輸入空白行):")
while True:
line = input()
if line == "":
break
lines.append(line)
print("輸入的資料:", lines)
執行範例
請輸入資料(若要結束,請輸入空白行):
蘋果
香蕉
柳橙
輸入的資料:['蘋果', '香蕉', '柳橙']
說明
- 使用
while True
建立無限迴圈。 - 每次透過
input()
讀入一行。 - 若輸入為空白行(
""
),就用break
結束迴圈。 - 否則將輸入加入
lines
列表中。
這讓使用者可以輸入任意行數的資料。
3.4 使用 for
迴圈接收固定次數的輸入
若已知輸入次數,可使用 for
迴圈來控制。
範例:接收三次輸入
data = []
for i in range(3):
value = input(f"第 {i+1} 次輸入:")
data.append(value)
print("輸入的資料:", data)
執行範例
第 1 次輸入:Python
第 2 次輸入:Java
第 3 次輸入:C++
輸入的資料:['Python', 'Java', 'C++']
重點
- 透過
for
迴圈可明確控制輸入次數。 - 使用
f"{i+1} 次輸入"
顯示當前的輸入次數,提升使用者體驗。
3.5 小結
方法 | 說明 | 優點 |
---|---|---|
使用 split() | 將單行輸入轉換為列表 | 簡單地接收多個值 |
split() + 型別轉換 | 將多個數字輸入轉為數值列表 | 可直接進行數值計算 |
while 迴圈 | 接收多行輸入 | 使用者可自由決定輸入行數 |
for 迴圈 | 接收固定次數的輸入 | 明確控制輸入次數 |
4. 輸入時的錯誤處理【活用 try-except】
在使用 Python 接收使用者輸入時,有時會輸入非預期的值。例如,原本希望輸入數字,但使用者卻輸入了文字,這將導致程式發生錯誤並中止執行。為了避免這種情況,可以使用 try-except
來進行錯誤處理。
本章節將介紹 try-except
的基本用法與實用的錯誤處理技巧。
4.1 try-except
的基本用法
在 Python 中,透過 try-except
可以在發生例外(錯誤)時讓程式持續運作,避免程式崩潰。
基本範例
try:
num = int(input("請輸入一個整數:"))
print(f"輸入的整數是:{num}")
except ValueError:
print("錯誤:請輸入有效的整數!")
執行範例
請輸入一個整數:10
輸入的整數是:10
請輸入一個整數:abc
錯誤:請輸入有效的整數!
運作機制說明
- 在
try:
區塊中執行input()
並嘗試使用int()
進行轉換。 - 若輸入為數字,則繼續執行並顯示結果。
- 若輸入非數字,例如文字,將發生
ValueError
,進而觸發except
區塊中的處理。
透過這種方式,即使輸入錯誤,程式也不會當機,並能提示使用者重新輸入。
4.2 使用 while
迴圈反覆要求正確輸入
上述範例在錯誤時會顯示提示訊息,但並不會讓使用者重新輸入。若希望直到輸入正確為止不斷詢問,可搭配 while
迴圈使用。
範例:直到輸入正確的整數才結束
while True:
try:
num = int(input("請輸入一個整數:"))
break # 若成功輸入,跳出迴圈
except ValueError:
print("錯誤:請輸入有效的整數!")
print(f"輸入的整數是:{num}")
執行範例
請輸入一個整數:abc
錯誤:請輸入有效的整數!
請輸入一個整數:12
輸入的整數是:12
重點
- 使用
while True:
建立無限迴圈。 - 若轉換失敗則觸發
except
顯示錯誤,否則使用break
離開迴圈。 - 確保使用者最終一定會輸入正確格式的資料。
4.3 使用 try-except
處理多個輸入
當要接收多個輸入(如多個數字)時,也可以使用 try-except
進行整體的輸入驗證。
範例:以空格分隔輸入多個整數
while True:
try:
numbers = list(map(int, input("請以空格分隔輸入整數:").split()))
break # 若成功輸入,跳出迴圈
except ValueError:
print("錯誤:請僅輸入整數!")
print(f"輸入的整數列表:{numbers}")
執行範例
請以空格分隔輸入整數:10 20 30
輸入的整數列表:[10, 20, 30]
請以空格分隔輸入整數:10 abc 30
錯誤:請僅輸入整數!
說明
- 使用
input().split()
取得多筆資料。 - 使用
map(int, ...)
嘗試將所有輸入轉為整數。 - 若有任一輸入無法轉換,會發生
ValueError
,觸發錯誤提示。
4.4 使用 finally
執行後續處理
try-except
結構中,可以加上 finally
區塊,不論是否發生錯誤,都會執行其中的程式碼,適合用於資源釋放等結尾動作。
範例:結束處理的顯示
try:
num = int(input("請輸入一個整數:"))
print(f"輸入的整數是:{num}")
except ValueError:
print("錯誤:請輸入有效的整數!")
finally:
print("處理結束。")
執行結果
請輸入一個整數:abc
錯誤:請輸入有效的整數!
處理結束。
finally
區塊可保證不論成功或失敗,最後一定會執行,常用於關閉檔案或釋放資源等操作。
4.5 小結
方法 | 說明 | 適用情境 |
---|---|---|
try-except | 捕捉例外並處理錯誤 | 基本的輸入驗證 |
while + try-except | 重複要求使用者直到正確輸入為止 | 確保取得正確格式的輸入 |
try-except-finally | 例外處理後加上結尾處理 | 適用於資源釋放或清理動作 |
5. 進階篇:進階輸入處理技巧
在 Python 中,除了標準的 input()
函式之外,還有多種方式可以接收使用者的輸入。特別是在實務應用中,從檔案讀取資料、取得命令列參數、隱藏密碼輸入 等功能都非常實用。
本章節將介紹如何使用 sys.stdin.read()
、argparse
、getpass
來實現這些進階輸入技巧。
5.1 從檔案讀取輸入【sys.stdin.read()
】
除了使用 input()
接收輸入之外,也可以透過 標準輸入(stdin) 的方式,從檔案中讀取資料。
從檔案讀取輸入的方式
import sys
data = sys.stdin.read() # 讀取所有標準輸入資料
print("讀取到的資料:")
print(data)
執行方式(Linux/macOS 終端機)
$ python script.py < sample.txt
透過指定 < 檔案名稱
,就能將 sample.txt
的內容傳遞給 sys.stdin.read()
。
適用情境
- 處理大量資料的程式(如日誌分析、資料轉換)
- 透過管線(pipe)傳遞資料的腳本
5.2 接收命令列參數【argparse
】
透過命令列參數,可以在執行腳本時傳入資料,讓程式更加彈性與自動化。
使用 argparse
的基本範例
import argparse
parser = argparse.ArgumentParser(description="取得使用者名稱的腳本")
parser.add_argument("name", help="請輸入你的名字")
args = parser.parse_args()
print(f"你好,{args.name}!")
執行方式
$ python script.py Taro
你好,Taro!
接收多個參數的範例
parser.add_argument("age", type=int, help="請輸入年齡")
args = parser.parse_args()
print(f"{args.name} 今年 {args.age} 歲。")
執行方式
$ python script.py Taro 25
Taro 今年 25 歲。
適用情境
- 開發命令列工具
- 透過外部參數控制腳本行為
5.3 隱藏密碼輸入【getpass
】
使用 input()
輸入密碼時,輸入內容會顯示在螢幕上。為了保護隱私與安全,可使用 getpass
模組來隱藏輸入內容。
使用 getpass
隱藏密碼輸入
import getpass
password = getpass.getpass("請輸入密碼:")
print("密碼已成功輸入")
執行結果(輸入時不顯示內容)
請輸入密碼:
密碼已成功輸入
適用情境
- 需要身份驗證的程式
- 需保護敏感資訊的輸入
5.4 小結
方法 | 說明 | 主要用途 |
---|---|---|
sys.stdin.read() | 從檔案讀取資料作為標準輸入 | 資料處理、大量資料輸入 |
argparse | 接收命令列參數 | 命令列工具、自動化腳本 |
getpass | 隱藏密碼輸入內容 | 輸入帳號密碼等敏感資訊 |
6. 與 Python 2 的相容性(補充資訊)
在 Python 3 中,使用 input()
函式來取得使用者輸入;但在 Python 2 時代,則存在 input()
和 raw_input()
兩種不同的輸入函式。由於兩者的行為不同,處理舊程式碼時需要特別注意。
本章節將說明 Python 2 與 Python 3 中 input()
的差異。
6.1 Python 2 的 input()
與 raw_input()
在 Python 2 中,存在兩種接收輸入的函式:input()
和 raw_input()
。
函式 | Python 2 的行為 | 對應的 Python 3 行為 |
---|---|---|
raw_input() | 以字串形式接收輸入 | 與 Python 3 的 input() 相同 |
input() | 將輸入的內容當作程式碼進行運算 | 等同於 eval(input()) |
總結來說,在 Python 2 中應使用 raw_input()
作為安全的輸入方式,而 Python 3 已將其功能整合進 input()
中。
6.2 Python 2 中 input()
的危險性
在 Python 2 中,input()
函式會將使用者輸入視為 Python 表達式進行運算,這是一種非常危險的行為。
舉個例子:
# Python 2 範例
value = input("請輸入內容:")
print(value)
若使用者輸入 5 + 5
,則會被計算為 10
:
請輸入內容:5 + 5
10
更嚴重的是,使用者可以輸入任意指令執行,如:
__import__('os').system('rm -rf /')
這可能會造成系統毀損,是重大安全風險。
安全替代方式
在 Python 2 中,應使用 raw_input()
以字串方式接收輸入,避免被當成程式碼執行:
# Python 2 安全作法
value = raw_input("請輸入內容:")
print(value)
而在 Python 3 中,input()
已經是安全的字串輸入函式,這個問題不再存在。
6.3 在 Python 3 中執行 Python 2 程式碼的方法
若需將 Python 2 的程式碼轉換成 Python 3,可以將 raw_input()
替換為 input()
。但若要大量轉換,可使用工具 2to3
自動處理。
使用 2to3
進行程式碼轉換
Python 3 提供 2to3
工具,可自動將舊版程式碼轉換為新版格式。
$ 2to3 old_script.py -w
執行後,raw_input()
等語法會自動轉換為 input()
。
6.4 小結
版本 | 安全的輸入方式 |
---|---|
Python 2 | 使用 raw_input() (input() 危險) |
Python 3 | 使用 input() (預設安全) |
- Python 2 的
input()
存在安全風險,應避免使用。 raw_input()
在 Python 3 中已被整合為input()
。- 可使用
2to3
工具將舊版程式碼快速轉換為 Python 3 格式。
7. 總結
本文深入說明了在 Python 中如何接收使用者輸入,從最基礎的 input()
使用方式,到錯誤處理與進階輸入技巧,內容涵蓋初學者所需的各種場景。
7.1 文章重點整理
章節 | 內容 |
---|---|
1. 前言 | 說明 input() 的重要性與用途 |
2. input() 的基礎 | 介紹字串輸入與數值輸入(int() / float() )的使用方式 |
3. 多筆輸入 | 使用 split() 接收列表形式的輸入,或透過 while 讀取多行輸入 |
4. 錯誤處理 | 運用 try-except 處理輸入錯誤,確保程式穩定執行 |
5. 進階輸入 | 使用 sys.stdin.read() 讀取檔案、argparse 取得參數、getpass 輸入密碼 |
6. 與 Python 2 的差異 | 比較 raw_input() 與 input() ,並說明如何轉換舊程式碼 |
7.2 Python 使用者輸入處理的最佳實踐
- 使用基本的
input()
input()
是最直接接收使用者輸入的方法。- 若要處理數值,應搭配
int()
或float()
進行轉換。
- 實作錯誤處理
- 使用
try-except
防止輸入錯誤導致程式中止。 - 數值轉換時應驗證格式是否正確。
- 處理多筆輸入
- 使用
split()
將單行輸入分割成多個值。 - 使用
while
讀取任意行數的輸入。
- 活用進階輸入方式
- 從檔案輸入:使用
sys.stdin.read()
讀取整份檔案內容。 - 命令列參數:透過
argparse
傳入設定參數。 - 密碼輸入:使用
getpass
隱藏使用者輸入。
- 考慮與 Python 2 的相容性
- Python 2 應使用
raw_input()
,避免使用不安全的input()
。 - 如需轉換至 Python 3,可使用
2to3
工具協助升級。
7.3 接下來的學習方向
學會 input()
的各種用法後,你就能打造出更具互動性的 Python 應用程式。建議將本文所學內容實際應用在自己的專案中,加深理解。
如果想進一步挑戰高階輸入技巧,以下主題值得探索:
- GUI 圖形介面輸入(例如
tkinter
或PyQt
) - 與資料庫整合的輸入(例如
sqlite3
或MySQL
) - 從網頁表單接收輸入(例如使用 Flask 或 Django 建立 Web 表單)
熟練 Python 的輸入處理技巧後,將能輕鬆開發各類應用程式,無論是命令列工具、資料處理程式,還是網頁應用都不在話下。
善用本教學,讓你的 Python 輸入處理能力更上一層樓吧!🚀