日常练习
作为大三学生,有时候课程作业和项目压力大,反而容易忽略了最基础的代码练习。最近我给自己定了个小目标:每天不管多忙,都抽30分钟,用Python写点小东西,纯粹为了保持“代码手感”和解决问题的思维敏捷度。
今日小练习:自动生成随机密码
我们打算给我们小组以前的项目里的用户批量生成账号,手动想密码太麻烦,干脆写个脚本自动生成。
需求拆解
- 长度可定制:比如默认8位,但可以指定更长。
- 字符类型丰富:包含大小写字母、数字、特殊符号(!@#$%),增强安全性。
- 避免混淆字符:比如小写'l'和数字'1',大写'O'和数字'0',尽量排除,防止用户看错。
实现
Python的random和string模块简直是神器,十几行代码就能搞定。
import random
import string
def generate_password(length=8):
# 定义字符池,排除容易混淆的字符
# 小写字母去掉 'l' 和 'o'
lowercase = 'abcdefghijkmnpqrstuvwxyz'
# 大写字母去掉 'I' 和 'O'
uppercase = 'ABCDEFGHJKLMNPQRSTUVWXYZ'
digits = '23456789' # 数字去掉 '0' 和 '1'
symbols = '!@#$%&*' # 常用特殊符号
# 组合所有字符
all_chars = lowercase + uppercase + digits + symbols
# 确保每种类型至少有一个字符(强密码要求)
password = [
random.choice(lowercase),
random.choice(uppercase),
random.choice(digits),
random.choice(symbols)
]
# 填充剩余长度
for i in range(length - 4):
password.append(random.choice(all_chars))
# 打乱顺序,避免前四位总是固定的类型
random.shuffle(password)
# 拼接成字符串
return ''.join(password)
# 生成5个密码试试
for _ in range(5):
print(generate_password(10))
运行结果:
跑了一下,生成了类似这样的密码:
-7G#k9m2S@b
-s8$Tp5M!zK
-W3&jFq9#eR
看起来符合要求。
小结:
虽然这个脚本很简单,但这个过程让我重新温习了:
-字符串操作:string模块的使用。
-列表推导和随机采样:random.shuffle()的打乱技巧。
-需求边界:考虑到了易混淆字符的排除。

浙公网安备 33010602011771号