使用Python进行密码验证

时间:2020-05-19 13:27:11

标签: python while-loop passwords

我正在尝试编写代码来验证您访问程序的密码。密码至少应包含6个字符,并具有1个大写字母,1个小写字母,1个数字和1个标点符号。这就是我现在拥有的:

def main():
    while True:
        password = input("Please enter the desired password: ")
        if not password.islower(): 
            print("This is NOT a valid password.")
        elif not password.isupper(): 
            print("This is NOT a valid password.")
        elif not password.isdigit():
            print("This is NOT a valid password.")
        elif not len(password) < 6:
            print("This is NOT a valid password.")
        else:
            print("This is a valid password.")
            break
main() 

由于某种原因,即使我写了一个有效的密码,它也会一直显示密码无效,有人知道为什么会这样吗?另外,如何使代码检测到我编写的密码中至少包含1个标点符号?谢谢!

2 个答案:

答案 0 :(得分:0)

您的代码做错了。也就是说,您要检查整个密码是否较低,然后再次检查整个密码是否较高。因此,它始终显示not valid。但是您需要检查的是,密码是否包含单个小写字符,是否包含一个大写字符,是否包含一个数字,并且长度应至少为6。

为此,您必须使用any(),如果iterable中的任何项目为true,则返回True,否则返回False。

def main():
while True:
    password = input("Please enter the desired password: ")
    if not any(p.islower() for p in password): 
        print("This is NOT a valid password")
    elif not any(p.isupper() for p in password): 
        print("This is NOT a valid password")
    elif not any(p.isdigit() for p in password):
        print("This is NOT a valid password")
    elif len(password) < 6:
        print("This is NOT a valid password")
    else:
        print("This is a valid password")
        break
main() 

答案 1 :(得分:0)

函数islower()isupper()isdigit()检查字符串的 all 元素是否满足该条件。因此,例如在使用islower()时,您要检查字符串中的所有字符是否都为小写。

在这种情况下,我将使用正则表达式检查每个条件。使用正则表达式,您可以自定义要检查的所有规则,并且学习起来并不难(请参阅文档here

使用现有物品的例子

import re

password = input('Write a password: ')

if re.search('[A-Z]+', password) is None:
    print('invalid password!')
elif re.search('[a-z]+', password) is None:
    print('invalid password!')
elif re.search('[0-9]+', password) is None:
    print('invalid password!')
elif re.search('[' + string.punctuation + ']+', password) is None:
    print('invalid password!')
elif len(password) < 6
    print('invalid password!')
else:
    print('valid password!!')