徹底解析 Python 的 input()!從基本到進階的使用者輸入完全指南

目次

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}!")

執行結果範例

請輸入你的名字:太郎
你好,太郎!

運作方式說明

  1. 當執行 input("請輸入你的名字:") 時,程式會暫停等待使用者輸入。
  2. 使用者輸入資料並按下 Enter 鍵後,該資料會以字串(str 類型)形式儲存在變數 name 中。
  3. 使用 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']

運作機制說明

  1. 透過 input() 接收使用者輸入的整行資料。
  2. 使用 .split() 將資料依空格分割成多個項目。
  3. 結果會以列表(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)

執行範例

請輸入資料(若要結束,請輸入空白行):
蘋果
香蕉
柳橙

輸入的資料:['蘋果', '香蕉', '柳橙']

說明

  1. 使用 while True 建立無限迴圈。
  2. 每次透過 input() 讀入一行。
  3. 若輸入為空白行(""),就用 break 結束迴圈。
  4. 否則將輸入加入 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
錯誤:請輸入有效的整數!

運作機制說明

  1. try: 區塊中執行 input() 並嘗試使用 int() 進行轉換。
  2. 若輸入為數字,則繼續執行並顯示結果。
  3. 若輸入非數字,例如文字,將發生 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例外處理後加上結尾處理適用於資源釋放或清理動作
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール

5. 進階篇:進階輸入處理技巧

在 Python 中,除了標準的 input() 函式之外,還有多種方式可以接收使用者的輸入。特別是在實務應用中,從檔案讀取資料取得命令列參數隱藏密碼輸入 等功能都非常實用。

本章節將介紹如何使用 sys.stdin.read()argparsegetpass 來實現這些進階輸入技巧。

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 使用者輸入處理的最佳實踐

  1. 使用基本的 input()
  • input() 是最直接接收使用者輸入的方法。
  • 若要處理數值,應搭配 int()float() 進行轉換。
  1. 實作錯誤處理
  • 使用 try-except 防止輸入錯誤導致程式中止。
  • 數值轉換時應驗證格式是否正確。
  1. 處理多筆輸入
  • 使用 split() 將單行輸入分割成多個值。
  • 使用 while 讀取任意行數的輸入。
  1. 活用進階輸入方式
  • 從檔案輸入:使用 sys.stdin.read() 讀取整份檔案內容。
  • 命令列參數:透過 argparse 傳入設定參數。
  • 密碼輸入:使用 getpass 隱藏使用者輸入。
  1. 考慮與 Python 2 的相容性
  • Python 2 應使用 raw_input(),避免使用不安全的 input()
  • 如需轉換至 Python 3,可使用 2to3 工具協助升級。

7.3 接下來的學習方向

學會 input() 的各種用法後,你就能打造出更具互動性的 Python 應用程式。建議將本文所學內容實際應用在自己的專案中,加深理解。

如果想進一步挑戰高階輸入技巧,以下主題值得探索:

  • GUI 圖形介面輸入(例如 tkinterPyQt
  • 與資料庫整合的輸入(例如 sqlite3MySQL
  • 從網頁表單接收輸入(例如使用 Flask 或 Django 建立 Web 表單)

熟練 Python 的輸入處理技巧後,將能輕鬆開發各類應用程式,無論是命令列工具、資料處理程式,還是網頁應用都不在話下。

善用本教學,讓你的 Python 輸入處理能力更上一層樓吧!🚀