测试工具研发_脚本(2):生成随机密码


一、研发内容

1、V1.0 生成指定长度的随机英文/数字/符号


"""
# V1.0 生成指定长度的随机英文/数字/符号
import random
import string

# 输入指定长度
minlin = int(input("请输入最小值:"))
maxlen = int(input("请输入最大值:"))
# 输入指定类型
pwdtype = int(input("请输入类型1:英文,类型2,数字,类型3:符号:"))
# 获取指定长度
num = random.randint(minlin, maxlen)

# 需要哪种类型
str = ""
if pwdtype == 1:
    for i in range(1, 11):
        str = str + string.ascii_letters
elif pwdtype == 2:
    for i in range(1, 11):
        str = str + string.digits
elif pwdtype == 3:
    for i in range(1, 11):
        str = str + string.punctuation
else:
    print("输入有误,请重新输入。")

# 如果等于符号,则输出
# 获取随机字符串
pwdstr = "".join(random.sample(str,num))
print(pwdstr)
"""

"""
# V1.1 自动生成密码数据,
用面向过程进行封装
添加return进行函数的中断
用if进行返回值的判断
"""
import random
import string


def get_pwd(minlin, maxlen, pwdtype):
    # 获取指定长度
    num = random.randint(minlin, maxlen)
    # 需要哪种类型
    str = ""
    if pwdtype == 1:
        for i in range(1, 11):
            str = str + string.ascii_letters
    elif pwdtype == 2:
        for i in range(1, 11):
            str = str + string.digits
    elif pwdtype == 3:
        for i in range(1, 11):
            str = str + string.punctuation
    else:
        print("输入有误,请重新输入。")
        return -1
    # 如果等于符号,则输出
    # 获取随机字符串
    pwdstr = "".join(random.sample(str,num))
    return pwdstr


if __name__ == '__main__':
    # 输入指定长度
    minlin = int(input("请输入最小值:"))
    maxlen = int(input("请输入最大值:"))
    # 输入指定类型
    pwdtype = int(input("请输入类型1:英文,类型2,数字,类型3:符号:"))
    res = get_pwd(minlin, maxlen, pwdtype)
    if res != -1:
        print(res)
    else:
        print("")

2、2.0 生成指定长度的随机英文和数字

"""
# V2.0 生成英文+数字的密码,
(1)添加了elif的判断,英文+数字使用了字符串拼接来实现,还有字符串的复制
"""
import random
import string


def get_pwd(minlin, maxlen, pwdtype):
    # 获取指定长度
    num = random.randint(minlin, maxlen)
    # 需要哪种类型
    str = ""
    if pwdtype == 1:
        for i in range(1, 11):
            str = str + string.ascii_letters
    elif pwdtype == 2:
        for i in range(1, 11):
            str = str + string.digits
    elif pwdtype == 3:
        for i in range(1, 11):
            str = str + string.punctuation
    elif pwdtype == 4:
        # 获取指定长度的 英文+数字 的字符串
        for i in range(1, 11):
            # str = str + string.ascii_letters + string.digits*10
            str += string.ascii_letters + string.digits * 10
            print(str)
    else:
        print("输入有误,请重新输入。")
        return -1
    # 如果等于符号,则输出
    # 获取随机字符串
    pwdstr = "".join(random.sample(str,num))
    return pwdstr


if __name__ == '__main__':
    # 输入指定长度
    minlin = int(input("请输入最小值:"))
    maxlen = int(input("请输入最大值:"))
    # 输入指定类型
    pwdtype = int(input("请输入类型1:英文,类型2,数字,类型3:符号,类型4:英文+数字:"))
    res = get_pwd(minlin, maxlen, pwdtype)
    if res != -1:
        print(res)
    else:
        print("")

3、3.0 生成指定长度的随机英文和数字和符号

"""
# V3.0 自动生成密码数据,
(1)主要添加了 符号,对符号的比例进行了调整
"""
import random
import string


def get_pwd(minlin, maxlen, pwdtype):
    # 获取指定长度
    num = random.randint(minlin, maxlen)
    # 需要哪种类型
    str = ""
    if pwdtype == 1:
        for i in range(1, 11):
            str = str + string.ascii_letters
    elif pwdtype == 2:
        for i in range(1, 11):
            str = str + string.digits
    elif pwdtype == 3:
        for i in range(1, 11):
            str = str + string.punctuation
    elif pwdtype == 4:
        # 获取指定长度的 英文+数字 的字符串
        for i in range(1, 11):
            # str = str + string.ascii_letters + string.digits*10
            str += string.ascii_letters + string.digits * 10
    elif pwdtype == 5:
        # 获取指定长度的 英文+数字 的字符串
        for i in range(1, 11):
            # str = str + string.ascii_letters + string.digits*10
            str += string.ascii_letters + string.digits * 5 + string.digits * 2
    else:
        print("输入有误,请重新输入。")
        return -1
    # 如果等于符号,则输出
    # 获取随机字符串
    pwdstr = "".join(random.sample(str,num))
    return pwdstr


if __name__ == '__main__':
    # 输入指定长度
    minlin = int(input("请输入最小值:"))
    maxlen = int(input("请输入最大值:"))
    # 输入指定类型
    pwdtype = int(input("请输入类型1:英文,类型2,数字,类型3:符号,类型4:英文+数字,类型5:英文+数字+符号:"))
    res = get_pwd(minlin, maxlen, pwdtype)
    if res != -1:
        print(res)
    else:
        print("")

4、4.0 生成多组数据并存入文件

"""
# V4.0 4.0 生成多组数据并存入文件
(1)存入文件中。存入文件四步走,打开文件,打开编辑器,写入内容,保存关闭文件
(2)优化了用户输入,用户没有必要再去选择1,2,3,4,5,随机生成这5个数字
(3)添加了纯数字会导致科学技术法的判断,使用转移转义符"\t"进行处理
"""
import random
import string
import csv


def get_pwd(minlin, maxlen, pwdtype):
    # 获取指定长度
    num = random.randint(minlin, maxlen)
    # 需要哪种类型
    str = ""
    if pwdtype == 1:
        for i in range(1, 11):
            str = str + string.ascii_letters
    elif pwdtype == 2:
        for i in range(1, 11):
            str = str + string.digits

    elif pwdtype == 3:
        for i in range(1, 11):
            str = str + string.punctuation
    elif pwdtype == 4:
        # 获取指定长度的 英文+数字 的字符串
        for i in range(1, 11):
            # str = str + string.ascii_letters + string.digits*10
            str += string.ascii_letters + string.digits * 10
    elif pwdtype == 5:
        # 获取指定长度的 英文+数字 的字符串
        for i in range(1, 11):
            # str = str + string.ascii_letters + string.digits*10
            str += string.ascii_letters + string.digits * 5 + string.digits * 2
    else:
        print("输入有误,请重新输入。")
        return -1
    # 如果等于符号,则输出
    # 获取随机字符串
    pwdstr = "".join(random.sample(str,num))
    if pwdtype == 2: # 如果是数字格式的,则将其转换成文本格式,如果不是,则继续执行后续代码
        pwdstr = pwdstr + "\t"
    return pwdstr


if __name__ == '__main__':
    # 输入指定长度
    minlin = int(input("请输入最小值:"))
    maxlen = int(input("请输入最大值:"))
    count = int(input("需要多少组数:"))
    # 输入指定类型
    # 打开文件,打开编辑器,输入文件内容,关闭文件
    file = open("wenjian.csv", "w", newline="")
    write = csv.writer(file)
    write.writerow(["序号", "密码"])
    # pwdtype = int(input("请输入类型1:英文,类型2,数字,类型3:符号,类型4:英文+数字,类型5:英文+数字+符号:"))
    pwdtype = random.randint(1, 5) #
    for i in range(1, count + 1):
        res = get_pwd(minlin, maxlen, pwdtype)
        write.writerow([i, res])
        if res != -1:
            print(res)
        else:
            print("")
    file.close()

二、碰到的问题

问题1:生成多组数据,写入文件的代码逻辑是怎么实现?

1、生成多组数据,调用的是for循环,for i in range(1, count + 1):,生成count组数据,count 可以 console输入:例如count=int(input())实现
2、写入文件的代码逻辑跟手动是一样一样的:打开文件,打开编辑器,输入内容,保存关闭文件。
3、写入多组数据,则将“写入内容”的代码加入到for循环中,即可实现。

问题2:当密码是纯数字的时候,excel打开csv格式的文件,显示的是科学记数法?

1、所以需求是:当输出是纯数字的时候,就行文本转义“\t”
在这里插入图片描述
下次碰到类似需要再次处理的情况,返回值之前,我们添加if判断进行返回值处理,然后做一个处理就可以实现了。

问题3:当拿到一个需求时候,怎么梳理出代码逻辑?

1、直接敲出你要实现的代码逻辑,汉字或者流程图。
2、逆向一步步实现各种需求,示例:
(1)我们要实现的功能是:获取随机字符串
pwdstr = “”.join(random.sample(str,num))
(2)对str这个入参进行处理:
在这里插入图片描述

(3)、对num这个数字进行处理:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45451320/article/details/120257233