密码验证程序

时间:2016-04-26 07:52:38

标签: python passwords computer-science

我需要编写一个程序来检查以确保用户输入的密码传递以下参数:

  • 至少包含八个字符。
  • 不得超过24个字符。
  • 仅包含字母,数字和下面给出的特殊字符之一。
  • 至少包含两个大写字母。
  • 至少包含两个小写字母。
  • 至少包含两位数字。
  • 包含以下特殊字符之一:!@#$%& *()_

除了“仅包含字母,数字和下面给出的特殊字符之一”外,我的所有工作都有效。

我不知道写什么来检查这个。有任何想法吗?任何有关清理代码或更有效地编写代码的提示也将受到赞赏。

password = input("Enter a password: ")

import re

def main():
upper = sum([int(x.isupper()) for x in password])

lower = sum([int(x.islower()) for x in password])

digit = sum([int(x.isdigit()) for x in password])

length = len(password)

special = re.search("[!@#$%&*()]", password)

if length >= 8 and length <=24:
    if upper >=2:
        if lower >=2:
            if digit >=1:
                if special:
                    print("Acceptable password.")
                else:
                    print("Unacceptable.")
main()

1 个答案:

答案 0 :(得分:2)

创建一个允许的字符池,并使用set的强大功能来检查不需要的字符。

import string
pool = string.ascii_letters + string.digits + '!@#$%&*()_'

这将为您提供'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%&*()_'

现在,您可以检查密码和字符池之间的difference。让您的密码为'ABCD§12'

set(password).difference(pool)

此代码将为您提供{'§'}

所以你只需要检查差异结果的长度。如果是0一切都很好。