作业要求
1、写一个函数,函数的功能是生成一批密码,存到文件里面
  def gen_password(num):
  #num代表生成多少条密码
2、密码复杂度要求
  1)长度在,8-16位之间
  2)密码必须包括大写字母、小写字母、数字、特殊字符
  3)密码不能重复
3、生成的密码保存到文件里面

方法1提示
1、先分别从大写字母、小写字母、数字、特殊字符中各取一个 4个
2、再从所有的字符里面取4-12个,和第一部获取到的结果拼起来 8-16

import string,random
def gen_password():
for i in range(num):
pwd_len=random.randint(8,16) #总长度
upper =random.sample(string.ascii_uppercase,1) # choice只返回一个字符,sample返回一个字符串,所以这里我们使用sample
lower = random.sample(string.ascii_lowercase,1) # 在所有小写字母中随机选择一个
digits = random.sample(string.digits,1)
punctuation = random.sample(string.punctuation,1)
other=random.sample(string.ascii_letters+string.digits+string.punctuation,pwd_len-4) #剩余长度为总长度-4,在所有的字母符号数字中取 res=upper+lower+digits+punctuation+other #把上面的拼接在一起
random.shuffle(res) # 打乱顺序
# print(''.join(res))
return ''.join(res)
#将密码保存到文件中
all_passwords=set()
num=int(input('请输入要产生多少条密码 :').strip())
while len(all_passwords)!=num: #使用集合长度作为循环次数
res=gen_password()+'\n'
all_passwords.add(res)
with open('pwd.txt','w',encoding='utf-8') as fw:
fw.writelines(all_passwords)

方法2提示
所有的里面取8-16位,然后看是否和数字大小写字母特殊符号有交集

import string,random

def gen_password2():
pwd_len = random.randint(8, 16) # 总长度
all_str = string.ascii_letters + string.digits + string.punctuation # 全部
res=set(random.sample(all_str,pwd_len)) #在全部里取长度,先换成集合,后面好取交集
if res & set(string.ascii_lowercase) and res & set(string.ascii_lowercase) and res & set(string.digits) and res & set(string.punctuation): # 取交集
return ''.join(res) # 交集里都有,说明对啦,可以返回res了
return gen_password2()
#将密码保存到文件中
all_passwords=set()
num=int(input('请输入要产生多少条密码 :').strip())
while len(all_passwords)!=num: #使用集合长度作为循环次数
res=gen_password2()+'\n'
all_passwords.add(res)
with open('pwd.txt','w',encoding='utf-8') as fw:
fw.writelines(all_passwords)

最新文章

  1. 记CentOS-7-x86_64-DVD-1503与Windows7单硬盘双系统的安装
  2. SU sunmo命令学习
  3. Python学习笔记09
  4. POJ2104 & 主席还是可持久化还是 函数式
  5. java 基本数据类型
  6. Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加
  7. 使用java对sql server进行增删改查
  8. android自定义控件,其三个父类构造方法有什么区别
  9. filter过滤action的问题
  10. 【转】Java 内部类种类及使用解析
  11. jmeter压力测试报告 - DEMO
  12. jQuery漏洞
  13. 解决response.setHeader("Content-disposition" 中文乱码问题
  14. CentOS安装JDK9
  15. [Unity插件]Lua行为树(十一):组合节点Parallel
  16. 2018.07.03 HDU Rikka with Phi(线段树)
  17. 20155339 2016-2017-2 《Java程序设计》第7周学习总结
  18. DBA不可不知的操作系统内核参数
  19. 【Android】安卓中常用的图片加载方法
  20. 【bzoj3576】[Hnoi2014]江南乐 博弈论+SG定理+数学

热门文章

  1. python- ' % '运算符的用途(非常重要)
  2. appium常见问题08_pycharm中导入appium报错( 已成功安装appium_python_client)【MAC】
  3. QTP Code Segment
  4. 分别用switch语句和if语句实现键盘录入月份,输出对应的季节
  5. git 上传本地代码
  6. ubuntu16.04安装jdk1.8(java1.8)
  7. jgGrid常用操作--持续更新
  8. SET SESSION AUTHORIZATION - 为当前会话设置会话用户标识符和当前用户标识符
  9. linux c 链接详解5-虚拟内存管理
  10. SSH远程管理服务实战