Python中的密码测试程序

时间:2013-12-03 05:21:06

标签: python

我正在编写一个应该取一个字符串的程序(用户输入的密码)并测试它以确保它符合以下要求: 必须包含至少一个大写字母和一个小写字母 必须以一封信开头 至少八个字符 没有空白 必须包含至少两位数

这是我到目前为止所做的事情,我遇到了无效的语法错误 running = True

while running:
    valid = 0
    password = str("Enter Password: ")
    if len(p) <8:
        print ("The password you entered is too short. Please try again.")
        running = False
    import re

    #check if contains a digit
    if re.search(r '\d', password):
        password = valid

    #check if contains uppercase letter
    if re.search(r '[A-Z]', password):
         password = valid

    #check if contains lowercase letter
    if re.search(r '[a-z]', password):
        password = valid

    #check if contains only letters
    if re.search(r "[a-z]", password) and re.search(r "[A-Z]", password):
        print ("Password must contain at least 2 digits. Please try again.")

    #check if contains all lowercase letters
    if password.islower():
        print ("Password must contain at least 1 uppercase letter. Please try again.")

    #check if contains all uppercase letters
    if password.isupper():
        print ("Password must contain at least 1 lowercase letter. Please try again.")

    if password == valid:
        print ("Valid Password")

2 个答案:

答案 0 :(得分:2)

除了正则表达式中的间距错误外,所显示的代码还存在多个问题,如DevEight所述。

1)password = str("Enter Password: ") - 这不会要求用户输入密码,这会将名称password设置为引用字符串"Enter Password: "。您需要input代替(raw_input代表Python版本2.x)。

2)if len(p) <8: - p不是已定义的名称。大概你的意思是password

3)running = False - 这是您设置此变量的唯一位置,但它控制着您的while循环。你的循环只有在false时退出,所以这将一直循环直到密码太短,最终它会退出。

4)password = valid - 这会将password名称设置为引用变量valid的内容,您将其初始化为0。然后对整数0运行进一步的正则表达式搜索,这当然是错误的。

5)if re.search(r "[a-z]", password) and re.search(r "[A-Z]", password): - 这是评论说它要求密码中至少有两个数字。它没有。我不知道你为什么会这么想。

6)if password == valid: - 这种类型的作品,在某种意义上说,您之前可能已将password设置为与valid具有相同的值。如上所述,这是错误的,但这意味着有时可能会返回True。使用工作代码,您需要完全不同的逻辑。

7)最重要的是,你的问题是指来自running = True的语法错误 - 但代码中的任何地方都没有该分配。

从好的方面来说,好好利用isupperislower。这些方法使您的早期大写和小写正则表达式搜索变得不必要。

答案 1 :(得分:0)

您似乎没有从用户那里获得密码。

password = str("Enter the password")

应该是:

password = raw_input("Enter the password")

然后,您正在检查可能导致逻辑错误的有效条件。所以,不要检查它是否满足所有条件,检查它是否不满足任何条件(即)你现在正在做的反转..

Eg)的

flag = 1

invalid = 0
if(len(password)<8):
    flag = 0
if password.islower():
    flag = 0
#all conditions
#at last, check for the flag value.
if flag:
    print "Password valid"
else:
    print "Password not valid"