大佬,菜菜,帮帮 2022-04-28 15:19 采纳率: 80%
浏览 169
已结题

随机生成10条“8个字符长度”的密码,,并将它们显示出来。

密码字符的构成:52个大小写英文字母,10个阿拉伯数字(0~9),以及下划线"_"中的任意字符;
生成的密码,不允许出现连续两个字符的ASCII码是相邻或相同的。即如果生成的密码为"dAlsy5gh"、"RihLaaBU",则被视为不符合要求,不计入密码条数内。
将生成过程中不符合要求的也列出

  • 写回答

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条)

报告相同问题?

问题事件

  • 系统已结题 5月8日
  • 已采纳回答 4月30日
  • 创建了问题 4月28日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度