Интерактивный учебник языка Python
1. Цикл while
Цикл while
(“пока”) позволяет выполнить
одну и ту же последовательность действий, пока проверяемое условие истинно.
Условие записывается до тела цикла и проверяется до выполнения тела цикла.
Как правило, цикл while
используется, когда невозможно
определить точное значение количества проходов исполнения цикла.
Синтаксис цикла while
в простейшем случае выглядит так:
while условие: блок инструкций
При выполнении цикла while
сначала проверяется условие.
Если оно ложно, то выполнение цикла прекращается и управление
передается на следующую инструкцию после тела цикла while
.
Если условие истинно, то выполняется инструкция, после чего условие
проверяется снова и снова выполняется инструкция.
Так продолжается до тех пор, пока условие будет истинно.
Как только условие станет ложно, работа цикла завершится и
управление передастся следующей инструкции после цикла.
Например, следующий фрагмент программы напечатает на экран
квадраты всех целых чисел от 1 до 10. Видно, что цикл while
может заменять цикл for ... in range(...)
:
i = 1 while i <= 10: print(i ** 2) i += 1
В этом примере переменная i
внутри цикла изменяется от 1 до 10.
Такая переменная, значение которой меняется с каждым новым проходом цикла,
называется счетчиком. Заметим, что после выполнения этого фрагмента
значение переменной i
будет равно 11
,
поскольку именно при i == 11
i <= 10
впервые
перестанет выполняться.Вот еще один пример использования цикла while
для определения количества цифр натурального числа n
:
5678
n = int(input()) length = 0 while n > 0: n //= 10 # это эквивалентно n = n // 10 length += 1 print(length)
В этом цикле мы отбрасываем по одной цифре числа, начиная с конца,
что эквивалентно целочисленному делению на 10 (n //= 10
),
при этом считаем в переменной length
, сколько раз это было сделано.
В языке Питон есть и другой способ решения этой задачи:
.
2. Инструкции управления циклом
После тела цикла можно написать слово else:
и после него блок операций, который будет
выполнен один раз после окончания цикла, когда проверяемое
условие станет неверно:
i = 1 while i <= 10: print(i) i += 1 else: print('Цикл окончен, i =', i)
Казалось бы, никакого смысла в этом нет, ведь эту же инструкцию можно
просто написать после окончания цикла. Смысл появляется только
вместе с инструкцией break
. Если во время выполнения Питон встречает
инструкцию break
внутри цикла, то он сразу же прекращает выполнение этого цикла и выходит из него.
При этом ветка
исполняться не будет. Разумеется, инструкцию break
осмыленно
вызывать только внутри инструкции if
, то есть она должна выполняться
только при выполнении какого-то особенного условия.
Приведем пример программы, которая считывает числа до тех пор, пока не встретит отрицательное число. При появлении отрицательного числа программа завершается. В первом варианте последовательность чисел завершается числом 0 (при считывании которого надо остановиться).
3 6 -1 4 0
a = int(input()) while a != 0: if a < 0: print('Встретилось отрицательное число', a) break a = int(input()) else: print('Ни одного отрицательного числа не встретилось')Во втором варианте программы сначала на вход подается количество элементов последовательности, а затем и сами элементы. В таком случае удобно воспользоваться циклом
for
. Цикл for
также может иметь ветку else
и содержать инструкции break
внутри себя.3 6 2 4
n = int(input()) for i in range(n): a = int(input()) if a < 0: print('Встретилось отрицательное число', a) break else: print('Ни одного отрицательного числа не встретилось')
Другая инструкция управления циклом — continue
(продолжение цикла). Если эта инструкция
встречается где-то посередине цикла, то пропускаются все оставшиеся
инструкции до конца цикла, и исполнение цикла продолжается
со следующей итерации.
break
и continue
содержатся внутри нескольких вложенных
циклов, то они влияют лишь на исполнение самого внутреннего цикла. Вот не самый интеллектуальный пример,
который это демонстрирует:
for i in range(3): for j in range(5): if j > i: break print(i, j)
break
и continue
не поощряется, если можно обойтись без их использования. Вот типичный пример плохого использования инструкции break
(данный код считает количество знаков в числе).567
n = int(input()) length = 0 while True: length += 1 n //= 10 if n == 0: break print('Длина числа равна', length)Гораздо лучше переписать этот цикл так:
567
n = int(input()) length = 0 while n != 0: length += 1 n //= 10 print('Длина числа равна', length)Впрочем, на Питоне можно предложить и более изящное решение:
567
n = int(input()) print('Длина числа равна', len(str(n)))
3.
Множественное присваивание В Питоне можно за одну инструкцию присваивания изменять значение сразу нескольких переменных. Делается это так: Этот код можно записать и так: Отличие двух способов состоит в том, что множественное присваивание в первом способе меняет значение двух переменных одновременно.Если слева от знака «=» в множественном присваивании должны стоять через запятую имена переменных, то справа могут стоять произвольные выражения, разделённые запятыми. Главное, чтобы слева и справа от знака присваивания было одинаковое число элементов.
Множественное присваивание удобно использовать, когда нужно обменять значения двух переменных. В обычных языках программирования без использования специальных функций это делается так:
a = 1 b = 2 tmp = a a = b b = tmp print(a, b) # 2 1В Питоне то же действие записывается в одну строчку:
a = 1 b = 2 a, b = b, a print(a, b) # 2 1
Ссылки на задачи доступны в меню слева. Эталонные решения теперь доступны на странице самой задачи.
Интерактивный учебник языка Python
Занятие 6. Цикл while
Задача «Минимальный делитель»
Во всех задачах считывайте входные данные через input()
и выводите ответ через print()
.
Тесты
Входные данные | Правильный ответ | Что вывела программа | Результат | |
---|---|---|---|---|
Запустить тест 1 | 15 | 3 | ||
Запустить тест 2 | 2 | 2 | ||
Запустить тест 3 | 3 | 3 | ||
Запустить тест 4 | 4 | 2 | ||
Запустить тест 5 | 5 | 5 | ||
Запустить тест 6 | 6 | 2 | ||
Запустить тест 7 | 7 | 7 | ||
Запустить тест 8 | 8 | 2 | ||
Запустить тест 9 | 35 | 5 | ||
Запустить тест 10 | 55 | 5 | ||
Запустить тест 11 | 179 | 179 |
Интерактивный учебник языка Python
Занятие 6.
Цикл whileЗадача «Степень двойки»
Условие
По данному натуральному числу N найдите наибольшую целую степень двойки, не превосходящую N. Выведите показатель степени и саму степень.
Операцией возведения в степень пользоваться нельзя!
Во всех задачах считывайте входные данные через input()
и выводите ответ через print()
.
Тесты
Входные данные | Правильный ответ | Что вывела программа | Результат | |
---|---|---|---|---|
Запустить тест 1 | 50 | 5 32 | ||
Запустить тест 2 | 10 | 3 8 | ||
Запустить тест 3 | 8 | 3 8 | ||
Запустить тест 4 | 7 | 2 4 | ||
Запустить тест 5 | 1 | 0 1 | ||
Запустить тест 6 | 2 | 1 2 | ||
Запустить тест 7 | 3 | 1 2 | ||
Запустить тест 8 | 4 | 2 4 | ||
Запустить тест 9 | 5 | 2 4 | ||
Запустить тест 10 | 100 | 6 64 | ||
Запустить тест 11 | 1025 | 10 1024 | ||
Запустить тест 12 | 15431543 | 23 8388608 |
Циклы в программировании.
Цикл while. Курс «Python. Введение в программирование»Циклы являются такой же важной частью структурного программирования, как условные операторы. С помощью циклов можно организовать повторение выполнения участков кода. Потребность в этом возникает довольно часто. Например, пользователь последовательно вводит числа, и каждое из них требуется добавлять к общей сумме. Или нужно вывести на экран квадраты ряда натуральных чисел и тому подобные задачи.
Цикл while
«While» переводится с английского как «пока». Но не в смысле «до свидания», а в смысле «пока имеем это, делаем то».
Можно сказать, while является универсальным циклом. Он присутствует во всех языках, поддерживающих структурное программирование, в том числе в Python. Его синтаксис обобщенно для всех языков можно выразить так:
while логическое_выражение { выражение 1; … выражение n; }
Это похоже на условный оператор if
. Однако в случае циклических операторов их тела могут выполняться далеко не один раз. В случае if
, если логическое выражение в заголовке возвращает истину, то тело выполняется единожды. После этого поток выполнения программы возвращается в основную ветку и выполняет следующие выражения, расположенные ниже всей конструкции условного оператора.
В случае while
, после того как его тело выполнено, поток возвращается к заголовку цикла и снова проверяет условие. Если логическое выражение возвращает истину, то тело снова выполняется. Потом снова возвращаемся к заголовку и так далее.
Цикл завершает свою работу только тогда, когда логическое выражение в заголовке возвращает ложь, то есть условие выполнения цикла больше не соблюдается. После этого поток выполнения перемещается к выражениям, расположенным ниже всего цикла. Говорят, «происходит выход из цикла».
Рассмотрите блок-схему цикла while
.
На ней ярко-голубыми прямоугольниками обозначена основная ветка программы, ромбом – заголовок цикла с логическим выражением, бирюзовым прямоугольником – тело цикла.
С циклом while возможны две исключительные ситуации:
Если при первом заходе в цикл логическое выражение возвращает
False
, то тело цикла не выполняется ни разу. Эту ситуацию можно считать нормальной, так как при определенных условиях логика программы может предполагать отсутствие необходимости в выполнении выражений тела цикла.Если логическое выражение в заголовке
while
никогда не возвращаетFalse
, а всегда остается равнымTrue
, то цикл никогда не завершится, если только в его теле нет оператора принудительного выхода из цикла (break
) или вызовов функций выхода из программы –quit()
,exit()
в случае Python. Если цикл повторяется и повторяется бесконечное количество раз, то в программе происходит зацикливание. В это время она зависает и самостоятельно завершиться не может.
Вспомним наш пример из урока про исключения. Пользователь должен ввести целое число. Поскольку функция input()
возвращает строку, то программный код должен преобразовать введенное к целочисленному типу с помощью функции int()
. Однако, если были введены символы, не являющиеся цифрами, то возникает исключение ValueError
, которое обрабатывается веткой except
. На этом программа завершается.
Другими словами, если бы программа предполагала дальнейшие действия с числом (например, проверку на четность), а она его не получила, то единственное, что программа могла сделать, это закончить свою работу досрочно.
Но ведь можно просить и просить пользователя корректно вести число, пока он его не введет. Вот как может выглядеть реализующий это код:
n = input("Введите целое число: ") while type(n) != int: try: n = int(n) except ValueError: print("Неправильно ввели!") n = input("Введите целое число: ") if n % 2 == 0: print("Четное") else: print("Нечетное")
Примечание 1. Не забываем, в языке программирования Python в конце заголовков сложных инструкций ставится двоеточие.
Примечание 2. В выражении type(n) != int
с помощью функции type()
проверяется тип переменной n. Если он не равен int
, то есть значение n не является целым числом, а является в данном случае строкой, то выражение возвращает истину. Если же тип n равен int
, то данное логическое выражение возвращает ложь.
Примечание 3. Оператор %
в языке Python используется для нахождения остатка от деления. Так, если число четное, то оно без остатка делится на 2, то есть остаток будет равен нулю. Если число нечетное, то остаток будет равен единице.
Проследим алгоритм выполнения этого кода. Пользователь вводит данные, они имеют строковый тип и присваиваются переменной n. В заголовке while
проверяется тип n. При первом входе в цикл тип n всегда строковый, то есть он не равен int
. Следовательно, логическое выражение возвращает истину, что позволяет зайти в тело цикла.
Здесь в ветке try
совершается попытка преобразования строки к целочисленному типу. Если она была удачной, то ветка except
пропускается, и поток выполнения снова возвращается к заголовку while
.
Теперь n связана с целым числом, следовательно, ее тип int
, который не может быть не равен int
. Он ему равен. Таким образом логическое выражение type(n) != int
возвращает False
, и весь цикл завершает свою работу. Далее поток выполнения переходит к оператору if-else, находящемуся в основной ветке программы. Здесь могло бы находиться что угодно, не обязательно условный оператор.
Вернемся назад. Если в теле try
попытка преобразования к числу была неудачной, и было выброшено исключение ValueError
, то поток выполнения программы отправляется в ветку except
и выполняет находящиеся здесь выражения, последнее из которых просит пользователя снова ввести данные. Переменная n теперь имеет новое значение.
После завершения except
снова проверяется логическое выражение в заголовке цикла. Оно даст True
, так как значение n по-прежнему строка.
Выход из цикла возможен только тогда, когда значение n будет успешно конвертировано в число.
Рассмотрим следующий пример:
total = 100 i = 0 while i < 5: n = int(input()) total = total - n i = i + 1 print("Осталось", total)
Сколько раз «прокрутится» цикл в этой программе, то есть сколько итераций он сделает? Ответ: 5.
Сначала переменная i равна 0. В заголовке цикла проверяется условие
i < 5
, и оно истинно. Тело цикла выполняется. В нем меняется значение i, путем добавления к нему единицы.Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.
Два меньше пяти. Тело цикла выполняется третий раз. Значение i становится равным трем.
Три меньше пяти. На этой итерации i присваивается 4.
Четыре по прежнему меньше пяти. К i добавляется единица, и теперь ее значение равно пяти.
Далее начинается шестая итерация цикла. Происходит проверка условия i < 5
. Но поскольку теперь оно возвращает ложь, то выполнение цикла прерывается, и его тело не выполняется.
«Смысловая нагрузка» данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for
, который так и называется: «цикл со счетчиком». Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for
.
В языке Python тоже есть цикл for
. Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.
Для while
наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:
total = 100 while total > 0: n = int(input()) total = total - n print("Ресурс исчерпан")
Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.
Самое главное для цикла while
– чтобы в его теле происходили изменения значений переменных, которые проверяются в его заголовке, и чтобы хоть когда-нибудь наступил случай, когда логическое выражение в заголовке возвращает False
. Иначе произойдет зацикливание.
Примечание 1. Не обязательно в выражениях total = total - n
и i = i + 1
повторять одну и ту же переменную. В Python допустим сокращенный способ записи подобных выражений: total -= n
и i += 1
.
Примечание 2. При использовании счетчика он не обязательно должен увеличиваться на единицу, а может изменяться в любую сторону на любое значение. Например, если надо вывести числа кратные пяти от 100 до 0, то изменение счетчика будет таким i = i - 5
, или i -= 5
.
Примечание 3. Для счетчика не обязательно использовать переменную с идентификатором i. Можно назвать переменную-счетчик как угодно. Однако так принято в программировании, что счетчики обозначают именами i и j (иногда одновременно требуются два счетчика).
Практическая работа
Измените последний код из урока так, чтобы переменная total не могла уйти в минус. Например, после предыдущих вычитаний ее значение стало равным 25. Пользователь вводит число 30. Однако программа не выполняет вычитание, а выводит сообщение о недопустимости операции, после чего осуществляет выход из цикла.
Используя цикл
while
, выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как**
. Фрагмент вывода:... 32 64 128 256 512 1024 ...
Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса
Как работает цикл while в python, примеры ~ PythonRu
Из этого материала вы узнаете, что такое циклы while, как они могут становиться бесконечными, как использовать инструкцию else
в цикле while и как прерывать исполнение цикла.
Управление потоком инструкций: цикл While в Python
Как и другие языки программирования Python включает несколько инструкций для управления потоком. Одна из таких — if else. Еще одна — циклы. Циклы используются в тех случаях, когда нужно повторить блок кода определенное количество раз.
Что такое цикл while в Python?
Цикл while используется в Python для неоднократного исполнения определенной инструкции до тех пор, пока заданное условие остается истинным. Этот цикл позволяет программе перебирать блок кода.
while test_expression:
body of while
Сначала программа оценивает условие цикла while. Если оно истинное, начинается цикл, и тело while
исполняется. Тело будет исполняться до тех пор, пока условие остается истинным. Если оно становится ложным, программа выходит из цикла и прекращает исполнение тела.
Рассмотрим пример, чтобы лучше понять.
a = 1
while a < 10:
print('Цикл выполнился', a, 'раз(а)')
a = a+1
print('Цикл окончен')
Вывод:
Цикл выполнился 1 раз
Цикл выполнился 2 раз
Цикл выполнился 3 раз
Цикл выполнился 4 раз
Цикл выполнился 5 раз
Цикл выполнился 6 раз
Цикл выполнился 7 раз
Цикл выполнился 8 раз
Цикл выполнился 9 раз
Цикл окончен
Бесконечный цикл while в Python
Бесконечный цикл while — это цикл, в котором условие никогда не становится ложным. Это значит, что тело исполняется снова и снова, а цикл никогда не заканчивается.
Следующий пример — бесконечный цикл:
a = 1
while a==1:
b = input('Как тебя зовут?')
print('Привет', b, ', Добро пожаловать')
Если запустить этот код, то программа войдет в бесконечный цикл и будет снова и снова спрашивать имена. Цикл не остановится до тех пор, пока не нажать Ctrl + C
.
Else в цикле while
В Python с циклами while также можно использовать инструкцию else
. В этом случае блок в else
исполняется, когда условие цикла становится ложным.
a = 1
while a < 5:
print('условие верно')
a = a + 1
else:
print('условие неверно')
Этот пример демонстрирует принцип работы else
в цикле while.
Вывод:
условие верно
условие верно
условие верно
условие верно
условие неверно
Программа исполняет код цикла while до тех, пока условие истинно, то есть пока значение a
меньше 5. Поскольку начальное значение a
равно 1, а с каждым циклом оно увеличивается на 1, условие станет ложным, когда программа доберется до четвертой итерации — в этот момент значение a
изменится с 4 до 5. Программа проверит условие еще раз, убедится, что оно ложно и исполнит блок else
, отобразив «условие неверно».
Прерывания цикла while в Python
В Python есть два ключевых слова, с помощью которых можно преждевременно остановить итерацию цикла.
- Break — ключевое слово
break
прерывает цикл и передает управление в конец циклаa = 1 while a < 5: a += 1 if a == 3: break print(a)
- Continue — ключевое слово
continue
прерывает текущую итерацию и передает управление в начало цикла, после чего условие снова проверяется. Если оно истинно, исполняется следующая итерация.
a = 1
while a < 5:
a += 1
if a == 3:
continue
print(a)
Цикл for и цикл while в Python — 9 примеров
Циклы в Python позволяют разработчикам повторять определенные части своего кода через ряд циклов, которые называются итерациями. Python поддерживает цикл for и цикл while.
Синтаксис цикла for в Python
Цикл for в Python итерирует по заданной последовательности и обладает следующим синтаксисом:
for <variable> in <iterable>:
for <variable> in range(<number>):
for <variable> in range(<start_number>, <end_number>):
for <variable> in range(<start_number>, <end_number>, <step_size>):
for i, <variable> in enumerate(<iterable>): # с индексом i
for <variable1>, <variable2> in zip(<iterable1>, <iterable2>):
Синтаксис цикла while в Python
Цикл while в Python повторяется, пока выполняется определенное логическое условие и обладает следующим синтаксисом:
while <boolean expression>:
...
Как работать с циклами в Python?
Ниже собраны примеры решений основных задач, с которыми сталкиваются Python разработчики и дата-саентисты:
Как перебрать значения списка циклом for?
Циклы for перебирают коллекцию элементов, таких как list или dict, и запускают блок кода с каждым элементом из коллекции.
for i in [0, 1, 2, 3, 4]:
print(i)
# Вывод:
# 0
# 1
# 2
# 3
# 4
Вышеприведенный цикл for выполняет итерацию по списку чисел.
Каждая итерация устанавливает значение i для следующего элемента списка. Итак, сначала это будет 0, затем 1, затем 2 и т.д
Аналогично, цикл работает с любыми типами списков, например, со списком строк:
for x in ['one', 'two', 'three', 'four']:
print(x)
# Вывод:
# one
# two
# three
# four
Часто, необходимо сгенерировать последовательность чисел и обойти ее, для этого удобно использовать функцию 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 генерирует кортежи, которые распаковываются в индекс (целое число) и элемент (фактическое значение из списка).
Как перебрать словарь (dict) циклом for?
Ключи словаря в Python можно перебрать циклом for следующим образом:
d = {"a": 1, "b": 2, "c": 3}
for key in d:
print(key)
# Вывод:
# "a"
# "b"
# "c"
Это эквивалентно использованию метода словаря keys:
d = {"a": 1, "b": 2, "c": 3}
for key in d.keys():
print(key)
# Вывод:
# "a"
# "b"
# "c"
Для перебора значений словаря в Python необходимо использовать метод словаря values:
d = {"a": 1, "b": 2, "c": 3}
for value in d.values():
print(values)
# Вывод:
# 1
# 2
# 3
Для перебора ключей и значений словаря используйте метод items:
d = {"a": 1, "b": 2, "c": 3}
for key, value in d.items():
print(key, "::", value)
# Вывод:
# a :: 1
# b :: 2
# c :: 3
Метод items возвращает последовательность кортежей, использование for с несколькими переменными (key, value) называется распаковкой. Ее можно применять и для списков:
collection = [('a', 'b', 'c'), ('x', 'y', 'z'), ('1', '2', '3')]
for i1, i2, i3 in collection:
print('i1 =', i1, ':: i2 =', i2, ':: i3 =', i3)
# Вывод:
# i1 = a :: i2 = b :: i3 = c
# i1 = x :: i2 = y :: i3 = z
# i1 = 1 :: i2 = 2 :: i3 = 3
Как работает цикл while в Python?
Цикл while будет повторять код в блоке, пока условие цикла не станет False. Следующий код выполнит код в блоке цикла 4 раза:
i = 0
while i
Если условие всегда истинно, цикл while будет выполняться бесконечно. Бесконечный цикл можно завершить оператором break, return или исключением.
while True:
print "Infinite loop"
# Вывод:
# Infinite loop
# Infinite loop
# Infinite loop
# ...
Что такое pass в Python или как ничего не делать в цикле?
pass — это нулевой оператор и используется, когда оператор требуется синтаксисом Python (например, в теле цикла for или while), но никакие действия не нужны. Этот оператор можно использовать как заполнитель для кода, который ещё не написан.
for x in range(10):
pass # нам не нужно ничего выполнять или пока не знаем что здесь должно быть, поэтому используем pass
В этом примере ничего не произойдёт. Цикл for завершится без ошибок, но никакие команды или код не будут выполнены. pass позволяет нам успешно выполнять наш код без полной реализации всех команд и действий.
Аналогично, pass можно использовать в циклах while, а также в выборках, определениях функций и т.д.
while x == y:
pass
Как выполнить следующий проход цикла используя оператор continue?
Оператор continue перейдет к следующей итерации цикла, минуя остаток текущего блока кода, но продолжая цикл. Оператор continue может использоваться только внутри цикла:
for i in (0, 1, 2, 3, 4, 5):
if i == 2 or i == 4:
continue
print(i)
# Вывод:
# 0
# 1
# 3
# 5
Обратите внимание, что 2 и 4 не выводятся. Это происходит потому, что continue переходит к следующей итерации, а не продолжает выводить i, когда i==2 или i==4.
Как досрочно выйти из цикла используя оператор break?
Оператор break моментально прерывает дальнейшее выполнение кода внутри цикла:
i = 0
while i
Использование операторы break, как и в случае с continue, допускаются только внутри циклов.
Оператор break также доступен внутри циклов for:
for i in (0, 1, 2, 3, 4):
print(i)
if i == 2:
break
# Вывод:
# 0
# 1
# 2
Обратите внимание, что 3 и 4 не выводятся после окончания цикла.
Если цикл имеет условие else, оно не выполняется, когда цикл завершается с помощью оператора break.
Как выполнить код после завершения цикла используя оператор else?
Циклы for и while могут иметь условие else.
Условие else выполняется только после завершения цикла for путем итерации до завершения в случае цикла for или после завершения цикла while, когда его условное выражение становится ложным.
Пример условия else в цикле for:
for i in range(3):
print(i)
else:
print('done')
# Вывод:
# 0
# 1
# 2
# done
Пример условия else в цикле while:
i = 0
while i
Условие else не выполняется, если цикл завершается принудительно (например, с помощью оператора break или путем вызова исключения):
for i in range(2):
print(i)
if i == 1:
break
else:
print('done')
# Вывод:
# 0
# 1
Зачем использовать конструкцию for/while … else?
Частой задачей на использование конструкции for … else является реализация поиска, например:
a = [1, 2, 3, 4]
for i in a:
if type(i) is not int:
print(i)
break
else:
print("no exception")
# Вывод:
# no exception
Для простоты восприятия, можно читать эту конструкцию как «if not break» или «if not found».
Как вернуть значение из цикла оператором return?
Оператор return выводит значение из функции, не выполняя следующий за нем код.
Если у вас есть цикл внутри функции, использование return внутри цикла эквивалентно break, поскольку остальная часть кода цикла не выполняется. Код следующий за циклом также не выполняется:
def break_loop():
for i in range(1, 5):
if (i == 2):
return(i)
print(i)
return(5)
break_loop()
# Вывод:
# 1
# 2
Если вы используете return во вложенных циклах, оператор return прервёт все циклы:
def break_all():
for j in range(1, 5):
for i in range(1, 4):
if i*j == 6:
print('return')
return(i)
print(i*j)
# Вывод:
# 1
# 2
# 3
# 2
# 4
# return (потому что 2*3=6, остальные итерации обоих циклов не выполняются)
# 3 (это результат работы функции из return)
Упражнение для закрепления
Обойдите и распечатайте все четные числа из списка в том же порядке, в котором они были получены. Не печатайте цифры, которые появятся в последовательности после 237.
numbers = [
951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544,
615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941,
386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345,
399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217,
815, 67, 104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717,
958, 609, 842, 451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470,
743, 527
]
# your code goes here
numbers = [
951, 402, 984, 651, 360, 69, 408, 319, 601, 485, 980, 507, 725, 547, 544,
615, 83, 165, 141, 501, 263, 617, 865, 575, 219, 390, 984, 592, 236, 105, 942, 941,
386, 462, 47, 418, 907, 344, 236, 375, 823, 566, 597, 978, 328, 615, 953, 345,
399, 162, 758, 219, 918, 237, 412, 566, 826, 248, 866, 950, 626, 949, 687, 217,
815, 67, 104, 58, 512, 24, 892, 894, 767, 553, 81, 379, 843, 831, 445, 742, 717,
958, 609, 842, 451, 688, 753, 854, 685, 93, 857, 440, 380, 126, 721, 328, 753, 470,
743, 527
]
# your code goes here
for number in numbers:
if number == 237:
break
if number % 2 == 1:
continue
print(number)
test_object("number", undefined_msg="Define a object `number` using the code from the tutorial to print just the desired numbers from the Упражнение description. ",incorrect_msg="Your `number` object is not correct, You should use an `if` statement and a `break` statement to accomplish your goal.")
success_msg("Great work!")
Цикл While
Цикл WhileЭлемент диаграммы действий.
Цикл While является одним из трех блоков диаграммы действий, предназначенных для реализации циклов итераций. Циклы необходимы для того, чтобы повторить некоторые действия несколько раз. Другие два доступных цикла - это Цикл For и Цикл Do While.
Цикл While выполняется до тех пор, пока заданное для этого цикла условие будет истинно (принимает значение true). Как только условие принимает значение "ложно", цикл завершается и идёт переход к следующему блоку диаграммы действий. Вы можете задать действия, которые вы хотите выполнить на каждой итерации цикла, путем добавления соответствующих блоков диаграммы действий внутрь блока Цикл While.
Полную информацию об операторе Java Цикл While вы можете получить здесь.
Цикл While очень похож на Цикл Do While. Единственным отличием является то, что истинность выражения проверяется не в конце каждой итерации, а в начале. Следовательно, Цикл While может не выполниться ни разу (истинность выражения проверяется в начале каждой итерации, и если с самого начала значением выражения будет ложно, то выполнение цикла будет сразу же прекращено). Первая же итерация цикла Do While выполнится обязательно (истинность выражения проверяется только в конце итерации).
Чтобы вставить блок "цикл while" в диаграмму действий- Перетащите элемент Цикл While из палитры Диаграмма действий на диаграмму типа агентов. Перетаскивая блок, отпустите кнопку мыши тогда, когда курсор мыши будет находиться над точкой, которая находится в той ветви диаграммы действий, куда вы хотите поместить данный блок (при наведении курсора эта точка должна подсветиться зеленым цветом).
- В выбранной вами ветви диаграммы действий должен появиться новый блок.
- Перейдите в панель Свойства.
- В поле Условие введите условие - логическое выражение, которое будет вычисляться для проверки того, должны ли действия этого цикла выполниться еще раз.
- Вставьте другие блоки диаграммы действий, задающие те действия, которые вы хотите выполнить на каждой итерации цикла, в соответствующие точки вставки, находящиеся на диаграмме внутри блока цикла While.
Свойства
- Основные
-
Условие – Логическое условие, которое будет вычисляться для проверки того, должны ли действия этого цикла выполниться еще раз.
- Специфические
-
Имя – Здесь вы можете указать имя объекта.
Метка – Здесь вы можете ввести комментарий к этому блоку, объясняющий смысл этого цикла. Комментарий будет отображен внутри блока вместо Java кода, соответствующего этому циклу.
Цвет заливки - Задает цвет заливки блока. Щелкните мышью внутри элемента управления и выберите нужный цвет из списка наиболее часто используемых цветов или же выберите любой другой цвет с помощью диалога Цвета.
См. также
Визуальное задание алгоритмов с помощью диаграмм действий
Редактирование блоков диаграммы действий
Цикл Do while
Python, а цикл
Что такое цикл while в Python?
Цикл while в Python используется для перебора блока кода, пока проверочное выражение (условие) истинно.
Обычно мы используем этот цикл, когда заранее не знаем, сколько раз нужно выполнить итерацию.
Синтаксис цикла while в Python
в то время как test_expression: Кузов а
В цикле while сначала проверяется тестовое выражение. Тело цикла вводится только в том случае, если test_expression
оценивается как True
.После одной итерации тестовое выражение проверяется снова. Этот процесс продолжается до тех пор, пока test_expression
не оценивается как False
.
В Python тело цикла while определяется отступом.
Тело начинается с отступа, а первая строка без отступа отмечает конец.
Python интерпретирует любое ненулевое значение как True
. Нет
и 0
интерпретируются как Ложь
.
Блок-схема цикла while
Блок-схема цикла while в PythonПример: цикл Python while
# Программа для добавления натурального
# номера до
# сумма = 1 + 2 + 3 +. .. + п
# Чтобы принять ввод от пользователя,
# n = int (input ("Введите n:"))
n = 10
# инициализировать сумму и счетчик
сумма = 0
я = 1
пока я <= n:
сумма = сумма + я
i = i + 1 # обновить счетчик
# выводим сумму
print ("Сумма есть", sum)
При запуске программы вывод будет:
Введите n: 10 Сумма 55
В приведенной выше программе тестовое выражение будет True
, пока наша переменная счетчика i меньше или равна n (10 в нашей программе).
Нам нужно увеличить значение переменной счетчика в теле цикла. Это очень важно (и по большей части о нем забывают). В противном случае возникнет бесконечный цикл (бесконечный цикл).
Наконец, отображается результат.
Цикл while с else
То же, что и для циклов for, в то время как циклы также могут иметь дополнительный блок else
.
Часть else
выполняется, если условие в цикле while оценивается как False
.
Цикл while можно завершить с помощью оператора break. В таких случаях часть else
игнорируется. Следовательно, часть цикла while else
выполняется, если не происходит разрыва и условие ложно.
Вот пример, иллюстрирующий это.
'' 'Пример для иллюстрации
использование оператора else
с циклом while '' '
counter = 0
пока счетчик <3:
print ("Внутренний цикл")
counter = counter + 1
еще:
print («Внутри остального»)
Выход
Внутренний контур Внутренний цикл Внутренний цикл Внутри остальное
Здесь мы используем переменную счетчика для трехкратной печати строки Inside loop .
На четвертой итерации условие в , а
становится False
. Следовательно, выполняется часть else
.
Python "while" циклы (неопределенная итерация) - Real Python
Смотреть сейчас В этом руководстве есть связанный видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным руководством, чтобы углубить свое понимание: Mastering While Loops
Итерация означает выполнение одного и того же блока кода снова и снова, возможно, много раз.Программная структура, реализующая итерацию, называется циклом .
В программировании есть два типа итераций, неопределенные и определенные:
При неопределенной итерации количество выполнений цикла не указывается заранее явно. Напротив, назначенный блок выполняется многократно, пока выполняется какое-либо условие.
При определенной итерации , количество раз, когда назначенный блок будет выполняться, явно указывается в момент начала цикла.
В этом руководстве вы наберете:
- Узнайте о цикле
while
, управляющей структуре Python, используемой для неопределенной итерации - Узнайте, как преждевременно выйти из цикла или итерации цикла
- Исследуйте бесконечные циклы
Когда вы закончите, вы должны хорошо понимать, как использовать неопределенную итерацию в Python.
Пройдите викторину: Проверьте свои знания с помощью нашей интерактивной викторины «Питон во время цикла».По завершении вы получите балл, чтобы вы могли отслеживать свой прогресс в обучении с течением времени:
Пройдите тест »
, а
Петля Давайте посмотрим, как операторы Python и
используются для построения циклов. Мы начнем с простого и будем приукрашивать.
Формат элементарного цикла и
показан ниже:
, а :
<заявление (я)>
<оператор (ы)>
представляет блок, который должен выполняться повторно, часто называемый телом цикла.Это обозначается отступом, как в заявлении if
.
Помните: Все управляющие структуры в Python используют отступ для определения блоков. См. Обсуждение операторов группировки в предыдущем учебном пособии.
Управляющее выражение
обычно включает одну или несколько переменных, которые инициализируются перед запуском цикла, а затем изменяются где-то в теле цикла.
Когда встречается цикл , а
,
сначала оценивается в логическом контексте.Если это правда, тело цикла выполняется. Затем
проверяется снова, и если все еще истинно, тело выполняется снова. Это продолжается до тех пор, пока
не станет ложным, после чего выполнение программы перейдет к первому оператору за пределами тела цикла.
Рассмотрим этот цикл:
>>> 1 >>> п = 5
2 >>> пока n> 0:
3 ... п - = 1
4 ... печать (n)
5 ...
64
73
82
91
100
Вот что происходит в этом примере:
n
- это изначально5
.Выражение в заголовке оператораwhile
в строке 2 имеет видn> 0
, что верно, поэтому тело цикла выполняется. Внутри тела цикла в строке 3 значениеn
уменьшается на1
до4
и затем печатается.Когда тело цикла завершено, выполнение программы возвращается к началу цикла в строке 2, и выражение вычисляется снова. Это все еще верно, поэтому тело снова выполняется, и печатается
3
.Это продолжается до тех пор, пока
n
не станет0
. В этот момент, когда выражение проверяется, оно ложно, и цикл завершается. Выполнение будет возобновлено с первого оператора, следующего за телом цикла, но в данном случае его нет.
Обратите внимание, что сначала проверяется управляющее выражение цикла while
, прежде чем что-либо произойдет. Если изначально задано значение false, тело цикла никогда не будет выполнено:
>>> п = 0
>>> пока n> 0:
... n - = 1
... print (n)
...
В приведенном выше примере, когда встречается цикл, n
равно 0
. Управляющее выражение n> 0
уже ложно, поэтому тело цикла никогда не выполняется.
Вот еще один цикл while
, включающий список, а не числовое сравнение:
>>> a = ['foo', 'bar', 'baz']
>>> а:
. .. печать (a.pop (-1))
...
баз
бар
фу
Когда список оценивается в логическом контексте, он является истинным, если в нем есть элементы, и ложным, если он пуст.В этом примере a
истинно, пока в нем есть элементы. После того, как все элементы были удалены с помощью метода .pop ()
и список пуст, a
ложно, и цикл завершается.
Python
break
и continue
Утверждения В каждом из примеров, которые вы видели до сих пор, все тело цикла и
выполняется на каждой итерации. Python предоставляет два ключевых слова, которые преждевременно завершают итерацию цикла:
Оператор Python
break
немедленно полностью завершает цикл.Выполнение программы переходит к первому оператору, следующему за телом цикла.Оператор Python
continue
немедленно завершает текущую итерацию цикла. Выполнение переходит к началу цикла, и управляющее выражение повторно оценивается, чтобы определить, будет ли цикл выполняться снова или завершиться.
Различие между break
и continue
показано на следующей диаграмме:
Вот файл сценария под названием break.py
, который демонстрирует разрыв , оператор
:
1n = 5
2 при n> 0:
3 п - = 1
4, если n == 2:
5 перерыв
6 отпечатков (п)
7print ('Цикл закончился.')
Запуск break.py
из интерпретатора командной строки дает следующий вывод:
C: \ Users \ john \ Documents> python break.py
4
3
Цикл закончился.
Когда n
становится 2
, выполняется оператор break
.Цикл полностью завершается, и выполнение программы переходит к оператору print ()
в строке 7.
Следующий сценарий, continue.py
, идентичен, за исключением оператора continue
вместо разрыва
:
1n = 5
2 при n> 0:
3 п - = 1
4, если n == 2:
5 продолжить
6 отпечатков (п)
7print ('Цикл закончился. ')
Результат continue.py
выглядит так:
C: \ Users \ john \ Documents> python continue.ру
4
3
1
0
Цикл закончился.
На этот раз, когда n
равно 2
, оператор continue
вызывает завершение этой итерации. Таким образом, 2
не печатается. Выполнение возвращается к началу цикла, условие переоценивается, и оно по-прежнему остается верным. Цикл возобновляется и завершается, когда n
становится 0
, как и раньше.
еще
Пункт Python допускает необязательное предложение else
в конце цикла while
.Это уникальная особенность Python, которой нет в большинстве других языков программирования. Синтаксис показан ниже:
, а :
<заявление (я)>
еще:
<дополнительные_условия>
, указанное в предложении else
, будет выполнено, когда цикл и
завершится.
Примерно сейчас вы можете подумать: «Чем это полезно?» Вы можете сделать то же самое, поместив эти операторы сразу после цикла while
, без else
:
, а :
<заявление (я)>
<дополнительные_условия>
В чем разница?
В последнем случае, без предложения else
,
будет выполняться после , а цикл
завершится, несмотря ни на что.
Когда
помещены в предложение else
, они будут выполнены, только если цикл завершится «по исчерпанию», то есть, если цикл повторяется до тех пор, пока управляющее условие не станет ложным. Если цикл завершается оператором break
, предложение else
выполняться не будет.
Рассмотрим следующий пример:
>>> >>> п = 5
>>> пока n> 0:
... п - = 1
... print (n)
... еще:
... print ('Цикл выполнен.')
...
4
3
2
1
0
Петля сделана.
В этом случае цикл повторяется до тех пор, пока условие не будет исчерпано: n
стало 0
, поэтому n> 0
стало ложным. Поскольку цикл дожил, так сказать, свою естественную жизнь, условие else
было выполнено. Теперь обратите внимание на разницу:
>>> п = 5
>>> пока n> 0:
... п - = 1
... print (n)
... если n == 2:
... перерыв
... еще:
... print ('Цикл выполнен.')
...
4
3
2
Этот цикл прерывается преждевременно с помощью break
, поэтому предложение else
не выполняется.
Может показаться, что значение слова else
не совсем подходит для цикла while
, а также для оператора if
. Гвидо ван Россум, создатель Python, на самом деле сказал, что, если бы ему пришлось делать это снова, он бы исключил из языка , в то время как цикл
, , еще предложение
.
Одна из следующих интерпретаций может помочь сделать его более интуитивным:
Думайте о заголовке цикла (
, а n> 0,
) как о заявленииif
(, если n> 0,
), которое выполняется снова и снова, причем предложениеelse
, наконец, выполняется, когда условие становится ложный.Думайте о
, иначе о
, как обез перерыва
, в том смысле, что следующий за ним блок выполняется, если не былоперерыва
.
Если вы не находите какое-либо из этих толкований полезным, не стесняйтесь игнорировать их.
Когда может быть полезно предложение else
в цикле и
? Одна из распространенных ситуаций - это поиск в списке определенного элемента. Вы можете использовать break
для выхода из цикла, если элемент найден, а предложение else
может содержать код, который должен выполняться, если элемент не найден:
>>> a = ['foo', 'bar', 'baz', 'qux']
>>> s = 'corge'
>>> я = 0
>>> пока я
Примечание: Приведенный выше код полезен для иллюстрации концепции, но на самом деле вы вряд ли будете искать в списке таким образом.
Прежде всего, списки обычно обрабатываются с определенной итерацией, а не с циклом и
. Определенная итерация рассматривается в следующем руководстве этой серии.
Во-вторых, Python предоставляет встроенные способы поиска элемента в списке. Вы можете использовать в операторе
:
>>> если в:
... print (s, 'найдено в списке.')
... еще:
... print (s, 'не найдено в списке.')
...
corge не найден в списке.
Также подойдет метод list.index ()
. Этот метод вызывает исключение ValueError
, если элемент не найден в списке, поэтому для его использования необходимо понимать обработку исключений.В Python вы используете оператор try
для обработки исключения. Пример приведен ниже:
>>> попробуйте:
... печать (a.index ('corge'))
... кроме ValueError:
... print (s, 'не найдено в списке.')
...
corge не найден в списке.
Вы узнаете об обработке исключений позже в этой серии.
Предложение else
с циклом while
- это немного странность, которую не часто можно увидеть. Но не уклоняйтесь от этого, если вы обнаружите ситуацию, в которой, как вам кажется, это добавляет ясности вашему коду!
Бесконечные петли
Предположим, вы пишете цикл и
, который теоретически никогда не заканчивается.Звучит странно, правда?
Рассмотрим этот пример:
>>> >>> при этом True:
... печать ('фу')
...
фу
фу
фу
.
.
.
фу
фу
фу
KeyboardInterrupt
Отслеживание (последний вызов последний):
Файл "", строка 2, в
печать ('фу')
Этот код был прерван командой Ctrl + C , которая генерирует прерывание с клавиатуры. В противном случае это продолжалось бы бесконечно. Многие выходные строки foo
были удалены и заменены вертикальным многоточием в показанном выходе.
Ясно, что True
никогда не будет ложным, иначе у всех нас будут большие проблемы. Таким образом, while True:
инициирует бесконечный цикл, который теоретически будет выполняться вечно.
Может быть, это не похоже на то, что вы хотели бы делать, но этот шаблон на самом деле довольно распространен. Например, вы можете написать код для службы, которая запускается и работает постоянно, принимая запросы на обслуживание. «Навсегда» в этом контексте означает, пока вы не выключите его или пока не наступит тепловая смерть вселенной, в зависимости от того, что наступит раньше.
Проще говоря, помните, что цикл может быть разорван с помощью оператора break
. Может быть проще завершить цикл на основе условий, распознаваемых в теле цикла, а не на основе условия, оцененного наверху.
Вот еще один вариант цикла, показанный выше, который последовательно удаляет элементы из списка с помощью .pop ()
, пока он не станет пустым:
>>> a = ['foo', 'bar', 'baz']
>>> в то время как True:
... если не:
... перерыв
... печать (a.pop (-1))
...
баз
бар
фу
Когда a
становится пустым, not a
становится истинным, и оператор break
выходит из цикла.
Вы также можете указать несколько операторов break
в цикле:
пока True:
if : # Одно условие для завершения цикла
перерыв
...
if : # Другое условие завершения
перерыв
...
if : # Еще один
перерыв
В подобных случаях, когда есть несколько причин для завершения цикла, часто проще прервать
из нескольких разных мест, чем пытаться указать все условия завершения в заголовке цикла.
Бесконечные циклы могут быть очень полезны. Просто помните, что вы должны в какой-то момент разорвать цикл, чтобы он не стал бесконечным.
Вложенные
, а
Петли В общем, управляющие структуры Python могут быть вложены друг в друга. Например, if
/ elif
/ else
условные операторы могут быть вложенными:
для лиц младше 18 лет:
если пол == 'M':
печать ('сын')
еще:
print ('дочь')
elif age> = 18 и age <65:
если пол == 'M':
печать ('отец')
еще:
печать ('мать')
еще:
если пол == 'M':
print ('дедушка')
еще:
print ('бабушка')
Точно так же цикл и
может содержаться в другом цикле , а
, как показано здесь:
>>> a = ['foo', 'bar']
>>> пока len (a):
... print (a.pop (0))
... b = ['baz', 'qux']
... пока len (b):
... печать ('>', b.pop (0))
...
фу
> баз
> qux
бар
> баз
> qux
break
или continue Оператор
, обнаруженный во вложенных циклах, применяется к ближайшему охватывающему циклу:
, а :
утверждение
утверждение
в то время как :
утверждение
утверждение
break # Применяется к циклу while :
break # Применяется к циклу while :
Кроме того, циклы и
могут быть вложены в , если операторы
/ elif
/ else
, и наоборот:
если :
утверждение
в то время как :
утверждение
утверждение
еще:
в то время как :
утверждение
утверждение
утверждение
, а :
если <выражение>:
утверждение
элиф <выражение>:
утверждение
еще:
утверждение
если <выражение>:
утверждение
Фактически, все управляющие структуры Python могут смешиваться друг с другом в той мере, в какой вам нужно.Так и должно быть. Представьте, как было бы неприятно, если бы возникли неожиданные ограничения, такие как «Цикл , в то время как цикл
не может содержаться в операторе if
» или «Цикл , в то время как циклы
могут быть вложены друг в друга глубиной не более четырех». Вам будет очень сложно их все запомнить.
Кажущиеся произвольными числовые или логические ограничения считаются признаком плохой разработки языка программы. К счастью, вы не найдете многих в Python.
Однострочный
, а
Петли Как и в случае с оператором if
, цикл и
может быть указан в одной строке.Если в блоке, составляющем тело цикла, есть несколько операторов, их можно разделить точкой с запятой (;
):
>>> п = 5
>>> пока n> 0: n - = 1; печать (п)
4
3
2
1
0
Однако это работает только с простыми операторами. Невозможно объединить два составных оператора в одну строку. Таким образом, вы можете указать цикл , а
все в одной строке, как указано выше, и написать оператор if
в одной строке:
>>> если True: print ('foo')
фу
Но вы не можете этого сделать:
>>> >>> при n> 0: n - = 1; если True: print ('foo')
SyntaxError: недопустимый синтаксис
Помните, что PEP 8 не рекомендует использовать несколько операторов в одной строке.Так что вам, вероятно, в любом случае не следует делать это очень часто.
Заключение
В этом руководстве вы узнали о неопределенной итерации с использованием цикла Python while
. Теперь вы можете:
- Построить базовый и сложный
, а петли
- Выполнение цикла прерывания с
break
иcontinue
- Используйте предложение
else
с цикломwhile
- Работа с бесконечными циклами
Теперь вы должны хорошо понимать, как многократно выполнять фрагмент кода.
Пройдите викторину: Проверьте свои знания с помощью нашей интерактивной викторины «Питон во время цикла». По завершении вы получите балл, чтобы вы могли отслеживать свой прогресс в обучении с течением времени:
Пройдите тест »
В следующем учебном пособии этой серии рассматривается определенная итерация с для циклов
- повторяющееся выполнение, при котором количество повторений указывается явно.
Смотреть сейчас В этом руководстве есть связанный видеокурс, созданный командой Real Python.Посмотрите его вместе с письменным руководством, чтобы углубить свое понимание: Mastering While Loops
Цикл while - изучение Python 3
при повторении цикла
последовательность действий много раз, пока какое-то условие не оценивается как False
.
Условие задается перед телом цикла и проверяется перед каждым выполнением тела цикла.
Обычно цикл и
используется, когда это невозможно.
чтобы заранее определить точное количество итераций цикла.
Синтаксис цикла while
в простейшем случае выглядит так:
при каком-то условии: блок заявлений
Python сначала проверяет условие.
Если ложно, то цикл прерывается и управление
передается в следующий оператор после тела цикла и
.
Если условие истинно, то выполняется тело цикла, а затем условие
проверяется снова.
Это продолжается, пока условие истинно.
Как только условие становится ложным, цикл завершается и
управление передается следующему оператору после цикла.
Например, следующий фрагмент программы распечатывает
квадраты всех целых чисел от 1 до 10. Здесь можно заменить цикл while на для ... в диапазоне (...)
петля:
1 4 9 16 25 36 49 64 81 год 100
я = 1 пока я <= 10: печать (я ** 2) я + = 1
В этом примере переменная i
внутри цикла выполняет итерацию от 1 до 10.
Такая переменная, значение которой изменяется с каждой новой итерацией цикла.
называется счетчиком. Обратите внимание, что после выполнения этого фрагмента
значение переменной i
определено и равно 11
,
потому что, когда i == 11
условие i <= 10
ложно впервые.
Вот еще один пример использования цикла и
для определения количества цифр целого числа n
:
5678
п = целое число (вход ()) длина = 0 пока n> 0: n // = 10 # это эквивалентно n = n // 10 длина + = 1 печать (длина) # 4
На каждой итерации отрезаем последнюю цифру числа
с использованием целочисленного деления на 10 ( n // = 10
). В переменной длина
мы считаем, сколько раз мы это сделали.
В Python есть другой, более простой способ решить эту проблему: длина = len (str (i))
.
Можно написать оператор else:
после тела цикла, который выполняется один раз после окончания цикла:
Нет
я = 1 пока я <= 10: печать (я) я + = 1 еще: print ('Цикл закончился, я =', я)
На первый взгляд это утверждение кажется бессмысленным, потому что утверждение else:
тело можно просто поставить после конца петли.Оператор "else" после цикла имеет смысл только при использовании
в сочетании с инструкцией перерыв
. Если во время выполнения цикла интерпретатор Python обнаруживает break
, он немедленно останавливает выполнение цикла и выходит из него.
В этом случае ветвь else:
не выполняется. Итак, break
используется для прерывания выполнения цикла во время
середина любой итерации.
Вот пример, похожий на Black Jack: программа, которая считывает числа и суммирует их. пока общая сумма не станет больше или равна 21.Входная последовательность заканчивается на 0 чтобы программа могла остановиться, даже если общая сумма всех чисел меньше 21.
Посмотрим, как он себя ведет на разных входах.
Версия 1. Цикл завершается нормально после проверки условия, поэтому "else" филиал выполнен.
2 4 7 0
total_sum = 0 а = int (вход ()) а! = 0: total_sum + = a если total_sum> = 21: print ('Общая сумма', total_sum) перерыв а = int (вход ()) еще: print ('Общая сумма меньше 21 и равна', total_sum, '.')
Версия 2. Цикл прерывается break
, поэтому "else"
ветка пропущена.
9 9 5 4 0
total_sum = 0 а = int (вход ()) а! = 0: total_sum + = a если total_sum> = 21: print ('Общая сумма', total_sum) перерыв а = int (вход ()) еще: print ('Общая сумма меньше 21 и равна', total_sum, '.')
Ветвь «Else» также может использоваться с циклом «for». Давайте посмотрим на пример, когда программа читает 5 целых чисел но останавливается сразу, когда встречается первое отрицательное целое число.
Версия 1. Выход из цикла происходит нормально, поэтому выполняется ветвь "else".
3 6 2 4 5
для i в диапазоне (5): а = int (вход ()) если a <0: print ('Встретил отрицательное число', а) перерыв еще: print ('Никаких отрицательных чисел не встречалось')
Версия 2. Цикл прерван, поэтому ветвь «else» не выполняется.
3 6 -2 4 5
для i в диапазоне (5): а = int (вход ()) если a <0: print ('Встретил отрицательное число', а) перерыв еще: print ('Никаких отрицательных чисел не встречалось')
Другая инструкция, используемая для управления выполнением цикла: продолжить
.Если интерпретатор Python встречает , продолжайте
где-нибудь в середине итерации цикла,
он пропускает все оставшиеся инструкции и переходит к следующей итерации.
Нет
для числа в диапазоне (2, 10): если число% 2 == 0: print ("Найдено четное число", num) Продолжать print ("Нашел номер", num)
Если break
и continue
помещаются внутри нескольких вложенных
петли, они влияют только на выполнение самого внутреннего.Давайте посмотрим на довольно глупый пример
для демонстрации:
Нет
для i в диапазоне (3): для j в диапазоне (5): если j> i: # ломает только for в строке 2 перерыв печать (я, j)
Инструкции прерваны
и продолжены
обескуражены, если вы можете реализовать свою идею, не используя их.
Вот типичный пример неправильного использования разрыва
:
этот код подсчитывает количество цифр целого числа.
567
п = целое число (вход ()) длина = 0 в то время как True: длина + = 1 п // = 10 если n == 0: перерыв print ('Длина', длина)
Переписать этот цикл с осмысленным условием цикла будет чище и легче для чтения:
567
п = целое число (вход ()) длина = 0 а n! = 0: длина + = 1 п // = 10 print ('Длина', длина)
В Python один оператор присваивания может изменять значение нескольких переменных.Посмотрим:
Эффект, продемонстрированный выше, код можно записать как:
Разница между двумя версиями заключается в том, что множественное присвоение изменяет значения двух переменных одновременно.
Множественное присвоение полезно, когда вам нужно обменять значения двух переменных. В старых языках программирования без поддержки множественного присваивания это можно сделать с помощью вспомогательной переменной:
Нет
а = 1 b = 2 tmp = a а = б b = tmp печать (а, б) # 2 1
В Python тот же своп можно записать одной строкой:
Нет
а = 1 b = 2 а, Ь = Ь, а печать (а, б) # 2 1
В левой части знака "=" должен быть список имен переменных, разделенных запятыми.В правой части могут быть любые выражения, разделенных запятыми. Списки в левой и правой частях должны быть одинаковой длины.
while Loop · Руководство по программированию UC Business Analytics R
↩Циклы while начинаются с проверки условия. Если это правда, то они выполняют инструкцию. После выполнения оператора условие снова проверяется и так далее, пока условие не станет ложным, после чего цикл завершится. Рекомендуется включать объект счетчика для отслеживания общего количества итераций
# синтаксис цикла while
счетчик <- 1
while (test_expression) {
утверждение
counter <- counter + 1
}
, в то время как циклы
потенциально могут привести к бесконечным циклам, если они написаны неправильно; поэтому вы должны использовать их с осторожностью.Чтобы предоставить простой пример, чтобы проиллюстрировать, насколько похожи для
и , а циклы
:
счетчик <- 1
while (counter <= 10) {
печать (счетчик)
counter <- counter + 1
}
# этот цикл for обеспечивает тот же результат
counter <- vector (mode = "numeric", length = 10)
for (я в 1: длина (счетчик)) {
печать (я)
}
Основное различие между циклом для
и циклом , в то время как
: цикл для
используется, когда количество итераций, которые должен быть запущен код, известно, где цикл , а цикл
используется, когда количество итераций не известно.Например, следующее принимает значение x
и случайным образом добавляет или вычитает 1 из значения до тех пор, пока x
не превысит значения в тестовом выражении. Выходные данные показывают, что код запускается 14 раз, пока x не превысит пороговое значение со значением 9.
счетчик <- 1
х <- 5
набор.семян (3)
while (x> = 3 && x <= 8) {
монета <- rbinom (1, 1, 0.5)
if (coin == 1) {## случайное блуждание
х <- х + 1
} еще {
х <- х - 1
}
cat ("На итерации", counter, ", x =", x, '\ n')
counter <- counter + 1
}
## На итерации 1 x = 4
## На итерации 2 x = 5
## На итерации 3 x = 4
## На итерации 4 x = 3
## На итерации 5 x = 4
## На итерации 6 x = 5
## На итерации 7 x = 4
## На итерации 8 x = 3
## На итерации 9 x = 4
## На итерации 10 x = 5
## На итерации 11 x = 6
## На итерации 12 x = 7
## На итерации 13 x = 8
## На итерации 14 x = 9
Цикл while в R с примером
- Подробности
Цикл - это оператор, который продолжает выполняться до тех пор, пока не будет выполнено условие.Синтаксис цикла while следующий:
while (условие) { Опыт }Блок-схема цикла while
Примечание : Не забудьте написать условие закрытия в какой-то момент, иначе цикл будет продолжаться бесконечно.
Пример 1:
Давайте рассмотрим очень простой пример, чтобы понять концепцию цикла while. Вы создадите цикл и после каждого запуска добавите 1 к сохраненной переменной. Вам нужно закрыть цикл, поэтому мы явно говорим R прекратить цикл, когда переменная достигнет 10.
Примечание : Если вы хотите увидеть текущее значение цикла, вам нужно обернуть переменную внутри функции print ().
# Создать переменную со значением 1 начало <- 1 # Создать цикл while (begin <= 10) { # Посмотрите, какие мы cat ('Это номер цикла', начало) # добавить 1 к переменной begin после каждого цикла начало <- начало + 1 печать (начало) }
Вывод:
## Это цикл номер 1 [1] 2 ## Это цикл номер 2 [1] 3 ## Это цикл номер 3 [1] 4 ## Это цикл номер 4 [1] 5 ## Это цикл номер 5 [1] 6 ## Это цикл номер 6 [1] 7 ## Это цикл номер 7 [1] 8 ## Это цикл № 8 [1] 9 ## Это цикл номер 9 [1] 10 ## Это цикл номер 10 [1] 11
Пример 2:
Вы купили акцию по цене 50 долларов.Если цена опускается ниже 45, мы хотим закрыть ее. В противном случае мы сохраняем это в нашем портфолио. Цена может колебаться от -10 до +10 около 50 после каждого цикла. Вы можете написать следующий код:
set.seed (123) # Установить переменные запасы и цену сток <- 50 цена <- 50 # Переменная цикла подсчитывает количество циклов цикл <- 1 # Установить оператор while while (price> 45) { # Создаем случайную цену от 40 до 60 цена <- акции + образец (-10: 10, 1) # Подсчитываем количество циклов петля = петля +1 # Вывести номер цикла печать (цикл) }
Вывод:
## [1] 2 ## [1] 3 ## [1] 4 ## [1] 5 ## [1] 6 ## [1] 7
cat ('потребовалось', цикл, 'цикл до того, как мы сократим цену.Самая низкая цена - ', price)
Вывод:
## потребовалось 7 циклов, прежде чем мы сократим цену. Самая низкая цена - 40
Python While Loop - GeeksforGeeks
In Python, While Loops используется для многократного выполнения блока операторов до тех пор, пока не будет выполнено заданное условие. И когда условие становится ложным, выполняется строка сразу после цикла в программе. Цикл while подпадает под категорию с неопределенной итерацией .Бесконечная итерация означает, что количество выполнений цикла не указывается заранее.
Синтаксис:
в то время как выражение: заявления)
Операторы представляют все операторы, с отступом на одинаковое количество символьных пробелов после того, как программная конструкция считается частью одного блока кода. Python использует отступы как метод группировки операторов. Когда выполняется цикл while, сначала вычисляется expr
в логическом контексте , и если оно истинно, выполняется тело цикла.Затем снова проверяется
expr
, если оно все еще истинно, тело выполняется снова, и это продолжается до тех пор, пока выражение не станет ложным.
Пример:
|
Выход:
Привет Компьютерщик Привет Компьютерщик Привет Компьютерщик 4 3 2 1
Работа цикла While:
Одиночный оператор while блок
Как и блок if
, если блок while
состоит из одного оператора, мы можем объявить весь цикл в одной строке. Если в блоке, составляющем тело цикла, есть несколько операторов, их можно разделить точкой с запятой (;)
.
|
Вывод:
Привет Компьютерщик Привет Компьютерщик Привет Компьютерщик Привет Компьютерщик Привет Компьютерщик
Операторы управления циклом
Операторы управления циклом изменяют выполнение нормальной последовательности.Когда выполнение покидает область действия, все автоматические объекты, созданные в этой области, уничтожаются. Python поддерживает следующие управляющие операторы.
цикл while-else
Как обсуждалось выше, цикл while выполняет блок до тех пор, пока не будет выполнено условие. Когда условие становится ложным, выполняется инструкция сразу после цикла.
Предложение else выполняется только тогда, когда ваше условие while становится ложным. Если вы выйдете из цикла или возникнет исключение, оно не будет выполнено.
Примечание: Блок else сразу после for / while выполняется только тогда, когда цикл НЕ завершается оператором break.
|
Выход:
1 2 3 4 Без остановки 1
Внимание компьютерщик! Укрепите свои основы с помощью курса Python Programming Foundation и изучите основы.
Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS . И чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень
Shell Scripting 101: While Loop in Shell Script
В предыдущих сценариях оболочки 101 мы рассмотрели массивов и переменных в сценариях оболочки. В этом руководстве мы рассмотрим цикл while в сценарии оболочки .
Цикл while в сценариях оболочки используется для многократного повторения инструкций, пока условие цикла не останется истинным. Циклы имеют множество вариантов использования в реальных приложениях, поскольку мы создаем их для автоматизации повторяющихся задач. Давайте рассмотрим некоторые варианты использования и научимся использовать цикл while в сценариях оболочки.
Синтаксис цикла while в сценариях оболочки
Цикл while работает на основе поставленного в него условия. Это может быть так же просто, как ожидание, пока переменная станет равной указанному числу, или настолько сложным, как ожидание вывода другой команды, совпадающего с указанным нами выводом.Возможности здесь безграничны. Если вы можете оценить что-то как ИСТИНА или ЛОЖЬ, вы можете использовать это как условие для цикла while.
while [условие - должно оцениваться как ИСТИНА или ЛОЖЬ] делать команда команда Выполнено
Вот как выглядит типичный цикл while.
Логические операторы при работе со сценариями оболочки
Помимо логических операторов, которые вы видели в других языках программирования, включая ==, <,>, <=,> =, и т. Д., это операторы, специфичные для сценария оболочки. Основное различие в использовании заключается в том, что эти операторы будут работать только при наличии числовых значений . Со строковым значением операция просто не удастся.
Оператор | Описание | Пример |
---|---|---|
-ne | Проверяет, не равны ли оба операнда | [1 -ne 2] ИСТИНА |
- eq Проверяет | , если оба 910 операнды равны[1 -eq 2] ЛОЖНО | |
- lt | Проверить, меньше ли левый операнд, чем правый операнд | [1-lt 2] ИСТИНА |
- gt | Проверить, больше ли левый операнд правого | [1-gt 2] ЛОЖНО |
- le | Проверить, меньше ли левый операнд правому или равен ему. | [1-le 2] ИСТИНА |
- ge | Проверьте, больше ли левый операнд правому или равен ему. | [1-ge 2] ЛОЖЬ |
Создание цикла while в сценарии оболочки
Цикл while по умолчанию не имеет ограничения на повторение. Мы должны явно указать ему условие, которое в какой-то момент во время выполнения кода станет ложным. В противном случае у вас будет цикл, который не завершится, пока не будет отправлен сигнал прерывания.
я = 0 а [$ i -le 10] делать эхо Истина ((i ++)) Выполнено эхо Ложь
Сохраните приведенный выше сценарий под любым именем с расширением .sh . Чтобы запустить файл, вы можете либо запустить его с помощью команды bash, например bash
Давайте разбираться в сценарии построчно.
- i = 0 - Здесь мы устанавливаем для переменной $ i значение 0. Узнайте больше о переменных в нашем предыдущем руководстве.
- while [$ i -le 10] - Запускайте цикл while только до тех пор, пока переменная $ i не станет меньше или равно 10. Таким образом, этот цикл будет выполнен 11 раз, включая цикл ZERO-th .
- do - Отмечает начало цикла while в сценариях оболочки
- echo True - Простая команда, которая выводит слово «True» на нашем терминале
- ((i ++)) - Переменная стиля C с шагом прибавляет 1 к переменной i с каждым циклом.Существуют различные другие способы выполнения приращения, включая $ i = ((i + 1)), ((i = i + 1)) и т. Д. Вы можете использовать любой из них.
- done - Отмечает конец цикла while
- echo False - Это снова просто выводит на экран слово False, чтобы указать, что условие теперь стало ложным.
Вы получите результат, аналогичный показанному на скриншоте ниже.
В то время как цикл в выводе сценария оболочкиБесконечный цикл while в сценарии оболочки
Теперь, когда мы придумали, как добавить условие для завершения цикла while, давайте посмотрим, как мы можем работать с бесконечным циклом while.Единственное, что нам нужно сделать, это пропустить часть условия.
я = 0 пока : делать Скрипт echo запускался $ i раз ((i ++)) Выполнено эхо Ложь
Сохраните этот сценарий в другом файле с расширением .sh . Вы можете выполнить те же шаги, что и выше, для выполнения сценария оболочки. Как только сценарий будет запущен менее чем за 1 секунду, вы должны получить результат 100 тысяч раз.
Чтобы остановить скрипт, нажмите Ctrl + C .
Bash Infinite While Loop (Бесконечный цикл)Вам придется прокрутить страницу вверх, чтобы даже увидеть, с чего вы начали, потому что циклы проходят очень быстро.