Подтверждение пароля в Python

Я немного изучаю Python и пытаюсь решить следующую проблему: Часть процедуры проверки приведена ниже. Когда пользователь вводит пароль, он проверяется на наличие от 8 до 15 символов, а затем запрашивается подтверждение пароля, вводя его снова. Требовать выполнения задачи (а) СОСТОЯНИЕ 1, СОСТОЯНИЕ 2 и задача (b) оператор IF ... ELSE. Кодируйте и тестируйте программу.

password1 = input("Please enter a new password, between 8 and 15 characters: ")

match = False

while CONDITION 1

  while CONDITION 2

    password1 = input ("Password must be between 8 and 15 characters - please re-enter: ")
  endwhile

  password2 = input ("Please verify password: ")

  if ....

    print 
  else

  endif

endwhile

Я выполнил задание (b), но в задании (a) возникла проблема с условием цикла while «while match:». Когда я оставляю переменную match = False и ввожу пароль с необходимым количеством символов, цикл сразу заканчивается и не проверяется с помощью оператора if .. else. Если я напишу match = True и с первой попытки введу неверное количество символов (с правильным номером это снова завершит цикл), программа все равно будет проверяться, игнорируя количество символов. Если пароль был таким же (пример 111 и 111), он возвращается к циклу и снова запрашивает пароль с необходимым количеством символов. Затем, если я ввожу после правильного количества символов и проверки пароля то же самое, это завершает программу, как это должно быть. Я думаю, что что-то с условием «совпадать» в цикле while не правильно, но не может понять, каким оно должно быть. Благодарность

password1 = input("Please enter a new password, between 8 and 15 characters: ")
match = True
while len(password1) < 8 or len(password1) > 15:
  password1 = input ("Password must be between 8 and 15 characters - please re-enter: ")
  while match:
    password2 = input ("Please verify password: ")
    if password1 == password2:
      print ("Password is valid")
      break
    else:
      print ("Password is invalid")

Всего 2 ответа


Я думаю, как и вы, вы новичок в этом. Я считаю следующее неправильным в вашей интерпретации кода проблемы: Условия 1 и 2 не на месте, если оператор находится в неправильном цикле. Ваш матч также не переключается.

Проверь это:

def password_verification():
    password1 = input('Please enter a new password, between 8 to 15 characters: ')
    match = False
    while match is False:
        while len(password1) < 8 or len(password1) > 15:
            password1 = input('Password must be between 8 to 15 characters - please re-enter password: ')
        password2 = input('Please verify password: ')
        if password1 == password2:
            print('Password is valid')
            match = True

        else:
            print('Password is invalid')

    return match

password_verification()

Вы соответствуете только тогда, когда в первый раз было введено неправильное количество символов. Что произойдет, если в первый раз пользователь введет от 8 до 15 символов? Первый цикл while не будет выполнен, и, следовательно, ничего не будет выполнено. Условие 1 (длина от 8 до 15) должно проверяться вне цикла, а второй цикл while должен храниться отдельно.

pass1 = input('Enter a password : ')
while len(pass1) < 8 or len(pass1) > 15:
    print('Incorrect, try again')
    pass1 = input('Enter a password : ')
# Program reaches here only if pass1 is between 8 to 15 characters, otherwise first loop will be infinite
pass2 = input('Verify the password : ')
if pass1 == pass2:
    print('Valid')
else:
    while pass1 != pass2:
        pass2 = input('Invalid. Re-enter the correct password : ')

Приведенный выше код сначала принимает password1 , проверяет, находится ли он в диапазоне 8-15 символов. Если это не так, первый цикл while продолжает выполняться. Когда задан верный ввод, он принимает password2 и проверяет равенство. Если он совпадает в первый раз, дальнейший цикл while не требуется. Если он не совпадает, цикл while продолжает выполняться до тех пор, пока не будут предоставлены одинаковые пароли. Надеюсь это поможет!


Есть идеи?

10000