Цикл while в Python – как работает и синтаксис. Цикл while в питоне.

Когда в цикле while может пригодиться предложение else? Распространенной ситуацией является поиск определенного элемента в списке. Вы можете использовать оператор break для выхода из цикла, если элемент найден, а предложение else может содержать код, который будет выполнен, если элемент не найден:

Как работать с циклами в Python?

Ниже приведены примеры решений распространенных проблем, с которыми сталкиваются разработчики на Python и специалисты по анализу данных:

  • Как перебрать значения списка циклом for?
  • Как получить индекс элемента в цикле for в Python?
  • Как перебрать словарь (dict) циклом for?
  • Как работает цикл while в Python?
  • Что такое pass в Python или как ничего не делать в цикле?
  • Как выполнить следующий проход цикла используя оператор continue?
  • Как досрочно выйти из цикла используя оператор break?
  • Как выполнить код после завершения цикла используя оператор else?
  • Как вернуть значение из цикла оператором return?

Как перебрать значения списка циклом for?

Циклы For рассматривают коллекцию элементов, например, список или dict, и выполняют блок кода для каждого элемента коллекции.

for i in 0, 1, 2, 3, 4: print(i) # 0 # 1 # 2 # 3 # 4

В приведенном выше цикле for выполняется итерация по списку чисел. На каждой итерации значение i устанавливается на следующий элемент в списке. Поэтому сначала будет 0, потом 1, потом 2 и т.д.

Аналогично, цикл for работает с любым видом списка, например, со списком строк:

Часто требуется создать и перезаписать последовательность чисел, для чего полезна функция range:

for x in range(1, 6): print(x) # 1 # 2 # 3 # 4 # 5

Как получить индекс элемента в цикле for в Python?

Если вы хотите перебрать как элементы списка, так и их индексы, вы можете использовать функцию enumerate:

for index, item in enumerate('one', 'two', 'three', 'four'): print(index, '::', item) # (0, '::', 'one') # (1, '::', 'two') # (2, '::', 'three') # (3, '::', 'four')

Функция enumerate создает кортежи, которые разбиваются на указатель (целое число) и элемент (фактическое значение из списка).

Блок-схема цикла while

Блок-схема цикла while

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

1) Оператор Continue — При обнаружении оператора continue управление передается в начало цикла. Рассмотрим следующий пример.

# печатает все буквы, кроме 'a' и 't' i = 0 str1 = 'javatpoint' while i
Текущая буква : j Текущая буква : v Текущая буква : p Текущая буква : o Текущая буква : i Текущая буква : n

2-я команда прерывания - при появлении команды прерывания управление снимается с цикла.

# Передача управления осуществляется # когда команда break скоро увидит t i = 0 str1 = 'javatpoint' while i
Текущая буква : j Текущая буква : j Текущая буква : a Текущая буква : a Текущая буква : v Текущая буква : a

Оператор pass используется для объявления пустого цикла. Он также используется для определения пустого класса, функции и оператора управления. Рассмотрим следующий пример.

# Пустой цикл str1 = 'javatpoint' i = 0 while i
Значение i : 10

Пример 1: Программа для печати от 1 до 10 с использованием цикла while

i=1 #Цикл while повторяется до тех пор, пока условие не станет ложным. Пока(i<=10): print(i) i=i+1
1 2 3 4 5 6 7 8 9 10

Пример -2: Программа для печати таблицы заданных чисел

i=1 число=0 b=9 число = int(input("Введите число:")) while i
Введите число: 10 10 X 1 = 10 10 X 2 = 20 10 X 3 = 30 10 X 4 = 40 10 X 5 = 50 10 X 6 = 60 10 X 7 = 70 10 X 8 = 80 10 X 9 = 90 10 X 10 = 100

Бесконечный цикл while

Если условие в цикле while никогда не станет ложным, цикл while никогда не завершится и станет бесконечным циклом while.

Любое ненулевое значение в цикле while означает условие "всегда истинно", в то время как ноль означает условие "всегда ложно". Этот подход полезен, если мы хотим, чтобы наша программа непрерывно выполнялась в цикле while без каких-либо помех.

while(1): print("Привет! Мы находимся в бесконечном цикле while")
Здравствуйте! Мы находимся в бесконечном цикле Hello! Мы находимся в бесконечном цикле Hello! Мы находимся в бесконечном цикле while
var = 1 while(var != 2): i = int(input("Введите число:")) print("Введенное значение равно %d"%(i))
Введите число:10 Введенное значение равно 10 Введите число:10 Введенное значение равно 10 Введите число:10 Введенное значение равно 10 Бесконечное время

Использование else с циклом while

Python также позволяет использовать оператор else в цикле while. Блок else выполняется, когда условие в операторе while становится ложным. Как и в случае с циклом for, если while прерывается оператором break, else не выполняется, а else выполняется после else. Оператор else необязателен для использования в цикле while. Рассмотрим следующие примеры.

Когда в приведенном выше коде появляется оператор break, цикл while остановил выполнение и отменил оператор else.

Пример-3: Программа для вывода чисел Фибоначчи до заданного предела

Условия = int(input("Введите условия")) # первые два начальных члена a = 0 b = 1 count = 0 # проверяем, равно ли число членов нулю или отрицательно if(terms
введите термины 10 Последовательность Фибоначчи: 0 1 2 3 5 8 13 21 34

Цикл do-while

Существует две разновидности цикла while: собственно цикл while и цикл do-while. Разница в том, что do-while выполняется хотя бы один раз.

Цикл while может вообще не запускаться, если условие не выполняется с самого начала. Пауза - это противоположность. Сначала выполняется основная часть цикла, и только потом проверяется условие.

while2 1

Цикл do-while реализован в большинстве языков программирования, но в Python такого оператора нет. Однако его можно легко смоделировать - например, с помощью функций.

Давайте напишем код, имитирующий цикл do-while. Мы поместим все инструкции в функцию.

x = 20 def run_commands(x): print(x) run_commands(x) x += 1 while x

Эта программа выполняет run_commands() перед циклом while. Однако сам цикл while не выполняется: x равен 20.

Оператор else

Если вы хотите выполнить блок кода, когда проверка условия возвращает False, добавьте оператор else.

Добавим еще кое-что в наш код: в этом блоке мы пишем код, который выводится в консоль. Этот блок будет выполнен только после того, как на консоль будут выведены числа от 1 до 10.

Эта программа выводит на консоль числа от 1 до 10. Как только x станет равным 11, результатом проверки условия будет False. После этого выполняется другой блок кода.

Если вы не будете осторожны, вы можете случайно написать бесконечный цикл. Проверка условия бесконечного цикла всегда возвращает True. Пример бесконечного цикла:

x = 1 while x>= 1: print(x)

Этот цикл — бесконечный. Внутри цикла нет команды, которая изменяет значение x. Поэтому условие x>= 1 всегда верно. По этой причине цикл выполняется бесконечно часто.

Всегда будьте осторожны при создании цикла. Одна небольшая ошибка - и вы получите бесконечный цикл, который в конечном итоге приведет к сбою программы.

The else Clause

Python допускает необязательное предложение else в конце цикла while. Это уникальная особенность Python, которой нет в большинстве других языков программирования. Синтаксис показан ниже:

в то время какexpr>:заявление(s)>else:else_statement(s)>

Оператор else выполняется, когда цикл while завершается.

thought balloon

В этот момент вы можете подумать: "В чем смысл?". Того же самого можно добиться, вставив эти инструкции непосредственно после цикла while, без else:

в то время какexpr>:заявление(s)>else_statement(s)>

В чем разница?

В последнем случае, без оговорки else, он будет выполнен в любом случае после завершения цикла while.

Если он находится в предложении else, то он будет выполнен только в том случае, если цикл завершится "по исчерпанию", т.е. если цикл будет повторяться до тех пор, пока управляющее условие не станет ложным. Если цикл завершается оператором прерывания, то условие else не выполняется.

Рассмотрим следующий пример:

>>>n=5>>>в то время какn>0:.n-=1.вывести(n).else:.вывести(Петля завершена.).43210Петля завершена.

In this case, the loop repeated until the condition was exhausted: n became 0, so n>0 стал ложным. Когда цикл жил своей естественной жизнью, каким-то образом выполнялось предложение else. Обратите внимание на разницу:

>>>n=5>>>в то время какn>0:.n-=1.вывести(n).ifn==2:.Пауза.else:.вывести(Петля завершена.).432

Этот цикл преждевременно завершается с помощью break, поэтому предложение else не выполняется.

Может показаться, что значение else не подходит к циклу while так же, как и к оператору if. Гвидо ван Россум, создатель Python, даже сказал, что если бы он мог сделать все заново, он бы убрал из языка пункт else цикла while.

Infinite Loops

Предположим, вы пишете цикл while, который теоретически никогда не заканчивается. Звучит странно, не так ли?

Рассмотрим следующий пример:

>>>в то время какПравда:.вывести('foo').foofoofoo...foofoofooKeyboardInterruptTraceback (последний вызов):Файл"", линия2, ввывести('foo')

Этот код был завершен комбинацией клавиш Ctrl + C, которая создает разрыв клавиатуры. Иначе это могло бы продолжаться бесконечно. Многие строки вывода foo были удалены и заменены вертикальным многоточием в отображаемом выводе.

Очевидно, что истина никогда не может быть ложной, иначе у всех нас были бы большие проблемы. Таким образом, While True: запускает бесконечный цикл, который теоретически может выполняться бесконечно.

Может показаться, что это не то, что вы хотите сделать, но на самом деле такая модель поведения встречается довольно часто. Например, вы можете написать код для службы, которая запускается и работает и принимает запросы на обслуживание снова и снова. "Навсегда" в данном контексте означает до тех пор, пока вы не выключите его или до тепловой смерти вселенной, в зависимости от того, что наступит раньше.

Проще говоря, помните, что циклы могут быть разорваны с помощью оператора break. Бывает проще разорвать цикл на основе условий, определенных в теле цикла, чем на основе условия, оцененного в начале цикла.

Вот еще одна вариация цикла, показанного выше, с использованием .pop() для удаления элементов из списка по одному, пока он не станет пустым:

>>>a='foo','бар','baz'>>>в то время какПравда:.ifнеa:.Пауза.вывести(a.поп(-1)).bazбарfoo

Если a становится пустым, то not a становится true и команда break завершает цикл.

Вы также можете указать несколько операторов прерывания в цикле:

в то время какПравда:ifexpr1>:# Условие для завершения циклаПауза.ifexpr2>:# Еще одно условие завершенияПауза.ifexpr3>:# ДругойПауза

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

Бесконечные петли могут быть очень полезны. Только помните, что вам нужно убедиться, что цикл прерывается в определенный момент, чтобы он не стал бесконечным.

Nested while Loops

В целом, управляющие структуры Python могут быть вложены друг в друга. Например, условные операторы if/elif/другие могут быть вложенными:

ifВозраст18:ifПол=='M':вывести(Сын)else:вывести(дочь".)elifВозраст>=18иВозраст65:ifПол=='M':вывести(Отец)else:вывести(Мать)else:ifПол=='M':вывести('Дедушка)else:вывести(Бабушка)

Аналогично, цикл while может быть заключен внутри другого цикла while, как показано здесь:

>>>a='foo','бар'>>>в то время какlen(a):.вывести(a.поп(0)).b='baz',qux'.в то время какlen(b):.вывести('>',b.поп(0)).foo>baz>quxбар>baz>qux

Команда break или continue во вложенных циклах применяется к следующему циклу:

в то время какexpr1>:заявлениезаявлениев то время какexpr2>:заявлениезаявлениеПауза# Применяется к циклу while : loopПауза# Применяется к циклу while : loop

Более того, циклы while могут быть вложены в операторы if/elif/ else и наоборот:

ifexpr>:заявлениев то время какexpr>:заявлениезаявлениеelse:в то время какexpr>:заявлениезаявлениезаявление
в то время какexpr>:ifexpr>:заявлениеelifexpr>:заявлениеelse:заявлениеifexpr>:заявление

На самом деле, все управляющие структуры Python можно комбинировать в любой степени. Так и должно быть. Представьте, как было бы обидно, если бы существовали неожиданные ограничения типа "цикл while не может содержаться внутри оператора if" или "циклы while могут быть вложены друг в друга на максимальную глубину до четырех". Было бы очень трудно запомнить их все.

Бесконечные циклы

Предположим, вы пишете цикл while, который теоретически никогда не заканчивается. Звучит странно, не так ли?

Рассмотрим следующий пример:

while True: print('foo')

Этот код заканчивался комбинацией, вызывающей прерывание от клавиатуры.

Истинное никогда не станет ложным, иначе у всех нас были бы большие проблемы. Таким образом, while True запускает бесконечный цикл, который теоретически может продолжаться бесконечно.

Может показаться, что это не то, что вы хотели бы сделать, но на самом деле эта схема используется довольно часто. Например, вы можете написать код для службы, которая постоянно запускается и работает и принимает запросы на обслуживание. "Непрерывно" в данном контексте означает, что он будет работать до тех пор, пока вы его не выключите.

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

Вот еще одна вариация цикла, показанного выше, с удалением элементов из списка по одному, .pop(), пока он не станет пустым:

a = 'foo', 'bar', 'baz' while True: if not a: break print(a.pop(-1))

Когда a становится пустым, not a становится true, а команда break завершает цикл.

Вы также можете задать несколько команд прерывания в цикле:

while True: if : # Условие завершения цикла break. if : # Другое условие break. if : # Другое break.

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

Бесконечные циклы могут быть очень полезны. Только не забудьте убедиться, что цикл действительно разорван, чтобы он не стал бесконечным.

Вложенные циклы while

Управляющие структуры Python могут быть вложены друг в друга. Например, условные операторы if/elif/else могут быть вложенными:

если возраст<18: if gender == 'm': print('son') else: print('daughter') elif age>= 18 лет и старше<65: if gender == 'm': print('father') else: print('mother')>

Аналогично, цикл while может быть вложен внутрь другого цикла while, как показано здесь:

a = 'foo', 'bar' while len(a): print(a.pop(0)) b = 'baz', 'qux' while len(b): print('>', b.pop(0))

Оператор stop или continue, встречающийся во вложенных циклах, применяется к ближайшему циклу:

while : statement statement while : statement break # Применяется к while : loop break # Применяется к while e: loop.

Кроме того, циклы while могут быть вложены в операторы if/elif/else и наоборот:

if : statement while : statement statement else: while : statement statement statement statement statement
while : if : statement elif : statement else: statement if : statement

На самом деле, все управляющие структуры Python можно смешивать между собой в любой степени. Так и должно быть. Представьте, как было бы обидно, если бы существовали ограничения типа "циклы while нельзя заключать в оператор if" или "циклы while могут быть вложены друг в друга на максимальную глубину до четырех". Было бы очень трудно вспомнить все. Произвольные числовые или логические ограничения, по-видимому, являются признаком плохого дизайна языка программирования. К счастью, в Python их не так много.

Однолинейные циклы while

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

n = 5 while n>0: n -= 1; print(n)

Это работает только с простыми утверждениями; вы не можете объединить два составных утверждения в одной строке. Поэтому вы можете задать цикл while на одной строке, как указано выше, и написать оператор if на той же строке:

if True: print('foo')

Но так делать нельзя:

while n>0: n -= 1; if True: print('foo')

Помните, что PEP 8 не позволяет использовать несколько утверждений в одной строке. Поэтому не следует делать это слишком часто.

Оцените статью
Uhistory.ru
Добавить комментарий