函数不返回任何内容,而是返回元组

时间:2019-04-25 10:04:15

标签: python tuples nonetype

我正在使用python 2.7。我写了一个代码来生成密码。为此,我使用随机模块生成了多少个不同类型的字符(大写,小写,特殊和数字)用于生成给定长度的密码。当一个人为此编写一个函数时,它应该返回一个元组,但是它返回无。为什么会发生?

我尝试了一种随意的调试方法,将打印语句放置在它们之间,然后找出错误的出处。一切正常,除了返回None。

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元组,但没有给出。

2 个答案:

答案 0 :(得分:0)

感谢Kamiccolo的帮助。

函数应如下所示:

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)

duplicate thread也帮助了我。

答案 1 :(得分:0)

因此,您希望将四个随机数加到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