在Python编程中,input()
和print()
是两个最基础的交互函数,分别用于获取用户输入和输出信息。
一、input() 函数
1. 核心功能
- 用途:从标准输入(如键盘)读取用户输入的内容。
- 返回值:始终返回字符串类型,即使输入的是数字。
- 阻塞特性:程序执行到
input()
时会暂停,直到用户按下回车键。
2. 语法与参数
user_input = input([prompt, *, default])
prompt
(可选):在输入框前显示的提示文本(如input("请输入年龄:")
)。default
(部分环境支持):用户直接回车时返回的默认值(如input("确认?", default="是")
)。
3. 关键操作
- 类型转换:
因input()
返回字符串,需手动转换类型:age = int(input("请输入年龄:")) # 转为整数 price = float(input("请输入价格:")) # 转为浮点数
- 多值输入:
用split()
分割字符串,结合map()
批量转换类型:a, b = map(int, input("输入两个数(空格分隔): ").split())
- 异常处理:
对非法输入(如字母转数字)使用try-except
:try: num = int(input("请输入整数:")) except ValueError: print("输入无效!")
4. 典型场景
- 交互式程序:如登录界面、计算器。
- 动态配置:根据用户输入调整程序行为。
- 数据收集:从控制台获取测试数据。
二、print() 函数详解
1. 核心功能
- 用途:将内容输出到控制台或文件。
- 支持内容:字符串、变量、表达式、格式化文本。
2. 语法与参数
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
*objects
:要输出的多个对象(用逗号分隔)。sep
:对象间分隔符(默认空格)。end
:输出结尾字符(默认换行符\n
)。file
:输出目标(如文件对象)。flush
:是否强制刷新缓冲区(默认False
)。
3. 关键操作
- 格式化输出:
- f-string(推荐):
name = "Alice" age = 25 print(f"{name}今年{age}岁") # 输出:Alice今年25岁
format()
方法:print("坐标:({}, {})".format(10, 20)) # 输出:坐标:(10, 20)
- 百分号格式化:
print("价格:%.2f元" % 19.99) # 输出:价格:19.99元
- f-string(推荐):
- 控制输出格式:
- 不换行:设置
end=""
print("Hello", end=" ") print("World!") # 输出:Hello World!
- 自定义分隔符:设置
sep
print("A", "B", "C", sep="-") # 输出:A-B-C
- 不换行:设置
- 输出到文件:
with open("output.txt", "w") as f: print("写入文件的内容", file=f)
4. 典型场景
- 调试信息:输出变量值或程序状态。
- 用户反馈:在交互式程序中显示结果。
- 日志生成:将运行记录写入文件。
- 格式化报表:生成结构化文本输出。
三、input() 与 print() 协同示例
# 简单计算器
num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))
operator = input("请输入运算符(+、-、*、/):")
if operator == "+":
result = num1 + num2
elif operator == "-":
result = num1 - num2
elif operator == "*":
result = num1 * num2
elif operator == "/":
if num2 != 0:
result = num1 / num2
else:
print("错误:除数不能为零!")
exit()
else:
print("错误:无效运算符!")
exit()
print(f"{num1} {operator} {num2} = {result}")
四、注意事项
- 类型安全:
input()
返回字符串,务必根据需求转换类型。- 对用户输入进行验证,避免程序崩溃。
- 性能优化:
- 频繁调用
print()
可能影响性能,建议批量输出或使用日志模块。
- 频繁调用
- 编码问题:
- 输出非ASCII字符时,确保终端或文件编码为UTF-8。
五、基本文件操作
操作目的:编写程序实现将用户input进来的内容print到某个文件中去这里提供两种常用方法:
方法一:使用 print()
的 file
参数
print()
函数本身支持直接指定输出目标文件,无需手动调用write()
方法。
步骤说明
- 打开文件:使用
open()
函数以写入模式('w'
)或追加模式('a'
)打开文件。'w'
:覆盖写入(文件已存在则清空内容,**注意这里会覆盖你原先文件里面的内容所以设置该模式之前请想清楚操作目的和文件情况 **)。'a'
:追加写入(保留原有内容,新内容添加到末尾)。
- 获取输入:通过
input()
读取用户输入。 - 输出到文件:在
print()
中设置file
参数为已打开的文件对象。 - 自动关闭文件:推荐使用
with
语句管理文件,确保操作完成后自动关闭。
示例代码
# 打开文件(追加模式,避免覆盖原有内容)
with open("output.txt", "a", encoding="utf-8") as f:
user_input = input("请输入内容:")
# 将输入内容写入文件,不自动换行(若需换行,在内容后加\n)
print(user_input, file=f)
print("内容已保存到 output.txt")
方法二:使用文件对象的 write()
方法
直接操作文件对象,手动控制写入内容和格式。
步骤说明
- 打开文件:同方法一,选择合适的模式。
- 获取输入:通过
input()
读取用户输入。 - 写入文件:调用文件对象的
write()
方法,需手动处理换行符。 - 关闭文件:使用
with
语句自动管理,或手动调用close()
。
示例代码
# 打开文件(覆盖模式)
with open("output.txt", "w", encoding="utf-8") as f:
user_input = input("请输入内容:")
# 写入内容并添加换行符
f.write(user_input + "\n")
print("内容已保存到 output.txt")
关键参数解释
mode
模式:'w'
:覆盖写入(危险!会清空原文件)。'a'
:追加写入(安全,保留历史内容)。'r+'
:读写模式(需谨慎使用)。
encoding
编码:- 指定文件编码(如
utf-8
),避免中文乱码。
- 指定文件编码(如
\n
换行符:write()
不会自动换行,需手动添加。print()
默认换行,可通过end=""
取消。
实际应用场景
- 日志记录:将用户操作或错误信息保存到日志文件。
- 数据采集:批量保存用户输入的数据(如调查问卷)。
- 自动化脚本:将程序运行结果输出到报告文件。
扩展:同时输出到屏幕和文件
若需同时显示在控制台并保存到文件,可结合两种方法:
with open("output.txt", "a", encoding="utf-8") as f:
user_input = input("请输入内容:")
print(user_input) # 输出到屏幕
print(user_input, file=f) # 输出到文件
通过上述方法可以灵活地将用户输入的内容保存到文件中,根据需求选择合适的模式('w'
或'a'
),并注意文件编码和换行处理。
六、多行输入并保存至文件
针对多行输入保存到文件的详细实现方案:
一、Python 实现方案
1. 基础写入模式
# 覆盖模式(默认)
with open("output.txt", "w") as f:
f.write("第一行内容\n")
f.write("第二行内容\n")
# 追加模式
with open("output.txt", "a") as f:
f.write("新增行内容\n")
2. 多行字符串写入
content = """第一行
第二行
第三行"""
with open("output.txt", "w") as f:
f.write(content)
3. 逐行读取输入并写入
lines = []
print("输入多行内容(输入空行结束):")
while True:
line = input()
if line.strip() == "":
break
lines.append(line)
with open("output.txt", "w") as f:
f.write("\n".join(lines))
七、文件删除操作(可先了解,不要求小白掌握)
一、Python 实现方案
1. 按行号删除(适合小文件)
def delete_line_by_number(filename, line_num):
with open(filename, 'r') as f:
lines = f.readlines()
del lines[line_num-1] # 行号从1开始,列表索引从0开始
with open(filename, 'w') as f:
f.writelines(lines)
# 示例:删除文件第3行
delete_line_by_number("data.txt", 3)
2. 按内容删除(支持字符串或正则)
import re
def delete_line_by_content(filename, pattern):
with open(filename, 'r') as f:
lines = f.readlines()
# 使用正则表达式匹配需删除的行
new_lines = [line for line in lines if not re.search(pattern, line)]
with open(filename, 'w') as f:
f.writelines(new_lines)
# 示例:删除包含"ERROR"的行
delete_line_by_content("log.txt", r"ERROR")
3. 逐行处理大文件(避免内存溢出)
def delete_line_large_file(filename, line_num):
temp_filename = filename + ".tmp"
with open(filename, 'r') as f_in, open(temp_filename, 'w') as f_out:
for current_line, line in enumerate(f_in, 1):
if current_line != line_num:
f_out.write(line)
import os
os.replace(temp_filename, filename) # 原子替换
# 示例:删除第10000行
delete_line_large_file("big_data.csv", 10000)