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。