密码字符的构成:52个大小写英文字母,10个阿拉伯数字(0~9),以及下划线"_"中的任意字符;
生成的密码,不允许出现连续两个字符的ASCII码是相邻或相同的。即如果生成的密码为"dAlsy5gh"、"RihLaaBU",则被视为不符合要求,不计入密码条数内。
将生成过程中不符合要求的也列出
随机生成10条“8个字符长度”的密码,,并将它们显示出来。
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- xdspower 2022-04-28 15:58关注
这个题的难点其实不是随机生成,而是过滤掉不符合的情况。
import random UChar='ABCDEFGHIGKLMNOPQRSTUVWXYZ' LChar='abcdefghijklmnopqrstuvwxyz' NChar='0123456789' AChar=UChar+NChar+'_'+LChar def OkS(inS): for i in range(7): if inS[i] == inS[i+1] : # 处理相同的情况 return False if (inS[i] in UChar ) and (inS[i+1] in UChar): AIdx=UChar.find(inS[i]) BIdx=UChar.find(inS[i+1]) if (AIdx-BIdx) == 1 or (BIdx-AIdx) ==1 : return False elif (inS[i] in LChar ) and (inS[i+1] in LChar): AIdx=LChar.find(inS[i]) BIdx=LChar.find(inS[i+1]) if (AIdx-BIdx) == 1 or (BIdx-AIdx) ==1 : return False elif (inS[i] in NChar ) and (inS[i+1] in NChar): AIdx=NChar.find(inS[i]) BIdx=NChar.find(inS[i+1]) if (AIdx-BIdx) == 1 or (BIdx-AIdx) ==1 : return False return True sCount=0 while sCount<10: aS='' for i in range(8): aS=aS + AChar[ random.randint(0,51) ] if OkS(aS): sCount=sCount+ 1 print("第{}个符合条件密码:{}".format(sCount,aS) ) else : print("不符合条件密码:{}".format(aS))
一个简单的实现
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥100 set_link_state
- ¥15 虚幻5 UE美术毛发渲染
- ¥15 CVRP 图论 物流运输优化
- ¥15 Tableau online 嵌入ppt失败
- ¥100 支付宝网页转账系统不识别账号
- ¥15 基于单片机的靶位控制系统
- ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度