背景
随机密码在网页、桌面或者手机客户端登陆时被经常用到,以提高用户账户的安全性。利用Python也可以开发随机密码生成程序。
问题及解答
问题
请编写程序,生成随机密码。具体要求如下:
(1)使用 random 库,采用 0x1010 作为随机数种子。
(2)密码 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*中的字符组成。
(3)每个密码长度固定为 10 个字符。
(4)程序运行每次产生 10 个密码,每个密码一行。
(5)每次产生的 10 个密码首字符不能一样。
(6)程序运行后产生的密码保存在“随机密码.txt”文件中。
解答一
程序框图
数据流图
程序代码
from random import *
seed(0x1010)
pw = "abcdefghijklmnopqrstuvwxyzABCD\
EFGHIJKLMNOPQRSTUVWXYZ1234567890!$@#%^&*"
###########方法一#########################
#为了保证密码首字符不同,首先利用随机库的
#的sample()方法得到10个不相同的字符作为
#首字符,然后再利用随机库的sample()方法
#产生10串9个字符的序列作为密码的后9位字符
ls = []
rd_sp0 = sample(pw,10)
for i in range(10):
rd_sp = sample(pw,9)
s = ""
for j in range(9):
s += rd_sp[j]
s = rd_sp0[i] + s +'\n'
ls.append(s)
#######################################
with open("随机密码.txt", "w", encoding = "UTF-8") as fo:
fo.writelines(ls)
解答二
程序框图
数据流图
程序代码
from random import *
seed(0x1010)
pw = "abcdefghijklmnopqrstuvwxyzABCD\
EFGHIJKLMNOPQRSTUVWXYZ1234567890!$@#%^&*"
###########方法二##########################
#为了保证密码首字符不同,利用if-else语句获取
#10个不相同的字符作为首字符,然后再利用随机库
#的sample()方法产生10串9个字符的序列作为密码的
#后9位字符
ls = []
ls0 = [] #首字符
for k in range(10):
#######产生10个不相同的首字符######
rd_sp = rd.sample(pw,10)
if rd_sp[0] in ls0:
ls0.append(rd.choice(pw.replace(rd_sp[0],"")))
else:
ls0.append(rd_sp[0])
###############################
s = ""
for i in range(1,len(rd_sp)):
s += rd_sp[i]
s = ls0[k] + s +'\n'
ls.append(s)
###########################################
with open("随机密码.txt", "w", encoding = "UTF-8") as fo:
fo.writelines(ls)