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

  1. 在 Python 3 中如何將使用者輸入讀取為整數?
    使用 int(input()):input() 將一行讀取為字串,int() 將其轉換為整數。

  2. 如何從一行讀取多個整數?
    將這一列拆分並逐個轉換,例如 list(map(int, input().split())) 或 [int(x) for x in input().split()]。

  3. 如果使用者輸入了非整數值會發生什麼?
    int() 會引發 ValueError。用 try-except 區塊捕獲它並重新提示。

  4. 為什麼不能直接對 input() 的結果進行算術運算?
    因為 input() 回傳的是字串而不是數字。在使用 int() 轉換之前,將字串與整數相加會引發 TypeError。

  5. Python 2 與 Python 3 在讀取輸入方面有什麼區別?
    Python 2 使用 raw_input() 讀取文字輸入,而 Python 3 使用 input()。int() 轉換在兩者中的行為相同,但 Python 2 已不再維護,因此新程式碼應使用 Python 3。