第四篇:输入与输出——print() 和 input() 完全指南
前言
到目前为止,我们已经学会了如何搭建 Python 环境并写出第一个程序。现在我们要进入更深入的阶段:让程序真正地与我们交互。本文将全面讲解 print() 函数的各种用法(包括分隔符、结束符、格式化输出)和 input() 函数的使用方法,以及如何通过类型转换编写实用的交互程序。
print() 函数的基本用法
print() 是 Python 中最常用的内置函数之一,它负责将内容输出到终端。
基础输出
# 最简单的用法:直接输出字符串
print("Hello, World!")
# 输出数字
print(42)
# 同时输出多个对象(用空格分隔)
print("年龄:", 25, "岁")
输出结果:
Hello, World!
42
年龄:25 岁
注意:默认情况下,print() 在多个参数之间插入一个空格作为分隔符。
sep 参数:自定义分隔符
sep 参数定义了多个值之间的分隔方式。默认值为空格 " "。
# 使用默认空格分隔
print("Python", "Java", "C++")
# 输出:Python Java C++
# 使用逗号分隔
print("Python", "Java", "C++", sep=", ")
# 输出:Python, Java, C++
# 使用连字符分隔
print("2026", "09", "09", sep="-")
# 输出:2026-09-09
# 使用制表符分隔
print("姓名", "年龄", "城市", sep="\t")
# 输出:姓名 年龄 城市
# 去掉分隔符
print("H", "e", "l", "l", "o", sep="")
# 输出:Hello
# 多级分隔(适合表格数据)
print("姓名", "年龄", "职业", sep=" | ")
end 参数:自定义结尾符号
end 参数定义了一行输出结束后追加的字符。默认值为换行符 "\n"。
# 默认行为:每行自动换行
print("第一行")
print("第二行")
# 输出:
# 第一行
# 第二行
# 不使用换行,在同一行显示
print("加载中", end="...")
print("完成!", end="\n\n")
# 输出:加载中...完成!
# 使用等号填充边框
for i in range(5):
print("*", end="")
print() # 添加一个空行
# 输出:*****
flush 参数:强制刷新缓冲区
# 实时显示计数过程
import time
for i in range(5):
print(i, end=" ", flush=True) # 立即输出到屏幕
time.sleep(1)
# 输出:0 1 2 3 4 (每秒递增)
默认情况下,print() 会将输出暂存到缓冲区中,达到一定大小后才批量输出。设置 flush=True 可以强制立即输出,适用于实时显示场景。
字符串格式化输出
Python 提供了多种字符串格式化方式,每种都有适用的场景。
f-string(推荐方式)
f-string 是 Python 3.6+ 引入的最简洁强大的格式化方式:
name = "小明"
age = 25
height = 1.75
# 基础 f-string
print(f"我叫 {name},今年 {age} 岁")
# 包含数学表达式
print(f"身高 {height} 米 = {height * 100} 厘米")
# 多行 f-string
info = f"""姓名:{name}
年龄:{age}
身高:{height}m"""
print(info)
# 限制小数位数
price = 19.9
tax = price * 0.13
print(f"价格:{price:.2f} 元,税费:{tax:.2f} 元")
# 输出:价格:19.90 元,税费:2.59 元
# 对齐和填充
name = "张三"
print(f"[{' ':<10}] {name}")
# 输出:[ ] 张三
# 数字格式
number = 1234567
print(f"金额:¥{number:,}")
# 输出:金额:¥1,234,567
percentage = 0.856
print(f"完成率:{percentage:.1%}")
# 输出:完成率:85.6%
f-string 的优势:
- 语法最简洁直观
- 支持任意 Python 表达式
- 性能优于
.format()和%运算符 - 可以直接调用方法和访问属性
.format() 方法
.format() 是较旧的格式化方式,仍然广泛使用:
# 位置参数
print("{} {} {}".format("I", "love", "Python"))
# 输出:I love Python
# 索引参数
print("{1} {0}".format("World", "Hello"))
# 输出:Hello World
# 命名参数
print("姓名:{name}, 年龄:{age}".format(name="小红", age=22))
# 混合格式
print("{0} {1} {0}".format("hello", "world"))
# 输出:hello world hello
% 运算符(旧式风格)
这是受 C 语言 printf 影响的传统方式:
# %s 字符串,%d 整数,%f 浮点数
name = "小明"
age = 25
score = 95.5
print("姓名:%s,年龄:%d,分数:%.1f" % (name, age, score))
# 输出:姓名:小明,年龄:25,分数:95.5
格式说明符速查表
| 格式符 | 含义 | 示例 | 输出 |
|---|---|---|---|
{:.2f} |
固定 2 位小数 | 3.14159 |
3.14 |
{:+.2f} |
带正负号 | -5.2 |
-5.20 |
{:.0%} |
百分比 | 0.85 |
85% |
{:,.2f} |
千分位 +2 位小数 | 1234567.8 |
1,234,567.80 |
{:>10} |
右对齐,宽度 10 | "Hi" |
Hi |
{:<10} |
左对齐,宽度 10 | "Hi" |
Hi |
{:^10} |
居中,宽度 10 | "Hi" |
Hi |
{:x} / {:X} |
十六进制小/大写 | 255 |
ff / FF |
input() 函数:获取用户输入
input() 用于从键盘读取用户的输入,返回值永远是字符串类型。
基本用法
# 不带提示文字
username = input()
print(f"欢迎回来,{username}!")
# 带提示文字(更常见)
password = input("请输入密码:")
print("密码已记录")
# 读取数字需要转换类型
age = int(input("请输入你的年龄:"))
print(f"你明年将 {age + 1} 岁")
数据类型转换
# 转换为整数
num = int(input("输入一个整数:"))
print(f"平方:{num ** 2}")
# 转换为浮点数
temperature = float(input("当前温度:"))
print(f"摄氏度:{temperature}°C")
# 转换为布尔值(非零为 True,0 为 False)
is_active = bool(int(input("是否激活(0/1):")))
print(f"状态:{'已激活' if is_active else '未激活'}")
# 转换为列表
numbers = list(map(int, input("输入数字,空格分隔:").split()))
print(f"总和:{sum(numbers)}")
# 输入:1 2 3 4 5 → 输出:总和:15
# 转换为字典(高级用法)
pairs = input("输入键值对,逗号分隔(key=value):")
data = dict(pair.split("=") for pair in pairs.split(","))
print(data)
# 输入:name=小明,age=25 → {'name': '小明', 'age': '25'}
处理无效输入
# 方式一:条件判断
while True:
age_str = input("请输入年龄(正整数):")
if age_str.isdigit():
age = int(age_str)
print(f"你输入了:{age}")
break
else:
print("错误:请输入有效的数字!")
# 方式二:try-except 异常处理(推荐)
while True:
try:
age = int(input("请输入年龄:"))
print(f"你输入了:{age}")
break
except ValueError:
print("错误:请输入有效的整数!请重试。")
综合实战:交互式程序
让我们把所学组合起来,编写几个实用的小程序。
程序一:简易 BMI 计算器
print("=" * 40)
print("BMI 身体质量指数计算器")
print("=" * 40)
name = input("请输入你的名字:")
height_cm = float(input("请输入你的身高(厘米):"))
weight_kg = float(input("请输入你的体重(公斤):"))
height_m = height_cm / 100
bmi = weight_kg / (height_m ** 2)
print(f"\n{'-' * 30}")
print(f"你好,{name}!")
print(f"你的 BMI 值是:{bmi:.1f}")
print(f"健康范围:18.5 - 24.9")
print(f"{'-' * 30}")
if bmi < 18.5:
print("状态:偏瘦 📉")
elif bmi <= 24.9:
print("状态:正常 ✅")
else:
print("状态:偏胖 📈")
运行效果:
========================================
BMI 身体质量指数计算器
========================================
请输入你的名字:小明
请输入你的身高(厘米):175
请输入你的体重(公斤):70
------------------------------
你好,小明!
你的 BMI 值是:22.9
健康范围:18.5 - 24.9
------------------------------
状态:正常 ✅
程序二:命令行待办清单
todos = []
print("📝 待办事项管理器")
print("输入 'quit' 退出,'list' 查看,'done' 标记完成")
while True:
action = input("\n操作:").strip().lower()
if action == "quit":
break
elif action == "list":
if todos:
for i, (task, done) in enumerate(todos, 1):
status = "✅" if done else "⬜"
print(f"{i}. [{status}] {task}")
else:
print("暂无任务")
elif action == "done":
try:
num = int(input("完成第几项?:"))
todos[num - 1][1] = True
print("已标记完成 ✅")
except (ValueError, IndexError):
print("无效编号")
else:
todos.append([action, False])
print(f"已添加:{action}")
print("\n感谢使用,再见!👋")
程序三:温度单位转换器
def convert_temperature(value, from_unit, to_unit):
"""温度单位转换工具函数"""
celsius = None
# 转为摄氏度
if from_unit.upper() == "C":
celsius = value
elif from_unit.upper() == "F":
celsius = (value - 32) * 5 / 9
elif from_unit.upper() == "K":
celsius = value - 273.15
else:
return "未知单位"
# 从摄氏度转出
if to_unit.upper() == "C":
return celsius
elif to_unit.upper() == "F":
return celsius * 9 / 5 + 32
elif to_unit.upper() == "K":
return celsius + 273.15
return "未知单位"
print("=== 温度单位转换器 ===")
temp = float(input("温度数值:"))
from_u = input("原始单位(C/F/K):")
to_u = input("目标单位(C/F/K):")
result = convert_temperature(temp, from_u, to_u)
print(f"{temp}°{from_u} = {result:.2f}°{to_u}")
测试:
温度数值:100
原始单位(C/F/K):C
目标单位(C/F/K):F
100.0°C = 212.00°F
常见问题与排查
TypeError: 类型不匹配
# 错误:不能直接将字符串和整数相加
age = input("年龄:") # 返回 "25"
print("明年" + age + "岁") # TypeError!
# 正确:先转换为整数再运算
age = int(input("年龄:"))
print(f"明年 {age + 1} 岁")
EOFError: 意外文件结束
当程序没有从键盘接收到预期的输入时(如在某些 IDE 中输入框关闭),会抛出此异常:
try:
name = input("你的名字:")
except EOFError:
print("没有收到输入,使用默认值")
name = "匿名用户"
中文编码问题
在某些 Windows 系统中,input() 可能因编码问题报错:
# 如果遇到问题,可以在脚本开头添加
# coding: utf-8
确保编辑器保存文件时使用 UTF-8 编码,这通常能解决大多数中文相关问题。
总结
本文涵盖了 Python 输入输出的核心知识:
- print() 函数:掌握
sep、end、flush参数的灵活使用 - 字符串格式化:优先使用 f-string(
f"text {var}"),理解其优于.format()和%的原因 - input() 函数:始终记住返回值是字符串,需手动转换类型
- 异常处理:用
try-except或isdigit()验证用户输入 - 实战技巧:将以上知识点组合,编写有实际价值的交互程序
下一篇文章将深入讲解 Python 的数据类型:整数、浮点数、布尔值等基础数值类型的特性与运算。
本文是 Python 教程系列的第四篇。
