2016-05-10 8 views
0

Нет, я не проклинаю в названии. Мне нужно создать программу обработки паролей, которая проверяет ввод, соответствует ли он определенным критериям, одним из которых является то, что он должен содержать один из символов $ @!% & * _. это то, что у меня есть.

def pword(): 
    global password 
    global lower 
    global upper 
    global integer 

password = input("Please enter your password ") 
length = len(password) 
lower = sum([int(c.islower()) for c in password]) 
upper = sum([int(c.isupper()) for c in password]) 
integer = sum([int(c.isdigit()) for c in password]) 


def length(): 
    global password 
if len(password) < 8: 
    print("Your password is too short, please try again") 
elif len(password) > 24: 
    print("Your password is too long, please try again") 

def strength(): 
    global lower 
    global upper 
    global integer 
if (lower) < 2: 
    print("Please use a mixed case password with lower case letters") 
elif (upper) < 2: 
    print("Please use a mixed case password with UPPER case letters") 
elif (integer) < 2: 
    print("Please try adding numbers") 
else: 
    print("Strength Assessed - Your password is ok") 
+0

Вы можете использовать 're.match (...)' в 're' модуль стандартной библиотеки. Обратите внимание, что некоторые из символов, которые вы сопоставляете, имеют другое значение в контексте регулярного выражения, поэтому обязательно избегайте их - например, в совпадении используйте '' \ * '', чтобы найти литерал' * 'vs . '' * ''означает« 0 или более повторений ». https://docs.python.org/3.5/library/re.html#match-objects –

+0

Кстати, вам не нужно объявлять 'global foo' для переменных внутри функций, если вы их не модифицируете - они уже имеют доступ для чтения к глобальным по [правилам разрешения области видимости] (http://stackoverflow.com/a/292502/149428). Вы можете удалить все свои глобальные декорации внутри 'length()' и 'strength()'. –

ответ

0

Такого рода вещи будут работать:

required='[email protected]!%&*_' 

def has_required(input): 
    for char in required: 
     if input.contains(char): 
      return True 
    return False 

has_required('Foo') 
0
must_have = '[email protected]!%&*_' 
if not any(c in must_have for c in password): 
    print("Please try adding %s." % must_have) 

any(c in must_have for c in password) возвращает истину, если какой-либо один из персонажей password также в must_have, другими словами, он возвращает ИСТИНА пароль хорош. Поскольку вы хотите протестировать плохие пароли, мы помещаем not перед этим, чтобы отменить тест. Таким образом, оператор print выполняется здесь только для плохих паролей.

+1

спасибо, это сработало – vilty

0

Вы можете достичь этого легко, используя список + any().

has_symbol = any([symbol in password for symbol in list('[email protected]!%&*_')]) 

Или чуть больше распались:

required_symbols = list('[email protected]!%&*_') 
has_symbol = any([symbol in password for symbol in required_symbols]) 
Смежные вопросы