Password Strength=如何将函数返回的值添加到一起?

2024-04-25 00:25:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我似乎无法让这段代码添加函数中执行的所有点,然后在最后输出它。每次输入另一个密码时,它都返回值1。任何帮助都太好了!谢谢!!你知道吗

def length_pw():
    points = int(0)
    length = len(pword)
    if length < 6:
        print "%s is REJECTED"%pword
        if length <=8:
            points = points + 1
            return points
    else:
        points = points + 0
        print "%s is ACCEPTED"%pword

def upper_case():
    points = int(0)
    limit = 3
    for each in pword:
        if each.isupper():
            points = points + 1
            return points
        else:
            points = points + 0

def num_digits():
    points = int(0)
    limit= 3
    for each in pword:
        if each.isdigit():
            points = points + 1
            return points
        else:
            points = points + 0

def non_alpha_numeric():
    points = int(0)
    limit= 3
    for each in pword:
        if each.isalnum():
            points = points + 1
            return points
        else:
            points = points + 0

while True:

    pword = raw_input("Enter Password: ")

    points = 0
    points = length_pw()
    points = upper_case()
    points = num_digits()
    points = non_alpha_numeric()

    print points

Tags: inforreturnifisdeflengthelse
3条回答

将每个函数的返回值依次赋给points值。您要做的是指定它的当前值和函数的返回值之和。这意味着

points = 0
points = points + length_pw()
points = points + upper_case()
etc...

Python(和大多数其他语言)为此操作提供了一些简化的语法:

points = 0
points += length_pw()
points += upper_case()
etc...

您需要在每个函数调用之后添加点。例如

points += length_pw()
points += upper_case()
points += num_digits()
points += non_alpha_numeric()

您遇到的根本问题是,函数没有正确地return点值。第一个并不总是返回任何东西(这与返回None相同)。其他的都会在处理pword的第一个字母后停止。你知道吗

下面尝试解决这些问题,并清理或简化代码中的其他一些内容:

def length_pw(pword):
    points = 0
    length = len(pword)
    if length < 6:
        print "%s is REJECTED" % pword
        if length <= 8:  # this will always be True...
            points += 1
    else:
        print "%s is ACCEPTED" % pword
    return points

def eval_pword(pword, method_name):
    return sum(getattr(char, method_name)() for char in pword)

def upper_case(pword):
    return eval_pword(pword, 'isupper')

def num_digits(pword):
    return eval_pword(pword, 'isdigit')

def non_alpha_numeric(pword):
    return len(pword) - eval_pword(pword, 'isalnum')  # total - alpha-numeric

while True:
    pword = raw_input("Enter Password: ")
    points = (length_pw(pword) + upper_case(pword) +
              num_digits(pword) + non_alpha_numeric(pword))
    print points

相关问题 更多 >