首页 / Python3 入门教程 / 输入与输出

Python3 入门教程

输入与输出

本教程共 70 篇 · 第 43 篇 · 更新于 2026-07-22 · 约 4 分钟阅读

PythonPython3 入门教程输入与输出print函数f-string字符串格式化

43. 输入与输出

本节目标:熟练掌握 printinput 的用法,精通 f-string 的高级格式化技巧,了解其他格式化方式的适用场景。

程序跟外界打交道,最基本的方式就是输入(input)和输出(output)。用户敲键盘是输入,屏幕显示结果是输出。文件读写、网络通信,本质也是不同形式的 I/O。

这一章聚焦控制台层面的输入输出,为后续文件操作打基础。

print:不只是打印

print 你已经很熟悉了,但它有几个参数很实用:

# 不换行
print("加载中", end="")
print("...", end="")
print("完成")

# 多值用自定义分隔符
print("2024", "07", "21", sep="-")
# 2024-07-21

# 同时修改结束符和分隔符
print("a", "b", "c", sep=" | ", end="!\n")
# a | b | c!

end 默认是 \n(换行),sep 默认是空格。改这两个参数能做出很多灵活的输出效果。

Tip

如果 print 的中文输出出现乱码,检查终端编码。Windows 命令行默认 GBK,PowerShell 和 VSCode 终端通常用 UTF-8。统一用 UTF-8 能避免大部分编码问题。

input:获取用户输入

name = input("请输入你的名字:")
print(f"你好,{name}!")

input 返回的永远是字符串。需要数字时要手动转换:

age = int(input("请输入年龄:"))
price = float(input("请输入价格:"))

转换前最好验证一下,否则用户输入字母会抛 ValueError

raw = input("请输入年龄:")
if raw.isdigit():
    age = int(raw)
else:
    print("请输入有效数字")
Warning

input 在获取密码等敏感信息时,会把输入内容显示在屏幕上。如果需要隐藏输入,用 getpass 模块:

import getpass
pwd = getpass.getpass("请输入密码:")

字符串格式化:三种方式

Python 历史上出现过三种字符串格式化方式,现在你应该优先掌握 f-string。

1. % 格式化(旧式,了解即可)

name = "Alice"
age = 25
print("我叫 %s,今年 %d 岁" % (name, age))

这种写法来自 C 语言,功能有限,可读性也一般。看到旧代码能认识就行,新项目别用它。

2. str.format()(过渡方案)

print("我叫 {},今年 {} 岁".format(name, age))
print("我叫 {0},今年 {1} 岁".format(name, age))
print("我叫 {n},今年 {a} 岁".format(n=name, a=age))

format% 灵活,支持命名参数、重复引用。但在 f-string 出现后,它的使用场景变少了。

3. f-string(推荐,Python 3.6+)

print(f"我叫 {name},今年 {age} 岁")

变量直接嵌入字符串,直观高效。而且支持表达式:

x = 10
y = 3
print(f"{x} 除以 {y} 等于 {x / y:.2f}")
# 10 除以 3 等于 3.33

f-string 进阶技巧

控制精度与宽度

pi = 3.1415926

print(f"{pi:.2f}")      # 3.14(保留两位小数)
print(f"{pi:10.2f}")    # '      3.14'(总宽度 10,右对齐)
print(f"{pi:<10.2f}")   # '3.14      '(左对齐)
print(f"{pi:^10.2f}")   # '   3.14   '(居中)
print(f"{pi:010.2f}")   # 0000003.14(前导零)

格式说明符的结构是 :[[填充]对齐][符号][宽度][.精度][类型]。日常用得最多的是 .2f(两位小数)和 >10(右对齐占 10 位)。

千位分隔符

num = 12345678
print(f"{num:,}")       # 12,345,678
print(f"{num:_}")       # 12_345_678

二进制、八进制、十六进制

n = 255
print(f"{n:b}")   # 11111111(二进制)
print(f"{n:o}")   # 377(八进制)
print(f"{n:x}")   # ff(十六进制小写)
print(f"{n:X}")   # FF(十六进制大写)

日期时间格式化

from datetime import datetime
now = datetime.now()
print(f"今天是 {now:%Y-%m-%d %H:%M}")
# 今天是 2024-07-21 14:30
Note

f-string 里放 = 能同时显示表达式和结果(Python 3.8+):

x = 10
print(f"{x * 2=}")   # x * 2=20

调试时非常方便,不用写两遍变量名。

自定义对象的格式化

如果你的类实现了 __format__ 方法,f-string 会自动调用:

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __format__(self, spec):
        if spec == 'polar':
            import math
            r = math.hypot(self.x, self.y)
            theta = math.degrees(math.atan2(self.y, self.x))
            return f"(r={r:.2f}, θ={theta:.1f}°)"
        return f"({self.x}, {self.y})"

p = Point(3, 4)
print(f"{p}")           # (3, 4)
print(f"{p:polar}")     # (r=5.00, θ=53.1°)

输出重定向

print 默认输出到标准输出(stdout)。你可以重定向到文件:

with open('output.txt', 'w', encoding='utf-8') as f:
    print("写入文件的内容", file=f)

file 参数接受任何文件对象(或类似文件的对象)。结合 StringIO,还能把输出暂存在内存里。

小结

  • printsepend 参数控制分隔符和结尾。
  • input 返回字符串,数字需要手动转换。
  • f-string 是首选格式化方式,支持表达式、精度控制、对齐、进制转换。
  • 输出可以重定向到文件或其他类文件对象。

输入输出是程序的「五官」。格式化字符串的能力越强,你输出信息的效率就越高。f-string 是 Python 3 最值得掌握的特性之一,花点时间练熟它,回报很大。


来源:参考了 runoob「Python3 输入和输出」、liaoxuefeng「输入和输出」、pythondoc「7. 输入与输出」等,改写后所得。