首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >函数返回none而不是元组

函数返回none而不是元组
EN

Stack Overflow用户
提问于 2019-04-25 18:04:15
回答 2查看 247关注 0票数 0

我使用的是python 2.7。我写了一段代码来生成密码。为此,我使用了random模块来生成多少个不同类型的字符(大写、小写、特殊和数字)来生成给定长度的密码。当a为此编写一个函数时,它应该返回一个元组,但它返回None。为什么会发生这种情况?

我尝试了一种随意的调试方法,将打印语句放在中间并找出错误所在。除了返回None之外,一切都很正常。

代码语言:javascript
代码运行次数:0
运行
复制
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元组,但它没有给出任何结果。

EN

回答 2

Stack Overflow用户

发布于 2019-04-29 13:14:41

感谢Kamiccolo的帮助。

该函数应如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
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也帮了我大忙。

票数 0
EN

Stack Overflow用户

发布于 2019-04-29 14:46:20

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

0a之间选择三个分割点要好得多

代码语言:javascript
代码运行次数:0
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55846696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档