HOWTO · Python
Python 中如何將使用者輸入讀取為整數
在 Python 3 中將使用者輸入讀取為整數:用 int(input()) 轉換單一值,用 split() 和 map() 從一行讀取多個整數,並用 try-except 處理無效輸入。
本頁內容
在 Python 3 中,input() 函式始終回傳字串。若要將輸入的值當作數字使用,需要用 int() 轉換這個字串。本文介紹如何讀取單一整數、如何處理不是有效整數的輸入,以及如何從一行中讀取多個整數。
本文針對 Python 3。Python 2 使用 raw_input() 完成相同的工作,並已於 2020 年結束生命週期,因此下面的範例統一使用 input()。
使用 int(input()) 讀取一個整數
先將輸入讀取為字串,然後再轉換:
user_input = input("Please enter an integer: ")
integer_value = int(user_input)
print("You entered:", integer_value)
print(type(integer_value))
Output:
Please enter an integer: 42
You entered: 42
<class 'int'>
讀取和轉換通常會合併為一行,行為完全相同:
integer_value = int(input("Please enter an integer: "))
如果使用者輸入的不是整數,例如 hello 或 3.5,int() 會引發 ValueError,程式隨即停止。下一節將介紹如何處理這種情況。
使用 try-except 處理無效輸入
將轉換放入 try-except 區塊中,可以捕獲 ValueError 並重新提示使用者,而不是讓程式崩潰:
while True:
user_input = input("Please enter an integer: ")
try:
integer_value = int(user_input)
print("You entered:", integer_value)
break
except ValueError:
print("That's not a valid integer. Please try again.")
迴圈會不斷提示,直到轉換成功為止。只有在那時,break 才會結束迴圈。
Output:
Please enter an integer: hello
That's not a valid integer. Please try again.
Please enter an integer: 10
You entered: 10
以這種方式驗證輸入是互動式程式的最佳實踐:使用者輸錯一次,代價應該只是再提示一次,而不是整輪執行作廢。
從一行讀取多個整數
當程式需要一次輸入多個數字時,可以讓使用者在一行中以空格分隔輸入。split() 將這一列拆分為字串片段,map() 則用 int() 轉換每個片段:
numbers = list(map(int, input("Enter numbers separated by spaces: ").split()))
print(numbers)
print("Sum:", sum(numbers))
Output:
Enter numbers separated by spaces: 4 8 15 16 23 42
[4, 8, 15, 16, 23, 42]
Sum: 108
列表推導式也能完成相同的任務,而且同樣常見:
numbers = [int(piece) for piece in input("Enter numbers separated by spaces: ").split()]
如果你需要固定數量的值,可以直接解包結果。下面的例子要求使用者恰好輸入兩個整數:
a, b = map(int, input("Enter two numbers: ").split())
print("a =", a)
print("b =", b)
Output:
Enter two numbers: 3 17
a = 3
b = 17
輸入的值多於或少於預期都會引發 ValueError,因此當數量重要時,應將這一模式與上一節的 try-except 迴圈結合使用。
int() 接受什麼、拒絕什麼
int() 比許多人想像的更為寬容。它會忽略前後的空白,接受可選的 + 或 - 符號,並允許數字之間使用底線:
print(int(" 42 "))
print(int("+7"))
print(int("1_000"))
Output:
42
7
1000
它會拒絕任何不是字串形式整數文字的內容,包括 "3.5"、"12a" 和空字串 ""——這些都會引發 ValueError。如果你的輸入可能包含小數值,應改用 float() 轉換;或者在可以捨棄小數部分時使用 int(float(text))。
結論
在 Python 3 中讀取整數歸結為一個模式:input() 給你字串,int() 將其轉換為整數。使用 try-except 迴圈,讓無效輸入觸發重新提示而不是使程式崩潰;當需要從一行讀取多個整數時,使用 split() 搭配 map() 或列表推導式。
FAQ
-
在 Python 3 中如何將使用者輸入讀取為整數?
使用int(input()):input()將一行讀取為字串,int()將其轉換為整數。 -
如何從一行讀取多個整數?
將這一列拆分並逐個轉換,例如list(map(int, input().split()))或[int(x) for x in input().split()]。 -
如果使用者輸入了非整數值會發生什麼?
int()會引發ValueError。用try-except區塊捕獲它並重新提示。 -
為什麼不能直接對 input() 的結果進行算術運算?
因為input()回傳的是字串而不是數字。在使用int()轉換之前,將字串與整數相加會引發TypeError。 -
Python 2 與 Python 3 在讀取輸入方面有什麼區別?
Python 2 使用raw_input()讀取文字輸入,而 Python 3 使用input()。int()轉換在兩者中的行為相同,但 Python 2 已不再維護,因此新程式碼應使用 Python 3。