生成随机密码
- 一、研发内容
- 1、V1.0 生成指定长度的随机英文/数字/符号
- 2、2.0 生成指定长度的随机英文和数字
- 3、3.0 生成指定长度的随机英文和数字和符号
- 4、4.0 生成多组数据并存入文件
- 二、碰到的问题
- 问题1:生成多组数据,写入文件的代码逻辑是怎么实现?
- 问题2:当密码是纯数字的时候,excel打开csv格式的文件,显示的是科学记数法?
- 问题3:当拿到一个需求时候,怎么梳理出代码逻辑?
一、研发内容
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这个数字进行处理: