查看全课大纲(第 10 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
如何将程序的结果展示给用户或保存下来?
约 11 分钟
小象实战讲义 · Python 编程从入门到实践
在编写程序时,我们经常需要将计算结果展示给用户,或者将数据保存到文件中供后续使用。本节将学习 Python 中最核心的两种输出方式:向控制台(屏幕)输出和向文件输出。这是数据从程序流向外界的关键一步,也是后续所有程序交互的基础。
💡 核心导读
print()函数:向控制台输出信息的基本工具,可以直接输出变量或字符串。- 格式化输出:使用
%占位符,可以精确控制输出内容的格式(如小数位数、对齐等)。 - 文件写入:使用
open()函数以写入模式打开文件,通过write()方法将内容保存到磁盘。 - 文件打开模式:
'w'(写入,会覆盖原文件)和'a'(追加,在文件末尾添加)。 - 安全操作:使用
with语句管理文件,可以自动关闭文件,避免资源泄露。
向控制台输出:print() 函数
print() 是 Python 中最常用的输出函数,它将你传入的内容显示在控制台(如终端、Jupyter Notebook 的输出单元格)上。
直接输出
最简单的用法是直接将字符串或变量传给 print()。
import math
# 直接输出字符串
print("Hello, Python!")
# 输出多个内容,print() 会用空格将它们分隔开
name = "小明"
age = 18
print("姓名:", name, "年龄:", age)
# 格式化输出:%5.3f 表示总宽度5位、保留3位小数
print('常量 PI 的值近似为:%5.3f。' % math.pi)
print('PI 的两种精度:%5.3f 和 %5.4f' % (math.pi, math.pi))Hello, Python!
姓名: 小明 年龄: 18
常量 PI 的值近似为:3.142。
PI 的两种精度:3.142 和 3.1416格式化输出
当我们需要更精确地控制输出格式时(比如控制小数位数、对齐等),可以使用格式化输出。Python 中一种经典的格式化方法是使用 % 操作符。
基本格式:"格式化字符串" % 值
- 在字符串中用
%加格式符(如%s,%f,%d)作为占位符。 - 字符串外的
%后面跟上要填入的值。如果只有一个值,可以直接写;如果有多个值,需要用元组(值1, 值2, ...)括起来。
格式符说明:
%s:字符串 (String)%d:十进制整数 (Decimal integer)%f:浮点数 (Float)%x/%o:十六进制 / 八进制整数
在 %f 中,可以指定宽度和精度,如 %5.3f:
5表示最小总宽度(包括小数点和小数部分)。如果实际数字位数不足,会在左侧填充空格;如果位数超出(如3.1416有6位),则会按实际宽度显示,不会截断。.3表示保留3位小数,并进行四舍五入。
向文件输出:保存数据到磁盘
除了在屏幕上显示,我们经常需要将程序生成的数据(如日志、计算结果)永久保存到文件中。
基本文件写入步骤
- 打开文件:使用
open(文件路径, 模式)函数。写入模式常用'w'(write) 或'a'(append)。 - 写入内容:使用文件对象的
.write(字符串)方法。 - 关闭文件:使用
.close()方法。这一步非常重要,它能确保数据被真正写入磁盘并释放系统资源。
为满足讲义代码可复制即跑、且不落盘写文件,下面的示例用内存流(io.StringIO)模拟文件;真实项目中把 StringIO() 换成 open('文件路径', 'w') 即可。
import io
# 用 StringIO 在内存中模拟文件,避免依赖本地目录
content = "这是我写的第一行。\n第二行内容\n"
file_buffer = io.StringIO()
# write() 返回写入的字符数
written = file_buffer.write(content)
print("write() 返回:{}".format(written))
# 把指针移回开头,读回刚才写入的内容
file_buffer.seek(0)
print("读回文件内容:")
print(file_buffer.read(), end="")
file_buffer.close()
print("文件已关闭")write() 返回:16
读回文件内容:
这是我写的第一行。
第二行内容
文件已关闭真实操作磁盘文件时,把 io.StringIO() 换成 open(文件路径, "w"),其余 write()、close() 的流程不变。content 一共 16 个字符,所以文本模式下 write() 返回 16。
使用 with 语句安全写入
手动调用 .close() 容易忘记,尤其是在程序发生异常时。Python 提供了 with 语句,能自动管理文件的关闭,更加安全可靠。
import io
# with 代码块结束时,文件会自动关闭,无需显式调用 close()
with io.StringIO() as log_file:
log_file.write("第一行内容。\n")
log_file.write("这是追加的第二行。\n")
log_file.seek(0)
final_content = log_file.read()
print("模拟追加后的文件内容:")
print(final_content, end="")
print("with 代码块结束,文件已自动关闭。")模拟追加后的文件内容:
第一行内容。
这是追加的第二行。
with 代码块结束,文件已自动关闭。追加模式 vs 写入模式
'w'(写入模式):打开文件时,会清空文件原有的所有内容,然后从头开始写入。'a'(追加模式):打开文件时,保留原有内容,新的写入会从文件末尾开始添加。
StringIO 是内存对象,没有文件打开模式,所以覆盖与追加只能在真实文件上看到效果。下面是两种模式的真实写法(示意:讲义代码禁止落盘,不能实跑):
# 示意:讲义代码禁止落盘,不能实跑
# 'w' 写入模式:打开时清空原内容,从头开始写
with open('log.txt', 'w') as f:
f.write('第一行内容\n')
# 'a' 追加模式:保留原内容,新内容写到文件末尾
with open('log.txt', 'a') as f:
f.write('第二行内容\n')📝 动手练一练
- 格式化练习:假设你有一个商品单价
price = 45.6789元,请使用格式化输出,将其显示为“商品单价:45.68元”(保留两位小数)。
👉 点击查看参考答案
思路:使用 % 格式化,格式符用 %.2f 表示保留两位小数。
price = 45.6789
print('商品单价:%.2f元' % price)商品单价:45.68元- 日志记录:编写一段代码,模拟将当前日期和一条信息“程序启动成功”以追加模式写入一个名为
my_log.txt的日志文件。请使用with语句确保安全。
👉 点击查看参考答案
思路:打开模式用 'a',在 with 代码块内调用 write() 方法写入格式化的字符串。下面用 StringIO 在内存中演示同样的写入与读回过程。
import io
log_date = "2023-10-27" # 用固定日期,避免依赖当前时间
log_message = "程序启动成功"
with io.StringIO() as log_file:
log_file.write("{}: {}\n".format(log_date, log_message))
log_file.seek(0)
written_log = log_file.read()
print("模拟写入日志:")
print(written_log, end="")模拟写入日志:
2023-10-27: 程序启动成功常见错误
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
print "Hello" | SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)? | Python 3 中 print 是函数,必须加括号。 | print("Hello") |
f = open("a.txt", "w")f.write("hi")(忘记 close) | 程序不报错,但文件可能内容不全或损坏。 | 写入的数据可能还留在内存缓冲区,没有真正写入磁盘。 | 使用 with 语句,或手动调用 f.close()。 |
多次以 'w' 模式打开同一文件并写入 | 每次打开都会清空之前的内容,只保留最后一次写入的数据。 | 'w' 模式的设计就是覆盖写入。 | 如需保留历史,使用 'a'(追加)模式。 |
小结
print()函数是向控制台输出信息的基本方式,可直接输出,也可用%进行格式化输出。- 格式化字符串中,
%s、%d、%f是常用占位符,%5.3f可控制宽度和精度。 - 写入文件需要三步:打开 (
open)、写入 (write)、关闭 (close)。 - 使用
with open(...) as f:语句可以自动管理文件关闭,是更安全的做法。 - 文件打开模式
'w'会覆盖原文件,'a'会在文件末尾追加新内容。 - 写入文件后务必确保文件被正确关闭,否则可能导致数据丢失。
📋 行动清单
- 在本地创建一个 Python 脚本,尝试用
%格式化输出你的身高(假设为 1.753 米),保留两位小数。 - 使用
with语句,编写代码将你的名字和今天的学习内容追加到一个名为study_log.txt的文件中。 - 分别用
'w'和'a'模式向同一个文件写入内容,观察最终文件内容的区别。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第1章代码包:输入输出_样例代码(含1 个 Notebook、3 个数据/其他文件)ZIP · 2KB