【发布时间】:2019-04-25 10:04:15
【问题描述】:
我正在使用 python 2.7。我写了一个代码来生成密码。为此,我使用了 random 模块来生成用于生成给定长度的密码的不同类型(大写、小写、特殊和数字)的字符数。当 a 为此编写函数时,它应该返回一个元组,但它返回 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 元组,但它给出的是 None。
【问题讨论】:
-
您的
return声明在哪里? o_0 -
else声明的正上方 -
所以......大多数时候它没有被执行,因此该函数返回
None。 -
但是函数不应该只在
return语句的末尾返回吗?如果没有找到return语句,则返回None。 -
所以,大多数时候你的函数没有到达 end 语句。仅当总和等于
a时。当函数在没有明确的 return 语句的情况下退出时,你有 None 。这听起来比仅仅猜测你真正想要返回的内容要好。