Книга: PyNEng
Назад: for
Дальше: break, continue, pass

while

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 станет ложным.

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

С помощью цикла 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 установлен 
Назад: for
Дальше: break, continue, pass