跳到主要内容

输入与输出

学习目标

  • 掌握 print() 的各种用法和格式化输出
  • 学会用 input() 获取用户输入
  • 理解 f-string 格式化的高级用法
  • 能编写简单的交互式程序

先看一个小程序

name = input("请输入你的名字: ")
age = int(input("请输入你的年龄: "))

print(f"你好,{name}!")
print(f"你出生于大约 {2026 - age} 年")
print(f"10 年后你就 {age + 10} 岁了")

运行效果:

请输入你的名字: 小明
请输入你的年龄: 25
你好,小明!
你出生于大约 2001 年
10 年后你就 35 岁了

这就是最基本的输入输出——input() 负责接收数据,print() 负责展示结果。


print() 是你最常用的函数,没有之一。

基本用法

# 打印字符串
print("Hello, World!")

# 打印数字
print(42)
print(3.14)

# 打印变量
name = "Python"
print(name)

# 打印表达式的结果
print(1 + 2 + 3) # 6

打印多个值

# 用逗号分隔,print 会自动用空格连接
print("姓名:", "小明", "年龄:", 25)
# 输出: 姓名: 小明 年龄: 25

# 自定义分隔符
print("2026", "01", "15", sep="-")
# 输出: 2026-01-15

print("apple", "banana", "cherry", sep=" | ")
# 输出: apple | banana | cherry

控制换行

# 默认每个 print 之后会换行
print("第一行")
print("第二行")
# 输出:
# 第一行
# 第二行

# 用 end 参数改变结尾字符
print("Hello", end=" ")
print("World")
# 输出: Hello World(在同一行)

# 用 end 实现简单的进度显示
print("加载中", end="")
print(".", end="")
print(".", end="")
print(".", end="")
print(" 完成!")
# 输出: 加载中... 完成!

打印特殊字符

# 换行符 \n
print("第一行\n第二行\n第三行")
# 输出:
# 第一行
# 第二行
# 第三行

# 制表符 \t(用来对齐)
print("姓名\t年龄\t城市")
print("张三\t25\t北京")
print("李四\t30\t上海")
# 输出:
# 姓名 年龄 城市
# 张三 25 北京
# 李四 30 上海

# 反斜杠本身 \\
print("文件路径: C:\\Users\\Desktop")

# 原始字符串(不处理转义)
print(r"文件路径: C:\Users\Desktop") # r 前缀表示原始字符串

f-string 格式化(重点)

f-string 是 Python 3.6 引入的字符串格式化方式,也是目前最推荐的方式。

基本用法

name = "小明"
age = 25
score = 92.567

# 在字符串前加 f,花括号里放变量名
print(f"我叫{name},今年{age}岁")
# 输出: 我叫小明,今年25岁

# 花括号里可以放任何表达式
print(f"明年我 {age + 1} 岁")
print(f"名字有 {len(name)} 个字")
print(f"及格了吗?{'是' if score >= 60 else '否'}")

数字格式化

这是 f-string 最强大的功能之一:

# 控制小数位数
pi = 3.141592653589793
print(f"π = {pi:.2f}") # 3.14(保留 2 位小数)
print(f"π = {pi:.4f}") # 3.1416(保留 4 位小数)

# 百分比
accuracy = 0.8734
print(f"准确率: {accuracy:.1%}") # 87.3%
print(f"准确率: {accuracy:.2%}") # 87.34%

# 千分位分隔
population = 1400000000
print(f"人口: {population:,}") # 1,400,000,000
print(f"人口: {population:_}") # 1_400_000_000

# 科学计数法
speed_of_light = 299792458
print(f"光速: {speed_of_light:.2e} m/s") # 3.00e+08 m/s

# 整数补零
for i in range(1, 4):
print(f"第 {i:03d} 集") # 第 001 集、第 002 集、第 003 集

对齐和填充

# 左对齐、右对齐、居中
name = "Python"
print(f"|{name:<20}|") # |Python | 左对齐
print(f"|{name:>20}|") # | Python| 右对齐
print(f"|{name:^20}|") # | Python | 居中

# 用指定字符填充
print(f"|{name:*<20}|") # |Python**************|
print(f"|{name:*>20}|") # |**************Python|
print(f"|{name:*^20}|") # |*******Python*******|

# 实际应用:打印一个简单的表格
print(f"{'姓名':<10}{'分数':>10}")
print("-" * 20)
print(f"{'张三':<10}{95:>10}")
print(f"{'李四':<10}{87:>10}")
print(f"{'王五':<10}{92:>10}")

输出:

姓名            分数
--------------------
张三 95
李四 87
王五 92

格式化速查表

格式含义示例结果
:.2f保留 2 位小数f"{3.14159:.2f}"3.14
:.1%百分比(1 位小数)f"{0.873:.1%}"87.3%
:,千分位分隔f"{1000000:,}"1,000,000
:.2e科学计数法f"{12345:.2e}"1.23e+04
:03d补零到 3 位f"{5:03d}"005
:<10左对齐,宽度 10f"{'hi':<10}"hi________
:>10右对齐,宽度 10f"{'hi':>10}"________hi
:^10居中,宽度 10f"{'hi':^10}"____hi____

input() 获取用户输入

input() 会暂停程序,等待用户输入,然后返回用户输入的字符串。

基本用法

# input() 返回的始终是字符串!
name = input("请输入你的名字: ")
print(f"你好,{name}!")
print(type(name)) # <class 'str'>

重要:input() 返回的是字符串

# 常见陷阱
age = input("请输入年龄: ") # 用户输入 25
print(type(age)) # <class 'str'>,不是 int!

# 如果直接做数学运算会出问题
# print(age + 1) # 报错!字符串不能加数字

# 正确做法:先转换类型
age = int(input("请输入年龄: ")) # 输入的同时转成整数
print(f"明年你 {age + 1} 岁")

# 如果需要浮点数
height = float(input("请输入身高(米): "))
print(f"你的身高是 {height} 米")

处理非法输入

用户可能输入你预期之外的内容:

# 用户输入了 "abc" 而不是数字
# age = int(input("请输入年龄: ")) # 会报 ValueError!

# 安全的做法(后面学了异常处理会更优雅)
user_input = input("请输入一个数字: ")
if user_input.isdigit():
number = int(user_input)
print(f"你输入的数字是: {number}")
else:
print("这不是一个有效的数字!")

综合案例

案例 1:简易计算器

print("=== 简易计算器 ===")
num1 = float(input("请输入第一个数: "))
num2 = float(input("请输入第二个数: "))

print(f"\n计算结果:")
print(f"{num1} + {num2} = {num1 + num2}")
print(f"{num1} - {num2} = {num1 - num2}")
print(f"{num1} × {num2} = {num1 * num2}")
if num2 != 0:
print(f"{num1} ÷ {num2} = {num1 / num2:.2f}")
else:
print("除数不能为 0!")

案例 2:AI 训练报告生成器

# 模拟训练结果数据
model_name = "ResNet-50"
total_epochs = 100
train_accuracy = 0.9534
val_accuracy = 0.9187
train_loss = 0.1245
val_loss = 0.2891
training_hours = 2.5

# 生成格式化的报告
print("=" * 40)
print(f"{'模型训练报告':^40}")
print("=" * 40)
print(f"模型名称: {model_name}")
print(f"训练轮数: {total_epochs}")
print(f"训练准确率: {train_accuracy:.2%}")
print(f"验证准确率: {val_accuracy:.2%}")
print(f"训练损失: {train_loss:.4f}")
print(f"验证损失: {val_loss:.4f}")
print(f"训练时长: {training_hours:.1f} 小时")
print("-" * 40)

# 判断模型状态
gap = train_accuracy - val_accuracy
if gap > 0.05:
print(f"⚠️ 过拟合风险: 训练/验证差距 {gap:.2%}")
else:
print(f"✅ 模型状态良好: 训练/验证差距 {gap:.2%}")
print("=" * 40)

输出:

========================================
模型训练报告
========================================
模型名称: ResNet-50
训练轮数: 100
训练准确率: 95.34%
验证准确率: 91.87%
训练损失: 0.1245
验证损失: 0.2891
训练时长: 2.5 小时
----------------------------------------
⚠️ 过拟合风险: 训练/验证差距 3.47%
========================================

动手练习

练习 1:自我介绍生成器

写一个程序,接收用户的姓名、年龄、城市、爱好,然后生成格式化的自我介绍:

name = input("你的名字: ")
age = int(input("你的年龄: "))
city = input("你的城市: ")
hobby = input("你的爱好: ")

# 在下方生成自我介绍
print("=" * 30)
# ... 补充代码
print("=" * 30)

练习 2:购物小票

# 输入商品信息
item1 = "Python 教材"
price1 = 59.9
qty1 = 2

item2 = "笔记本"
price2 = 15.5
qty2 = 3

# 打印购物小票,要求:
# 1. 商品名左对齐,价格右对齐
# 2. 显示每项小计
# 3. 最后显示总计
# 提示:使用 f-string 对齐功能

练习 3:单位转换器

写一个程序,让用户输入公里数,然后输出对应的英里数和米数:

km = float(input("请输入公里数: "))
# 1 公里 = 0.621371 英里
# 1 公里 = 1000 米
# 补充代码,输出格式:保留 2 位小数

小结

函数/语法用途关键点
print()输出信息sep 改分隔符,end 改结尾
input()获取用户输入返回值始终是字符串
f"..."格式化字符串{变量:格式} 控制显示方式
int() / float()类型转换input() 后通常需要转换
核心理解

输入和输出是程序与外界交互的窗口。 input() 让程序变得灵活(不同输入不同结果),print() 加上 f-string 格式化让输出变得专业美观。写代码时多用 print() 来查看中间结果,这是最基本的调试手段。