随机生成密码作业

1、写一个生产密码的程序,输入几,就产生几条密码,密码产生的不重复。
要求密码:长度6 - 12,密码必须包含
大写字母、小写字母、数字
产生完密码后存到一个文件里面

1.首先输入生成密码的条数 需要校验输入的要是数字
2.根据输入,生成几条密码
3.生成的密码长度要是随机的,且再6-12之间
4.内容要包含大写字母、小写字母、数字
5.生产后的密码,写在文件中,每次生成密码要不重复

string中的常用的方法:
Some strings for ctype-style character classification
whitespace = ' \t\n\r\v\f'
ascii_lowercase = 'abcdefghijklmnopqrstuvwxyz'
ascii_uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
ascii_letters = ascii_lowercase + ascii_uppercase
digits = '0123456789'
hexdigits = digits + 'abcdef' + 'ABCDEF'
octdigits = '01234567'
punctuation = """!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"""
printable = digits + ascii_letters + punctuation + whitespace

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
方法一
import string
import random
def create_pa():
    start=random.choice(string.digits)+random.choice(string.ascii_lowercase)+random.choice(string.ascii_uppercase)
    end=random.sample(string.digits+string.ascii_letters,random.randint(6,12)-3)
    end.append(start)
    random.shuffle(end) #洗牌
    passwerd=''.join(end)
    print(passwerd)
    return passwerd
create_pa()
def run():
    number=input('输入条数:').strip()
    password_set=set()
    if number.isdigit():
        while len(password_set) != int(number):
            result=create_pa()
            password_set.add(result+'\n')
    with open('pasw.txt','w',encoding='utf-8') as Wfile:
        Wfile.writelines(password_set)
 
def create_password():
    start = random.choice(string.digits) + random.choice(string.ascii_lowercase) \
    +random.choice(string.ascii_uppercase)
    end = random.sample(string.digits+string.ascii_letters,random.randint(6,12)-3)
    end.append(start)
    random.shuffle(end)
    password = ''.join(end)
    return password

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 方法二
 
import string
import random
def create_password2():
    number_set = set(string.digits)
    upper_set = set(string.ascii_uppercase)
    lower_set = set(string.ascii_lowercase)
    while True:
        before_password = random.sample(string.digits+string.ascii_uppercase+string.ascii_lowercase,random.randint(6,12)) #生成一个6-12位的字符,再大写、小写、数字的组合之间
        p = set(before_password) #存在几何种去重
        if number_set & p and upper_set & p and lower_set & p: #如果生成的字符和大写、小写、数字都有交集,则返回
            return ''.join(p)
 
def run():
    number = input("请输入产生的条数").strip() #1000
    password_set = set()
    if number.isdigit():
        while len(password_set)!=int(number):#0,1000
            # result = create_password()
            result = create_password2()
            password_set.add(result+'\n')
 
    with open('passwords.txt','w') as fw:
        fw.writelines(password_set)
run()

  

 



posted @   MLing  阅读(306)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2017-05-16 Python中基本的读文件和简单数据处理
2017-05-16 上传和下载文件
2017-05-16 fiddler与Charles的区别
2017-05-16 修改请求和返回报文
2017-05-16 charles抓包--手机端
点击右上角即可分享
微信分享提示