2015-03-05 5 views
1

Я создал программу, которая должна запросить у вас пароль и проверить, соответствует ли он определенным требованиям, и если он не отвечает им, он попросит вас ввести еще один пароль. Я пробовал заниматься этим повторным запросом в цикле с диапазоном, установленным в 3. Это вроде работает, но вроде как нет. Если вы это исправите, в первый раз он скажет: «Пароль действителен». и не спрашивать вас снова. Но если вы ошибетесь в первый раз, он снова спросит, но независимо от того, что вы вводите, в нем появятся те же сообщения об ошибках, что и в первый раз.Моя петля не работает, как должна

minlength = (8) 
errors = list() 
i = 0 
for i in range(3): 
    pw = str(input("Insert new password.")) 
    num = sum(1 for c in pw if c.isnumeric()) 
    alpha = sum(1 for c in pw if c.isalpha()) 
    if len(pw) < minlength: 
     errors.append("Not enough characters") 
    if alpha < 1: 
     errors.append("At least on letter is needed") 
    if num < 1: 
     errors.append("At least one number is needed") 
    if pw.isalnum() == False: 
     errors.append("Must be alphanumeric") 
    if not errors: 
     print("Password is valid") 
     break 
    else: 
     print("Password is invalid") 
     for err in errors: 
      print(err) 
      break 

Мне нужно, чтобы он не выдавал те же сообщения об ошибках, если вы вводите что-то другое.

ответ

0

Вы должны очистить errors список в начале цикла, или это будет локальная переменная объявлена ​​внутри цикла, как:

for i in range(3): 
    errors = list() 
    ... 

Как ваш код в настоящее время пишется, когда есть ошибки, элементы вставляются в этот список на первой итерации цикла, и они остаются там неопределенно, даже в последующих итерациях.

0

Проблема заключается в том, что вы объявляете массив errors только один раз (перед циклом) и многократно добавляете к нему. Вы можете исправить проблему, правильно определив переменную errors - переместите линию errors = list() внутри цикла for.