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。