## Python基本输入输出方法详解
Python中的输入输出是编程的基础,主要通过`input()`和`print()`函数实现。下面我将从基础语法、参数详解、格式化输出以及实际应用场景等方面进行全面介绍。
### 一、输入函数:input()
`input()`函数用于从标准输入(通常是键盘)读取一行文本,并以字符串形式返回。
#### 1. 基本语法
```python
# 基础用法
name = input("请输入您的姓名: ") # 提示用户输入姓名
print(f"您好,{name}!")
```
**参数说明**:
- `prompt`:可选参数,显示给用户的提示信息
- 返回值:总是字符串类型 [ref_1]
#### 2. 类型转换技巧
由于`input()`返回的是字符串,经常需要转换为其他数据类型:
```python
# 转换为整数
age = int(input("请输入您的年龄: ")) # [ref_1]
# 转换为浮点数
height = float(input("请输入身高(米): "))
# 转换为布尔值(注意:非空字符串转为True,空字符串转为False)
has_license = bool(input("是否有驾照(直接回车表示无): "))
# 同时输入多个值
a, b = map(int, input("请输入两个整数,用空格分隔: ").split()) # [ref_1]
```
#### 3. 多行输入处理
```python
# 方法1:循环读取多行
lines = []
print("请输入多行内容,输入空行结束:")
while True:
line = input()
if line == "":
break
lines.append(line)
# 方法2:使用splitlines处理多行文本
multi_line = input("请输入多行文本(用\\n分隔): ")
result = multi_line.splitlines()
```
### 二、输出函数:print()
`print()`函数用于将内容输出到标准输出(通常是屏幕)。
#### 1. 基本语法和参数
```python
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) # [ref_1]
```
**参数详解**:
| 参数名 | 默认值 | 说明 |
|--------|--------|------|
| `objects` | 无 | 要输出的一个或多个对象 |
| `sep` | 空格 | 多个对象间的分隔符 |
| `end` | 换行符(`\n`) | 输出结束时的字符 |
| `file` | `sys.stdout` | 输出目标文件对象 |
| `flush` | `False` | 是否强制刷新输出流 |
#### 2. 常用输出示例
```python
# 基础输出
print("Hello, World!") # 输出:Hello, World!
# 输出多个值
print("Python", "Java", "C++") # 输出:Python Java C++ [ref_1]
# 自定义分隔符
print("2024", "05", "20", sep="-") # 输出:2024-05-20
# 自定义结束符
print("正在加载", end="...")
print("完成!") # 输出:正在加载...完成! [ref_1]
# 输出到文件
with open("output.txt", "w") as f:
print("保存到文件", file=f)
```
### 三、格式化输出方法
Python提供了多种格式化输出的方式,各有适用场景:
#### 1. f-string(Python 3.6+推荐)
```python
name = "张三"
age = 25
score = 95.5
# 基本用法
print(f"姓名:{name},年龄:{age},分数:{score}")
# 格式控制
print(f"分数:{score:.2f}") # 保留两位小数:分数:95.50
print(f"年龄:{age:03d}") # 补零到3位:年龄:025
print(f"百分比:{0.75:.1%}") # 百分比格式:百分比:75.0% [ref_4]
```
#### 2. format()方法
```python
# 位置参数
print("{}的年龄是{}岁".format("李四", 30))
# 关键字参数
print("{name}考了{score}分".format(name="王五", score=88))
# 格式控制
print("价格:{:.2f}".format(99.999)) # 价格:100.00
print("二进制:{:b}".format(10)) # 二进制:1010 [ref_4]
print("十六进制:{:x}".format(255)) # 十六进制:ff
```
#### 3. %格式化(传统方法)
```python
# 字符串
print("姓名:%s" % "赵六")
# 整数和浮点数
print("年龄:%d岁,身高:%.2f米" % (28, 1.75))
# 多个值
print("%s今年%d岁,成绩%.1f分" % ("钱七", 22, 92.5)) # [ref_4]
```
### 四、高级输入输出技巧
#### 1. 控制台颜色输出
```python
# ANSI转义序列实现彩色输出
class Colors:
RED = '\033[91m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
BLUE = '\033[94m'
END = '\033[0m'
print(f"{Colors.RED}错误信息{Colors.END}")
print(f"{Colors.GREEN}成功信息{Colors.END}")
```
#### 2. 进度条显示
```python
import time
def show_progress(total, current):
percent = current / total * 100
bar_length = 50
filled_length = int(bar_length * current // total)
bar = '█' * filled_length + '-' * (bar_length - filled_length)
print(f'\r[{bar}] {percent:.1f}%', end='', flush=True) # [ref_1]
# 使用示例
for i in range(101):
show_progress(100, i)
time.sleep(0.05)
print() # 换行
```
#### 3. 表格化输出
```python
# 使用字符串格式化创建表格
students = [
{"姓名": "张三", "年龄": 20, "成绩": 85},
{"姓名": "李四", "年龄": 22, "成绩": 92},
{"姓名": "王五", "年龄": 21, "成绩": 78}
]
print(f"{'姓名':<10}{'年龄':<10}{'成绩':<10}")
print("-" * 30)
for student in students:
print(f"{student['姓名']:<10}{student['年龄']:<10}{student['成绩']:<10}")
```
### 五、实际应用场景示例
#### 1. 计算器程序
```python
# 简单计算器
print("=== 简单计算器 ===")
try:
num1 = float(input("请输入第一个数字: "))
num2 = float(input("请输入第二个数字: "))
operation = input("请选择操作(+, -, *, /): ")
if operation == '+':
result = num1 + num2
elif operation == '-':
result = num1 - num2
elif operation == '*':
result = num1 * num2
elif operation == '/':
if num2 != 0:
result = num1 / num2
else:
print("错误:除数不能为0!")
result = None
else:
print("错误:无效的操作符!")
result = None
if result is not None:
print(f"结果:{num1} {operation} {num2} = {result:.2f}")
except ValueError:
print("错误:请输入有效的数字!") # [ref_4]
```
#### 2. 学生成绩管理系统
```python
# 学生成绩输入输出
students = []
def add_student():
name = input("请输入学生姓名: ")
while True:
try:
score = float(input("请输入成绩(0-100): "))
if 0 <= score <= 100:
break
else:
print("成绩必须在0-100之间!")
except ValueError:
print("请输入有效的数字!")
students.append({"姓名": name, "成绩": score})
print(f"已添加学生:{name},成绩:{score}")
def show_statistics():
if not students:
print("暂无学生数据")
return
scores = [s["成绩"] for s in students]
avg_score = sum(scores) / len(scores)
max_score = max(scores)
min_score = min(scores)
print("\n=== 成绩统计 ===")
print(f"学生总数:{len(students)}")
print(f"平均分:{avg_score:.2f}")
print(f"最高分:{max_score:.2f}")
print(f"最低分:{min_score:.2f}")
# 输出成绩分布
print("\n成绩分布:")
for student in sorted(students, key=lambda x: x["成绩"], reverse=True):
grade = "优秀" if student["成绩"] >= 90 else "良好" if student["成绩"] >= 80 else "中等" if student["成绩"] >= 70 else "及格" if student["成绩"] >= 60 else "不及格"
print(f" {student['姓名']}: {student['成绩']:.1f} ({grade})")
```
#### 3. 文件读写结合控制台输入输出
```python
# 日志记录系统
import datetime
def log_message(level, message):
"""记录日志到文件和控制台"""
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
log_entry = f"[{timestamp}] [{level}] {message}"
# 输出到控制台(带颜色)
if level == "ERROR":
print(f"\033[91m{log_entry}\033[0m") # 红色
elif level == "WARNING":
print(f"\033[93m{log_entry}\033[0m") # 黄色
elif level == "INFO":
print(f"\033[92m{log_entry}\033[0m") # 绿色
else:
print(log_entry)
# 写入文件
with open("app.log", "a", encoding="utf-8") as f:
print(log_entry, file=f) # [ref_1]
# 使用示例
log_message("INFO", "程序启动")
user_input = input("请输入操作指令: ")
log_message("INFO", f"用户输入:{user_input}")
```
### 六、注意事项和最佳实践
1. **输入验证**:始终验证用户输入,避免程序崩溃
2. **异常处理**:使用try-except处理可能的输入错误
3. **格式化一致性**:保持输出格式的统一和美观
4. **性能考虑**:大量输出时考虑使用缓冲区
5. **国际化**:如果需要支持多语言,考虑使用gettext等工具
通过掌握这些输入输出方法,您可以创建更加友好、健壮的Python应用程序。实际开发中,根据具体需求选择合适的输入输出方式,并注意用户体验和程序稳定性。 [ref_2][ref_3][ref_4][ref_5][ref_6]