什么是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 列表,逐行打印出之前收集的所有输入内容。
实用技巧
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("输入无效,请再试一次!")
进阶从标準输入读取
import sys
lines = []
for line in sys.stdin:
lines.append(line.strip()) # 去掉每行的换行符
# 处理 lines 列表中的每一行输入
for line in lines:
print(line) # 或对每行进行进一步处理
lines = []
while True:
line = input().strip()
if line == "": # 当遇到空行时结束
break
lines.append(line)
# 处理 lines 列表中的每一行输入
for line in lines:
print(line)
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()