while

Цикл while - это еще одна разновидность цикла в Python.

В цикле while, как и в выражении if, надо писать условие. Если условие истинно, выполняются действия внутри блока while. При этом, в отличие от if, после выполнения кода в блоке, while возвращается в начало цикла.

При использовании циклов while необходимо обращать внимание на то, будет ли достигнуто такое состояние, при котором условие цикла будет ложным.

Рассмотрим простой пример:

In [1]: a = 5

In [2]: while a > 0:
   ...:     print(a)
   ...:     a -= 1 # Эта запись равнозначна a = a - 1
   ...:
5
4
3
2
1

Сначала создается переменная а со значением 5.

Затем, в цикле while указано условие a > 0. То есть, пока значение а больше 0, будут выполняться действия в теле цикла. В данном случае, будет выводиться значение переменной а.

Кроме того, в теле цикла при каждом прохождении значение а становится на единицу меньше.

Примечание

Запись a -= 1 может быть немного необычной. Python позволяет использовать такой формат вместо a = a - 1.

Аналогичным образом можно писать: a += 1, a *= 2, a /= 2.

Так как значение а уменьшается, цикл не будет бесконечным, и в какой-то момент выражение a > 0 станет ложным.

Следующий пример построен на основе примера про пароль из раздела о конструкции if Пример использования конструкции if/elif/else. В том примере приходилось заново запускать скрипт, если пароль не соответствовал требованиям.

С помощью цикла while можно сделать так, что скрипт сам будет запрашивать пароль заново, если он не соответствует требованиям.

Файл check_password_with_while.py:

# -*- coding: utf-8 -*-

username = input('Введите имя пользователя: ' )
password = input('Введите пароль: ' )

password_correct = False

while not password_correct:
    if len(password) < 8:
        print('Пароль слишком короткий\n')
        password = input('Введите пароль еще раз: ' )
    elif username in password:
        print('Пароль содержит имя пользователя\n')
        password = input('Введите пароль еще раз: ' )
    else:
        print('Пароль для пользователя {} установлен'.format( username ))
        password_correct = True

В этом случае цикл while полезен, так как он возвращает скрипт снова в начало проверок, позволяет снова набрать пароль, но при этом не требует перезапуска самого скрипта.

Теперь скрипт отрабатывает так:

$ python check_password_with_while.py
Введите имя пользователя: nata
Введите пароль: nata
Пароль слишком короткий

Введите пароль еще раз: natanata
Пароль содержит имя пользователя

Введите пароль еще раз: 123345345345
Пароль для пользователя nata установлен