全国计算机等级考试二级Python语言程序设计模拟试卷C卷综合应用题

背景

随机密码在网页、桌面或者手机客户端登陆时被经常用到,以提高用户账户的安全性。利用Python也可以开发随机密码生成程序。

问题及解答

问题

请编写程序,生成随机密码。具体要求如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
(1)使用 random 库,采用 0x1010 作为随机数种子。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
(2)密码 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*中的字符组成。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
(3)每个密码长度固定为 10 个字符。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
(4)程序运行每次产生 10 个密码,每个密码一行。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
(5)每次产生的 10 个密码首字符不能一样。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬
(6)程序运行后产生的密码保存在“随机密码.txt”文件中。

解答一

程序框图
Created with Raphaël 2.2.0 开始 导入随机库random 初始化随机数种子seed() 初始化列表ls 利用sample() 从字符串pw中选择 10个不相同的 随机字符, 并保存为列表rd_sp0 作为首字符 遍历循环变量i, 长度是否 小于等于10 利用sample()产生 9个不相同的 随机字符, 并保存为列表rd_sp 作为后9个字符 初始化字符串s 遍历循环变量j, 长度是否小于 等于9 将列表rd_sp的字符串 连接起来,构成字符串s 将变量j加1 将列表rd_sp0 中的第i个和字符串s 组合成新的字符串s 将字符串s增加到列表ls 将循环变量i(10位随机字符串)加1 结束 yes no yes no
数据流图
字符串 pw
随机库类
sample方法
列表 rd_sp0
将列表 rd_sp0转化
成字符
首字符
字符串连接
字符串 pw
随机库类
sample方法
列表 rd_sp
将列表 rd_sp转化
成字符串 s
后字符串 s
字符串连接
组合字符串 s
将字符串 s
转化成列表
列表 ls
程序代码
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)

解答二

程序框图
Created with Raphaël 2.2.0 开始 导入随机库random 初始化随机数种子seed() 初始化随机密码列表ls, 密码首字符列表ls0 遍历循环变量i, 长度是否 小于等于10 利用sample() 从字符串pw中选择 10个不相同的 随机字符,并保存为列表rd_sp 列表rd_sp的首字符 是否在列表ls0中 将pw中已经存在于ls0 的字符删除 从pw中剩下的字符串选择 一个字符 将选择的一个字符添加到列表ls0 初始化字符串s 遍历循环变量j, j是否大于等于1并且小于10 将列表rd_sp的 第1个到第10个字符 组合为字符串s 将循环变量j加1 将列表ls0的第i个字符 和字符串s组合 将包含10个随机字符的 字符串s增加为列表元素ls 将循环变量i(10位随机字符串)加1 结束 将rd_sp的首字符添加到列表ls0 yes no yes no yes no
数据流图
字符串 pw
随机库类
sample方法
列表 rd
从列表元素 rd
中选择第0个
元素字符
首字符
字符串连接
列表 rd
从列表元素 rd
中选择第1
到第10个元素
后字符串 s
字符串连接
组合字符串 s
将字符串 s
转化成列表
列表 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)

知识点总结

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值