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

2024-04-29 06:43:05 发布

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

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

我正在使用:

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

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


Tags: 用户程序true密码示例return模拟器字符
3条回答

只是使用regex的另一种解决方法:

#!/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')

.isalnum().isupper().isdigit()和friends是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

你可以用一些像

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

相关问题 更多 >