2013-12-03 6 views
0

Я пишу программу, которая должна взять строку (пароль, введенный пользователем) и протестировать ее, чтобы убедиться, что она отвечает следующим требованиям: должен содержать как минимум одну прописную букву и одну строчную букву должен начинаться с буквой минимумом из восьми символов без пробелов должен содержать как минимум две цифрТестер паролей в Python

это то, что я до сих пор, и я застрял недействительные синтаксические ошибки запущенных = 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") 
+0

логика здесь не работает вообще - как только вы пройти первый (цифра), проверьте вы установите пароль, равное «действительным» (который равен нулю ..). После этого вы оставите все остальные тесты (выведите ошибку, я думаю, так как re.search ожидает строку. – agentp

+0

Здесь вы найдете несколько десятков вопросов. Вы пытались выполнить поиск вообще? В дополнение к тому, что я связал, см. [здесь] (http://stackoverflow.com/questions/17105957/python-password-strength?rq=1) и [здесь] (http://stackoverflow.com/questions/16709638/checking-the-strengthofof -a-password-how-to-check-conditions) и многие связанные с ними вопросы по этим 3, и все, что возникает при поиске '[python] [паролей]' и ... – abarnert

+0

, вы думаете, что «сделайте password checker "является домашним упражнением 1 в главе 2 каждого учебника python. – agentp

ответ

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 - но это назначение отсутствует в любом месте кода.

Сверху, хорошее применение isupper и islower. Эти методы делают ненужным поиск более ранних и нижних регистров регулярных выражений.

0

Вы, кажется, не получаете пароль от пользователя.

password = str("Enter the password") 

должно быть:

password = raw_input("Enter the password") 

Затем вы проверяете для действительных условий, которые могут вызвать логические ошибки. Таким образом, вместо того, чтобы проверять, удовлетворяет ли оно всем условиям, проверьте, не удовлетворяет ли оно каким-либо условием (т. Е.) Назад от того, что вы делаете прямо сейчас.

Например)

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" 
Смежные вопросы