iT邦幫忙

0

Python line input 用戶輸入

  • 分享至 

  • xImage
  •  

什麼是input():

在 Python 中,用戶輸入是透過內建函式 input() 來完成的。
它允許程式從終端(或命令列)接收用戶輸入,並將其作為字串返回。
基礎用法
input() 函式可以用來提示用戶輸入內容。

name = input("請輸入你的名字: ")  # 用戶輸入
print(f"你好, {name}!")  # 顯示輸入的結果

輸出
請輸入你的名字: Alice 你好, Alice!

age = int(input("請輸入你的年齡: "))  # 轉換為整數
height = float(input("請輸入你的身高(以公尺為單位): "))  # 轉換為浮點數

print(f"你的年齡是 {age} 歲,身高是 {height:.2f} 公尺。")

輸出
請輸入你的年齡: 25 請輸入你的身高(以公尺為單位): 1.75 你的年齡是 25 歲,身高是 1.75 公尺。

處理數值輸入

由於 input() 的返回值總是 字串型別 (str),如果需要處理數值,可以使用 int() 或 float() 進行轉換。
在 Python 中,處理不定行輸入可以使用以下幾種方式,具體取決於輸入來源和需求:

  • sys.stdin:適合處理批量輸入(特別是在競賽環境)。
  • try-except 與 input():適合不定行的標準輸入。
  • 空行結束:適合用戶手動結束輸入

單行多個輸入

可以使用 split() 方法將單行輸入分隔成多個值,或者通過 for 迴圈多次接收輸入。

data = input("請輸入三個數字(以空格分隔): ").split()  # 將輸入分割為清單
numbers = list(map(int, data))  # 轉換成整數清單
print(f"輸入的數字是: {numbers}")

請輸入三個數字(以空格分隔): 5 10 20 輸入的數字是: [5, 10, 20]

固定多行輸入

lines = []
for _ in range(3):  # 接收三行輸入
    lines.append(input("請輸入內容: "))

print("你輸入的內容是:")
print("\n".join(lines))

不確定幾行數入

當我們不知道輸入的行數時,最直觀的方法就是一直讀取輸入,直到遇到一個特定的結束標記或達到檔案結尾。Python 提供了幾種方式來處理這種情況。

方法一:使用 while 迴圈和 input()

#初始化一個空字符串 result 用來儲存最終的結果。
result = ""
#使用 while True 創造一個無限循環。
while True: 
    line = input() 
    # 當用戶輸入內容為空行並按下enter後,表示輸入結束,跳出循環。
    if not line:  
        break
    result += line + "-"#將讀取到的行連同 - 拼接至 result。

print(result)

優點:
簡單易懂,適合初学者。
可以靈活處理各種輸入。

try excpet 處理輸入錯誤

預期使用者可能會輸入不符合預期格式的數據時,當輸入結束標誌不確定時,
可以使用 input() 配合 try-except,適用於未知行數的情況,為了防止用戶輸入無效資料

使用 try-except 處理不定行輸入的優點:

  • 錯誤處理: 可以捕獲並處理各種異常,例如 ValueError(當輸入無法轉換為預期數據類型時)、EOFError(當遇到輸入結束符時)等。
  • 程式穩定性: 即使使用者輸入錯誤,程式也不會突然終止,而是會進入 except 塊,進行相應的處理。
  • 彈性: 可以根據不同的異常類型,採取不同的處理措施。
lines = []  # 創建一個空列表,用來存儲每行的輸入內容
try:
    while True:
        line = input().strip()  # 使用 input() 來讀取每行的輸入,並用 strip() 去掉首尾空白
        lines.append(line)  # 將每行輸入追加到 lines 列表中
except EOFError:
    pass  # 遇到 EOFError(表示輸入結束)時停止讀取,不進行任何其他操作

# 處理 lines 列表中的每一行輸入
for line in lines:
    print(line)  # 逐行打印出列表中的每個元素

代碼詳解:
1.初始化 lines 列表:lines = []:創建一個空列表,用於存儲每行的輸入。
2.嘗試無限循環讀取輸入:while True: 進入一個無限循環,預期會不斷從標準輸入讀取新行。
3.讀取並處理每行輸入:line = input().strip():使用 input() 讀取一行輸入。.strip() 去掉每行開頭和結尾的空白或換行符,避免多餘空格影響後續處理。每行輸入被存儲為 line。
4.將輸入行添加到列表中:lines.append(line):使用 .append() 方法將每行輸入逐一添加到 lines 列表中。
5.捕獲 EOFError (End Of File Error)異常:except EOFError:EOFError 表示無更多輸入,通常在使用 Ctrl+D (Unix/Mac) 或 Ctrl+Z (Windows) 終止輸入後觸發。捕獲 EOFError 後會退出 try 區塊。
6.逐行打印存儲的輸入內容:for line in lines::遍歷 lines 列表,逐行打印出之前收集的所有輸入內容。

實用技巧

  1. 提供輸入預設值:如果用戶按下 Enter 鍵而不輸入內容,可使用條件設定預設值。
name = input("請輸入名字(預設:Anonymous): ") or "Anonymous"
print(f"你好, {name}!")

2.強制輸入特定格式:例如,限制輸入數字範圍或文字長度。

while True:
    value = input("請輸入 1 到 10 的數字: ")
    if value.isdigit() and 1 <= int(value) <= 10:
        print(f"你輸入的數字是 {value}")
        break
    print("輸入無效,請再試一次!")

進階從標準輸入讀取

  1. sys.stdin(適用於大多數競賽、終端的批量輸入)
    當輸入行數不定時,可以使用 sys.stdin 來讀取標準輸入,直到讀取結束:
import sys

lines = []
for line in sys.stdin:
    lines.append(line.strip())  # 去掉每行的換行符

# 處理 lines 列表中的每一行輸入
for line in lines:
    print(line)  # 或對每行進行進一步處理
  1. 直接使用 input() 讀取直到某條件(如空行)
    可以設置一個特殊條件,比如用戶輸入空行時結束:
lines = []
while True:
    line = input().strip()
    if line == "":  # 當遇到空行時結束
        break
    lines.append(line)

# 處理 lines 列表中的每一行輸入
for line in lines:
    print(line)
  1. input() 讀取多行,直到獲取指定數量的行
    如果知道行數不固定,但可以根據數據的某個特徵判斷(例如第一行指定數量),可以讀取該數據後設置循環:
n = int(input("請輸入行數: "))  # 假設第一行表示後續行數
lines = [input().strip() for _ in range(n)]

# 處理 lines 列表中的每一行輸入
for line in lines:
    print(line)

進階輸入法文章:Multiple line input 處理未知行數輸入的 Python 程式

  • 使用生成器表達式優化使用 while 迴圈和 input()
  • 方法使用 sys.stdin.readline()

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言