ZetCode

Python input 函数

上次修改时间:2025 年 4 月 11 日

这个全面的指南探索了 Python 的 input 函数,它从控制台读取用户输入。我们将涵盖基本用法、类型转换、输入验证和交互式程序的实际例子。

基本定义

input 函数从标准输入读取一行,并将其作为字符串返回(不带尾随换行符)。它可以显示一个可选的提示消息来引导用户。

主要特点:总是返回一个字符串,阻塞程序执行直到收到输入,如果输入被终止(Ctrl+D/Z),则引发 EOFError。

基本输入用法

这是一个简单的用法,展示了如何使用带和不带提示消息来获取用户输入。输入总是作为字符串返回。

basic_input.py
# Simple input without prompt
name = input()
print(f"Hello, {name}!")

# Input with prompt
age = input("Enter your age: ")
print(f"You are {age} years old.")

这个例子演示了使用 input 的两种主要方式。第一个读取没有任何提示的输入,而第二个显示一条消息。

记住,即使用户输入数字,input 总是将它们作为字符串返回。你需要转换它们才能进行数值运算。

类型转换

由于 input 返回字符串,我们经常需要将它们转换为其他类型。这个例子展示了安全的转换技术。

conversion.py
# Convert to integer
try:
    num = int(input("Enter a number: "))
    print(f"Double: {num * 2}")
except ValueError:
    print("Please enter a valid integer!")

# Convert to float
try:
    price = float(input("Enter price: "))
    print(f"Total with tax: {price * 1.2:.2f}")
except ValueError:
    print("Please enter a valid number!")

这些例子演示了使用 try-except 块进行安全类型转换。这可以防止用户输入无法转换的无效数据时崩溃。

浮点数例子还显示了货币值格式化的两位小数输出。

输入验证

对于健壮的程序,我们经常需要验证输入,如果无效则再次询问。这个例子展示了一个连续验证的模式。

validation.py
while True:
    age_input = input("Enter your age (1-120): ")
    if age_input.isdigit():
        age = int(age_input)
        if 1 <= age <= 120:
            break
    print("Invalid age. Please try again.")

print(f"Your age is: {age}")

这段代码重复要求输入,直到提供一个介于 1 和 120 之间的有效年龄。它首先检查输入是否只包含数字。

该验证结合了多项检查:数字检查、范围检查和转换安全性。这创建了一个健壮的输入机制。

多个输入

我们可以通过分割输入字符串一次处理多个输入。这个例子展示了如何处理空格分隔的值。

multiple_inputs.py
# Get multiple numbers on one line
nums_input = input("Enter 3 numbers separated by spaces: ")
nums = nums_input.split()

if len(nums) == 3:
    try:
        a, b, c = map(float, nums)
        print(f"Sum: {a + b + c}")
    except ValueError:
        print("Please enter valid numbers!")
else:
    print("Please enter exactly 3 numbers.")

这个例子接受一个输入中的三个数字。split 方法按空格分割字符串,map 转换所有值。

代码包括对输入数量及其可转换为数字的验证,使其能够应对各种错误。

密码输入

对于密码等敏感输入,我们可以使用 getpass 模块隐藏打字,该模块的工作方式与 input 类似。

password.py
from getpass import getpass

username = input("Username: ")
password = getpass("Password: ")

if username == "admin" and password == "secret":
    print("Access granted")
else:
    print("Access denied")

getpass 函数隐藏用户输入,这对于密码输入至关重要。它在输入时在控制台中不可见。

请注意,在某些 IDE 中,getpass 可能无法按预期工作,并可能回退到常规输入。它在终端环境中效果最佳。

最佳实践

资料来源

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。 我从 2007 年开始撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程