查看全课大纲(第 32 / 51 节)
- 1.为什么人人都该学点编程?
- 2.计算机与程序设计:你的电脑到底在“想”什么?
- 3.Python 这门语言,到底有什么魔力?
- 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
- 5.如何安装一个更强大的代码编辑器?
- 6.汇率兑换1.0:你的第一个“钱生钱”小程序
- 7.你的第一行代码,藏着哪些秘密?
- 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
- 9.汇率兑换程序,如何让它“聪明”地判断币种?
- 10.汇率兑换程序能一直运行,直到我喊停吗?
- 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
- 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
- 13.怎么用 Python 画一个会动的五角星?
- 14.如何让程序自动画出不同大小的五角星?
- 15.函数自己调用自己,会发生什么?
- 16.用递归画出神奇的分形树
- 17.Python 怎么计算你一天躺着不动能消耗多少热量?
- 18.如何让程序“活”起来,持续为你服务?
- 19.如何让 BMR 计算器更“聪明”?
- 20.当程序遇到“不按套路出牌”的用户怎么办?
- 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
- 22.如何用列表记录每一周的存款?
- 23.如何让程序自己数数?—— 用 for 循环解放你的双手
- 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
- 25.52周存钱挑战:怎么根据日期自动查存款?
- 26.Python 怎么判断一年中的第几天?
- 27.列表 vs 元组:哪个更适合存储月份天数?
- 28.用集合给月份分个队,换个思路算天数
- 29.把月份和天数“锁”在一起:用字典给数据配个对
- 30.Python 怎么判断密码强弱?
- 31.Python 怎么给密码设置“防沉迷”系统?
- 32.Python 怎么把密码保存到文件里?
- 33.Python 怎么读取文件里的密码?
- 34.Python 怎么把密码检查工具“打包”起来?
- 35.Python 怎么把文件操作也“打包”起来?
- 36.计算机怎么“扔骰子”?——用Python模拟随机事件
- 37.如何用 Python 模拟掷两个骰子?
- 38.怎么用 Python 把骰子轨迹画出来?
- 39.骰子点数分布长啥样?用直方图一眼看穿!
- 40.用科学计算库让骰子程序“起飞”
- 41.空气质量指数怎么算?手把手教你写一个AQI计算器
- 42.空气质量指数计算:从零开始,让程序看懂空气
- 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
- 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
- 45.Python 怎么让程序自己判断文件类型?
- 46.如何让程序自己上网查空气质量?
- 47.用美味的汤来解析网页:Beautiful Soup 入门
- 48.如何让爬虫自动抓取全国所有城市的空气质量?
- 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
- 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
- 51.空气质量数据怎么“洗”干净,还能画成图?
Python 怎么把密码保存到文件里?
约 16 分钟
小象实战讲义 · Python 入门:8 个小项目边玩边学
还记得我们上一节写的密码强度检查器吗?它已经能判断你的密码是“强”还是“弱”了。但每次运行完,程序就“失忆”了,不记得你之前都试过哪些密码。这节,我们要给它装上一个“小本本”,让它把所有尝试过的密码和对应的强度都记录下来,保存到一个文件里。这样,你就能随时回顾自己的密码设置历史了。
💡 核心导读
- 本节新增什么? 我们将学习如何让 Python 程序与文件“对话”,把密码和强度信息保存到硬盘上的一个文本文件里。
- 文件是什么? 简单理解,就是硬盘上用来存东西的“小盒子”,比如你电脑里的文档、图片、视频。
- 操作文件的“三步走”:打开文件 → 操作文件(读或写)→ 关闭文件。是不是很像“把大象放进冰箱”?
- 一个重要的“小符号”:
\n,它代表“换行”,能让我们的记录在文件里一条一条排列整齐。
给程序配个“记事本”
在上一节,我们的程序已经能循环检查密码强度了。现在,我们想增加一个功能:把每次用户输入的密码和它的强度等级,都保存到一个文件里。
这个文件就像一个记事本,程序每次运行都会在上面追加一条新记录。
本节我们只做一件事:学会如何打开一个文件、往里面写东西,然后安全地关上它。
认识一下“文件”
文件,其实就是存储在硬盘、U盘这些外部设备上的一堆数据或信息的集合。你电脑里的电影、音乐、PPT文档,都是文件。
我们今天要打交道的是最简单的一种:文本文件。它就像 Windows 系统里的“记事本”保存出来的文件,扩展名通常是 .txt。这种文件里只存储了字符编码,可以被最简单的文本编辑器直接打开和编辑。
说到编码,你可能听过 ASCII、Unicode、UTF-8 这些词。简单来说,编码就是把我们看到的文字、符号,转换成计算机能识别的二进制形式的过程。现在最常用的是 UTF-8 编码,它能很好地处理中文、英文等各种字符,我们这次就用它。
还有一个重要的概念:换行。在文本文件里,怎么表示“另起一行”呢?我们不可能在代码里真的敲一个回车键。Python 用 \n 这个特殊的组合来表示换行,它被称为“转义字符”。\n 会被当作一个整体看待,代表换行操作。
文件操作“三步走”
用 Python 操作文件,就像把大象放进冰箱一样,只需要三步:
- 打开文件:建立程序和文件之间的“连接通道”。
- 操作文件:通过这个“通道”读数据或者写数据。
- 关闭文件:断开“连接通道”,释放资源。
想象一下,你的代码和硬盘上的文件原本是独立的。open() 函数就像一座桥,把它们连接起来。之后你就能在代码里指挥文件了。操作完了,一定要用 close() 把桥拆掉,不然这个文件会一直被你的程序“占着”,别人(或其他程序)就没法用了。
第一步:打开文件
我们用 open() 函数来打开文件。它至少需要两个信息:
- 文件名:你想打开哪个文件(可以包含路径)。
- 打开模式:你打算对这个文件做什么。
常见的打开模式有:
| 模式 | 含义 |
|---|---|
'r' | 只读。文件必须存在,否则报错。 |
'w' | 只写。如果文件不存在,会自动创建;如果文件已存在,会清空原有内容从头写。 |
'a' | 追加写。如果文件不存在,会自动创建;如果文件已存在,会在文件末尾追加新内容,不会清空旧的。 |
'r+' | 可读可写。 |
我们要记录每次的密码,显然应该用 'a'(追加)模式,这样历史记录才不会丢失。
第二步:写操作
打开文件后,我们得到一个“文件对象”(比如我们把它赋值给变量 f)。通过这个对象,我们可以调用 .write() 方法,把一段文本(字符串)写入文件。
第三步:关闭文件
操作完成后,调用文件对象的 .close() 方法,关闭文件。
动手:让密码检查器学会“记笔记”
现在,我们把这三步融入到我们的密码检查程序中。我们想在每次用户输入密码后,无论密码是否合格,都把这次尝试记录下来。
下面是完整的 3.0 版本程序。注意,我们把整个程序写在一个代码块里,确保你能直接复制运行。
"""
作者:小象教研组
功能:判断密码强度(3.0版 - 保存记录到文件)
版本:3.0
新增功能:将每次尝试的密码及其强度保存到文本文件中
"""
def check_number_exist(password_str):
"""
判断字符串中是否含有数字
"""
has_number = False
for c in password_str:
if c.isnumeric():
has_number = True
break
return has_number
def check_letter_exist(password_str):
"""
判断字符串中是否含有字母
"""
has_letter = False
for c in password_str:
if c.isalpha():
has_letter = True
break
return has_letter
def main():
"""
主函数
"""
try_times = 5 # 最多尝试5次
while try_times > 0:
# 原程序这里使用 input(),为了直接运行,我们用一个固定值模拟输入
# password = input('请输入密码:')
password = 'Test1234' # 你可以修改这个值来测试不同密码
# 密码强度初始为0
strength_level = 0
# 规则1:密码长度大于8
if len(password) >= 8:
strength_level += 1
else:
print('密码长度要求至少8位!')
# 规则2:包含数字
if check_number_exist(password):
strength_level += 1
else:
print('密码要求包含数字!')
# 规则3:包含字母
if check_letter_exist(password):
strength_level += 1
else:
print('密码要求包含字母!')
# ========== 本节新增的核心代码:文件操作三步走 ==========
# 1. 打开文件('a'模式表示追加,不会覆盖之前的内容)
f = open('password_record.txt', 'a', encoding='utf-8') # 指定UTF-8编码以支持中文
# 2. 操作文件:写入一条记录
# 使用格式化字符串,记录"密码"和"强度",末尾加\n换行
record = '密码:{}, 强度:{}\n'.format(password, strength_level)
f.write(record)
# 3. 关闭文件
f.close()
# ==================================================
# 判断本次密码是否合格
if strength_level == 3:
print('恭喜!密码强度合格!')
break # 合格则跳出循环
else:
print('密码强度不合格!')
try_times -= 1 # 尝试次数减1
print() # 输出空行,让显示更清晰
if try_times <= 0:
print('尝试次数过多,密码设置失败!')
# 运行主函数
main()运行上面的程序,它会在你代码文件所在的同一个文件夹里,生成一个名为 password_record.txt 的新文件。用记事本打开它,你会看到类似这样的内容:
恭喜!密码强度合格!代码解读:
open('password_record.txt', 'a', encoding='utf-8'):以追加('a')模式打开(或创建)password_record.txt文件,并指定使用utf-8编码,这样可以正确保存和显示中文。'密码:{}, 强度:{}\n'.format(password, strength_level):这是一个格式化字符串。{}是占位符,.format()方法会将括号里的变量password和strength_level按顺序填充进去。末尾的\n确保每次记录都独占一行。f.write(record):将组装好的字符串record写入文件。f.close():千万别忘了这一步!它就像离开房间要关门一样重要。
试试看: 你可以把 password = 'Test1234' 这行注释掉,取消下一行 password = input('请输入密码:') 的注释,然后多次运行程序,输入不同的密码。再打开 password_record.txt 文件,看看你的“密码尝试史”是不是都完整地保存在里面了?
还能做得更好吗?
现在文件里记录的强度是数字(0, 1, 2, 3),对用户来说不够直观。我们可以在保存前,把数字转换成“弱”、“中”、“强”这样的文字描述。这个优化就留给你作为练习啦!
📝 动手练一练
- 优化显示:修改上面的程序,使得保存到文件里的“强度”不是数字,而是文字描述。例如:强度3为“强”,强度2为“中”,强度1为“较弱”,强度0为“弱”。最终文件里的一行记录应该像这样:
密码:abc123, 强度:中。
👉 点击查看参考答案
思路:在写入文件之前,根据 strength_level 的值,用一个 if...elif...else 判断语句,将其映射为对应的中文描述字符串。
关键代码片段(放在 while 循环内、f.write() 之前,替换原来直接用 strength_level 的写法;其余代码沿用 3.0):
# 在写入文件之前,先把强度数字转换成文字
if strength_level == 3:
level_text = '强'
elif strength_level == 2:
level_text = '中'
elif strength_level == 1:
level_text = '较弱'
else: # strength_level == 0
level_text = '弱'
# 然后用 level_text 组装记录并写入
record = '密码:{}, 强度:{}\n'.format(password, level_text)
f.write(record)将这段判断逻辑放在 f.write() 之前,替换掉原来直接使用 strength_level 的部分即可。
- 模式体验:将程序中
open()函数的模式从'a'改成'w',然后运行程序几次。每次运行后都打开password_record.txt文件观察,你发现了什么?这说明了'w'模式和'a'模式最主要的区别是什么?
👉 点击查看参考答案
发现:每次以 'w'(只写)模式运行程序后,password_record.txt 文件里都只保留了最近一次运行所写入的记录,之前的记录都被清空了。
区别:'w' 模式在打开文件时,如果文件已存在,会清空其所有原有内容,然后从头开始写。而 'a'(追加)模式则会在文件末尾添加新内容,保留所有旧内容。因此,对于需要保存历史记录的场景(如日志、本次的密码记录),必须使用 'a' 模式。
本章小结
恭喜!你的密码检查器现在不仅会判断,还会“记笔记”了。我们通过一个非常实用的功能,自然而然地学会了 Python 文件操作的核心心法。
💡 核心收获
- 文件是持久化存储数据的基本单位,文本文件(.txt)是最简单的一种。
- 操作文件必须遵循“三步走”:打开 → 操作 → 关闭。
open()和close()是必须成对出现的好伙伴。 - 打开模式是关键:
'r'读,'w'写(会清空),'a'追加(推荐用于记录日志)。 - 换行符
\n是一个重要的转义字符,用于在文本中表示另起一行。
📋 行动清单
- 运行本节代码,确认在文件夹中成功生成了
password_record.txt文件。 - 完成“动手练一练”的第一题,让你的密码记录本显示更友好。
- 思考一下:你还能用这个“保存到文件”的功能,为你之前做过的哪个小项目(比如 BMR 计算器、52周存钱计划)添加一个“历史记录”功能?
我们刚刚学会了如何把数据从程序“写”到文件里。下一节,我们将学习反过来,如何把文件里保存的数据“读”回到程序里进行处理。让你的程序真正学会“翻阅”自己的记忆!
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第7章代码包:判断密码强弱(含全部版本 6 个 .py)ZIP · 5KB