你如何使用:isalnum,isdigit,isupper来测试字符串的每个字符?

时间:2013-12-14 10:43:32

标签: python function passwords return

我正在尝试制作一个密码强度模拟器,要求用户输入密码,然后给出一个分数。

我正在使用:

islanum() 
isdigit()
isupper() 

尝试查看输入的密码有多好。

我不想返回布尔值,而是要评估密码的每个字符,然后程序将所有“True”值加起来并将其转换为分数。示例代码:

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

任何帮助将不胜感激!!谢谢!

3 个答案:

答案 0 :(得分:3)

.isalnum().isupper().isdigit()和朋友是Python中str类型的方法,并且这样调用:

>>> s = "aBc123"
>>> s[0].isalnum()
True
>>> s[1].isupper()
True
>>> s[3].isdigit()
True

简单getscore()功能:

s = "aBc123@!xY"

def getscore(s):
    score = 0
    for c in s:
        if c.isupper():
            score += 2
        elif c.isdigit():
            score += 2
        elif c.isalpha():
            score += 1
        else:
            score += 3
    return score

print getscore(s)

<强>输出:

13

更好的版本:

s = "aBc123@!xY"


def getscore(s):
    return len(s) + len([c for c in s if c.isdigit() or c.isupper() or not c.isalpha()])

print getscore(s)

<强>输出:

17

答案 1 :(得分:0)

您可以使用类似

的内容
password = "SomePa$$wordYouWantToTest"
score = len([char for char in password if str(char).isupper() or str(char).isdigit() or not str(char).isalnum()])

这将计算password中所有上部字符,所有数字和所有非字母数字字符,给出一个整数

测试结果:

>>>score
8

答案 2 :(得分:0)

使用正则表达式解决另一种解决方法:

#!/usr/bin/python
import re
def password_strength(p):
    score = 0
    if re.search('\d+',p):
        score = score + 1
    if re.search('[a-z]',p) and re.search('[A-Z]',p):
        score = score + 1
    if re.search('[$#@!]', p):
        score = score + 1
    return score

print password_strength('Jac@kpasswor01')