我使用的是python 2.7。我写了一段代码来生成密码。为此,我使用了random模块来生成多少个不同类型的字符(大写、小写、特殊和数字)来生成给定长度的密码。当a为此编写一个函数时,它应该返回一个元组,但它返回None。为什么会发生这种情况?
我尝试了一种随意的调试方法,将打印语句放在中间并找出错误所在。除了返回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元组,但它没有给出任何结果。
发布于 2019-04-29 05:14:41
感谢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也帮了我大忙。
发布于 2019-04-29 06:46:20
所以你想要四个随机数加到a
上?当然,您可以尝试选择四个随机数,直到找到一个加起来等于a
的集合,但对于a
的大值来说,这可能需要一段时间(并且您肯定不想递归地执行此操作)。
在0
和a
之间选择三个分割点要好得多
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
https://stackoverflow.com/questions/55846696
复制