當我們不知道輸入的行數時,最直觀的方法就是一直讀取輸入,直到遇到一個特定的結束標記或達到檔案結尾。Python 提供了幾種方式來處理這種情況。
#初始化一個空字符串 result 用來儲存最終的結果。
result = ""
#使用 while True 創造一個無限循環。
while True:
line = input()
# 當用戶輸入內容為空行並按下enter後,表示輸入結束,跳出循環。
if not line:
break
result += line + "-"#將讀取到的行連同 - 拼接至 result。
print(result)
優點:
簡單易懂,適合初学者。
可以靈活處理各種輸入。
while True:
try:
user_input = input()
if not line:
break
result += line + "-"
except EOFError:
print("輸入結束")
break
print(result)
def generate_result():
result = ""
while True:
line = input()
if not line:
break
yield result + line + "-"
result = ""
result = "".join(generate_result())
print(result)
為什麼使用生成器函數?
- 節省記憶體: 它不會一次性將所有結果都存儲在記憶體中,而是在每次迭代時生成一個值,這樣可以處理非常大的數據集。
- 提高效率: 生成器函數可以更早地產生結果,不需要等到所有數據處理完畢。
解析code:yield result + line + "-"
yield 關鍵字將函數變成一个生成器。
每次调用 generate_result() 時,都會從上一次離開的地方繼續執行,直到遇到下一個 yield 表達式或函數結束。在這裡,它會將當前的 result、讀取的 line 以及連接符 - 拼接起来,並作為生成器的返回值。
import sys
result = ""
for line in sys.stdin:
line = line.rstrip() # 去除行尾的換行符
result += line + "-"
print(result)
優點:
更接近底層,效率更高。
可以處理較大的輸入。
輸入結束標記: 在某些特定情況下,你可以使用一個特定的字符串作為輸入結束的標記,例如 exit。
檔案輸入: 如果輸入來自一個檔案,可以使用 with open('filename', 'r') as f: 來打開檔案,然後逐行讀取。
Python 版本: 不同版本的 Python 在處理輸入方面可能略有差異。
編碼: 如果輸入包含非 ASCII 字符,需要指定適當的編碼,例如 encoding='utf-8'。
範例:從檔案讀取並處理
with open('input.txt', 'r') as f:
result = ""
for line in f:
line = line.rstrip()
result += line + "-"
print(result)
多種分隔符: 可以根據需求使用不同的分隔符,例如空格、逗號等。
忽略空行: 如果要忽略空行,可以在判斷條件中加入 if line.strip():。
處理特殊字符: 如果輸入包含特殊字符,需要進行轉義或使用 raw_string。
互動式輸入: 使用 input() 較為直觀。
檔案輸入: 使用 sys.stdin 或 with open() 更高效。
性能要求: 對於大規模輸入,sys.stdin 可能會有更好的性能。
通過以上方法,我們可以有效地處理未知行數的輸入,並根據需求進行定制。選擇哪種方法主要取決於具體的應用場景和對性能的要求。