什么是input():

在 Python 中,用户输入是透过内建函式 input() 来完成的。它允许程式从终端(或命令列)接收用户输入,并将其作为字串返回。基础用法input() 函式可以用来提示用户输入内容。

name = input("请输入你的名字: ") # 用户输入
print(f"你好, {name}!") # 显示输入的结果

输出请输入你的名字: Alice 你好, Alice!

age = int(input("请输入你的年龄: ")) # 转换为整数
height = float(input("请输入你的身高(以公尺为单位): ")) # 转换为浮点数

print(f"你的年龄是 {age} 岁,身高是 {height:.2f} 公尺。")

输出请输入你的年龄: 25 请输入你的身高(以公尺为单位): 1.75 你的年龄是 25 岁,身高是 1.75 公尺。

处理数值输入

由于 input() 的返回值总是 字串型别 (str),如果需要处理数值,可以使用 int() 或 float() 进行转换。在 Python 中,处理不定行输入可以使用以下几种方式,具体取决于输入来源和需求:

  • sys.stdin:适合处理批量输入(特别是在竞赛环境)。
  • try-except 与 input():适合不定行的标準输入。
  • 空行结束:适合用户手动结束输入

单行多个输入

可以使用 split() 方法将单行输入分隔成多个值,或者通过 for 迴圈多次接收输入。

data = input("请输入三个数字(以空格分隔): ").split() # 将输入分割为清单
numbers = list(map(int, data)) # 转换成整数清单
print(f"输入的数字是: {numbers}")

请输入三个数字(以空格分隔): 5 10 20 输入的数字是: [5, 10, 20]

固定多行输入

lines = []
for _ in range(3): # 接收三行输入
lines.append(input("请输入内容: "))

print("你输入的内容是:")
print("\\n".join(lines))

不确定几行数入

当我们不知道输入的行数时,最直观的方法就是一直读取输入,直到遇到一个特定的结束标记或达到档案结尾。Python 提供了几种方式来处理这种情况。

方法一:使用 while 迴圈和 input()

#初始化一个空字符串 result 用来储存最终的结果。
result = ""
#使用 while True 创造一个无限循环。
while True:
line = input()
# 当用户输入内容为空行并按下enter后,表示输入结束,跳出循环。
if not line:
break
result += line + "-"#将读取到的行连同 - 拼接至 result。

print(result)

优点:简单易懂,适合初学者。可以灵活处理各种输入。

try excpet 处理输入错误

预期使用者可能会输入不符合预期格式的数据时,当输入结束标誌不确定时,可以使用 input() 配合 try-except,适用于未知行数的情况,为了防止用户输入无效资料

使用 try-except 处理不定行输入的优点:

  • 错误处理: 可以捕获并处理各种异常,例如 ValueError(当输入无法转换为预期数据类型时)、EOFError(当遇到输入结束符时)等。
  • 程式稳定性: 即使使用者输入错误,程式也不会突然终止,而是会进入 except 块,进行相应的处理。
  • 弹性: 可以根据不同的异常类型,採取不同的处理措施。

lines = [] # 创建一个空列表,用来存储每行的输入内容
try:
while True:
line = input().strip() # 使用 input() 来读取每行的输入,并用 strip() 去掉首尾空白
lines.append(line) # 将每行输入追加到 lines 列表中
except EOFError:
pass # 遇到 EOFError(表示输入结束)时停止读取,不进行任何其他操作

# 处理 lines 列表中的每一行输入
for line in lines:
print(line) # 逐行打印出列表中的每个元素

代码详解:1.初始化 lines 列表:lines = []:创建一个空列表,用于存储每行的输入。2.尝试无限循环读取输入:while True: 进入一个无限循环,预期会不断从标準输入读取新行。3.读取并处理每行输入:line = input().strip():使用 input() 读取一行输入。.strip() 去掉每行开头和结尾的空白或换行符,避免多余空格影响后续处理。每行输入被存储为 line。4.将输入行添加到列表中:lines.append(line):使用 .append() 方法将每行输入逐一添加到 lines 列表中。5.捕获 EOFError (End Of File Error)异常:except EOFError:EOFError 表示无更多输入,通常在使用 Ctrl+D (Unix/Mac) 或 Ctrl+Z (Windows) 终止输入后触发。捕获 EOFError 后会退出 try 区块。6.逐行打印存储的输入内容:for line in lines::遍历 lines 列表,逐行打印出之前收集的所有输入内容。

实用技巧

  • 提供输入预设值:如果用户按下 Enter 键而不输入内容,可使用条件设定预设值。
  • name = input("请输入名字(预设:Anonymous): ") or "Anonymous"
    print(f"你好, {name}!")

    2.强制输入特定格式:例如,限制输入数字范围或文字长度。

    while True:
    value = input("请输入 1 到 10 的数字: ")
    if value.isdigit() and 1 <= int(value) <= 10:
    print(f"你输入的数字是 {value}")
    break
    print("输入无效,请再试一次!")

    进阶从标準输入读取

  • sys.stdin(适用于大多数竞赛、终端的批量输入)当输入行数不定时,可以使用 sys.stdin 来读取标準输入,直到读取结束:
  • import sys

    lines = []
    for line in sys.stdin:
    lines.append(line.strip()) # 去掉每行的换行符

    # 处理 lines 列表中的每一行输入
    for line in lines:
    print(line) # 或对每行进行进一步处理

  • 直接使用 input() 读取直到某条件(如空行)可以设置一个特殊条件,比如用户输入空行时结束:
  • lines = []
    while True:
    line = input().strip()
    if line == "": # 当遇到空行时结束
    break
    lines.append(line)

    # 处理 lines 列表中的每一行输入
    for line in lines:
    print(line)

  • input() 读取多行,直到获取指定数量的行如果知道行数不固定,但可以根据数据的某个特徵判断(例如第一行指定数量),可以读取该数据后设置循环:
  • n = int(input("请输入行数: ")) # 假设第一行表示后续行数
    lines = [input().strip() for _ in range(n)]

    # 处理 lines 列表中的每一行输入
    for line in lines:
    print(line)

    进阶输入法文章:Multiple line input 处理未知行数输入的 Python 程式

    • 使用生成器表达式优化使用 while 迴圈和 input()
    • 方法使用 sys.stdin.readline()