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

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

这个题的难点其实不是随机生成,而是过滤掉不符合的情况。

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

一个简单的实现

望采纳,谢谢!

import random
import string
def getcode():
    return  ''.join(random.sample(string.ascii_letters + string.digits + '_', 8))
count = 0
while count < 10:
    code = getcode()
    for i in range(len(code) -1):
        if ord(code[i]) ==ord(code[i+1]) +1 or ord(code[i]) == ord(code[i+1]) or ord(code[i]) == ord(code[i+1]) -1:
            print("不合格:{}".format(code))
            break
        else:
            print(code)
            count += 1
            break



import string
import random

s = string.ascii_letters+string.digits+'_'


res = []

while len(res)<10:
    p = random.choices(s,k=8)
    tp = [ord(i) for i in p]
    for  k in range(len(tp)-1):
        if tp[k] == tp[k+1] or tp[k]-1 == tp[k+1] or tp[k]+1 ==tp[k+1]:
            print("不合格",''.join(p))
            break
    else:
        res.append(''.join(p))


print(res)