密码字符的构成: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无用