Python密码检查器:数字和符号

4

我是新手学习Python,遇到了一个问题。我需要检查密码是否包含大写字母、小写字母、数字和符号。每类字符至少需要有1个,整个密码长度必须超过6个字符。目前我已经实现了大写和小写字母的检查。因为raw_input输入的是字符串,所以我该如何在这个字符串中检查数字和符号呢?

我的代码:

p = raw_input(("plz enter a password to check it's strength"))

if len (p) <= 6:
    if p.isupper() or p.islower() or int(p):
        print"This is a weak password  "
elif len(p) > 6 and len(p)  <26:
    if p.isupper() or p.islower() or isdigit():
        print "wea2k"
    else:
        print "good"

我需要知道如何检查输入的数字和符号。


5
你可能想使用一个密码强度检查模块,这里有一个:https://pypi.python.org/pypi/password_strength - multivac
听起来 Python 的正则表达式是你想要的。 试试这个:https://dev59.com/NHA75IYBdhLWcg3w_umD#2990682 - D. Smith
2个回答

6
尝试逐个满足需求。
has_upper = False
for char in p:
    if char.isupper():
        has_upper = True
        break

重复这个步骤来处理小写字母和数字。 对于特殊字符,使用相同类型的循环,但把 if 语句改成类似这样的:

if not (char.isupper() or char.islower() or char.isdigit()):

最后,如果这四个标志都是真的,那么你的密码就很安全;否则,它就不够强大。

你能从这里完成编码吗?


只要你知道,有一些编码方法更符合“Pythonic”的风格——更好地使用了这种语言的风格。例如:

has_upper = reduce(lambda a, b: a or b.isupper(), [_ for _ in p], False)

...替换了我给你的整个5行代码块。


我明天会把我的最终代码放在这里,现在需要去睡觉了。 - John
2
lambda函数的reduce实际上不符合Python风格,正确的写法是:any(char.isupper() for char in password)。 - rebeling

2

试试这个:

p = raw_input(("plz enter a password to check it's strength"))

upper_case = 0
lower_case = 0
number = 0
symbol = 0

for i in p:
    if i.isupper():
        upper_case += 1
    elif i.islower():
        lower_case += 1
    elif i.isdigit():
        number += 1
    else:
        symbol += 1

if len (p) <= 6:
    print"This is a weak password  "
elif upper_case > 0 and lower_case > 0 and number > 0 and symbol > 0:
    print "Good"
else:
    print "Too Weak"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接