簡體   English   中英

函數返回none而不是元組

[英]function returns none instead of a tuple

我正在使用python 2.7。 我寫了一個代碼來生成密碼。 為此,我使用random模塊生成了多少個不同類型的字符(大寫,小寫,特殊和數字),用於生成給定長度的密碼。 當為此編寫函數時,它應該返回一個元組,但它返回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元組,但它給出了無。

感謝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)

一個重復的線程也幫助了我。

所以,你要的是增加4張隨機數a 當然,你可以嘗試,直到找到一組加起來選擇4張隨機數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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM