函数返回none而不是tup

2024-10-01 04:45:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用的是python2.7。我写了一个生成密码的代码。为此,我使用random模块生成了多少个不同类型的字符(大写、小写、特殊和数字)来生成给定长度的密码。当a为此编写函数时,它应该返回一个元组,但不返回任何元组。为什么会这样?你知道吗

我尝试了一种不经意的调试方法,将打印语句放在中间,找出哪里出错了。一切正常,只不过一点也没有。你知道吗

def passlen(a):
    """Gives length of different characters to be put into passwords"""
    uplen=random.randrange(0, a)
    lwlen=random.randrange(0, a)
    speclen=random.randrange(0, a)
    nmbrlen=random.randrange(0, a)
    if uplen+lwlen+speclen+nmbrlen==a:
        print (uplen, lwlen, speclen, nmbrlen)
        return(uplen, lwlen, speclen, nmbrlen)
    else:
        passlen(a)

x=input("how many characters in the password?")

print(passlen(x))

预期的结果是4元组,但它没有给出任何结果。你知道吗


Tags: 模块代码密码类型random字符元组print
2条回答

感谢卡米科洛的帮助。你知道吗

函数应如下所示:

def passlen(a):
    """Gives length of different characters to be put into passwords"""
    uplen=int(random.randrange(0, a))
    lwlen=int(random.randrange(0, a))
    speclen=int(random.randrange(0, a))
    nmbrlen=int(random.randrange(0, a))
    bab=(uplen, lwlen, speclen, nmbrlen)
    if uplen+lwlen+speclen+nmbrlen==a:
        return bab
    else:
        return passlen(a)

Aduplicate thread在这方面也帮助了我。你知道吗

所以你想要四个随机数加到a?当然,您可以尝试选择四个随机数,直到找到一个加起来等于a的集合,但是对于a的大值,这可能需要一段时间(您肯定不希望递归地执行此操作)。你知道吗

最好在0a之间选择三个分割点:

def passlen(a):
    splits = sorted([random.randrange(0,a) for _ in range(3)])
    uplen = splits[0]
    lwlen = splits[1] - uplen
    speclen = splits[2] - uplen - lwlen
    nmbrlen = a - uplen - lwlen - speclen
    return uplen, lwlen, speclen, nmbrlen

相关问题 更多 >