Сколько итераций цикла будет выполнено в этом фрагменте программы i 0 while i 10 i i 1 if i 7 i i 2
Перейти к содержимому

Сколько итераций цикла будет выполнено в этом фрагменте программы i 0 while i 10 i i 1 if i 7 i i 2

  • автор:

Lesson 6
Пока цикл

while цикл повторяет последовательность действий много раз, пока какое-то условие не достигнет False . Условие задается перед телом цикла и проверяется перед каждым исполнением тела цикла. Как правило, в while используется цикл , когда невозможно определить точное число итераций цикла заранее.

Синтаксис в while цикл в простейшем случае выглядит следующим образом :

Сначала Python проверяет условие. Если это значение False, то цикл завершается и управление передается следующему оператору после в while тело цикла. Если условие истинно, то тело цикла выполняется, а затем условие снова проверяется. Это продолжается, пока условие равно True. Когда условие становится False, цикл завершается и управление передается следующему оператору после цикла.

Например, следующий фрагмент программы печатает квадраты всех целых чисел от 1 до 10. Здесь можно заменить цикл «while» на цикл for . in range(. ) :

В этом примере переменная i внутри цикла выполняет итерацию от 1 до 10. Такая переменная, значение которой изменяется с каждой новой итерацией цикла, называется счетчиком. Обратите внимание, что после выполнения этого фрагмента значение переменной i определено и равно 11 , потому что, когда i == 11 условие i <= 10 является False в первый раз.

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

На каждой итерации мы сокращаем последнюю цифру числа, используя целочисленное деление на 10 ( n //= 10 ). В переменной length мы подсчитываем, сколько раз мы это делали.

В Python есть еще один, более простой способ решить эту проблему: .

2. Поток управления контуром: else

Можно написать оператор else: после тела цикла, который выполняется один раз после окончания цикла:

На первый взгляд это утверждение, похоже, не имеет смысла, потому else: тело else: statement можно просто поместить после окончания цикла. «else» после цикла имеет смысл только при использовании в сочетании с break . Если во время выполнения цикла интерпретатор Python обнаруживает break , он немедленно останавливает выполнение цикла и выходит из него. В этом случае ветка else: не выполняется. Таким образом, break используется для прерывания выполнения цикла в середине любой итерации.

Вот пример, похожий на Black Jack: программа, которая считывает числа и суммирует их до тех пор, пока общая сумма не станет больше или равна 21. Входная последовательность заканчивается на 0, чтобы программа могла остановиться, даже если общая сумма всех чисел равна менее 21.

Посмотрим, как он ведет себя на разных входах.

Версия 1. После проверки условия цикл завершается нормально, поэтому выполняется ветка else.

Версия 2. Цикл прерывается break , поэтому ветвь «else» пропускается.

Филиал «Else» также может использоваться с циклом «for». Давайте рассмотрим пример, когда программа считывает 5 целых чисел, но останавливается вправо, когда выполняется первое отрицательное целое число.

Версия 1. Цикл завершается нормально, поэтому выполняется ветка «else».

Версия 2. Цикл прерван, поэтому ветка «else» не выполняется.

3. Поток управления контуром: продолжить

Другая инструкция, используемая для управления выполнением цикла, continue . Если интерпретатор Python встречает по- continue где — то в середине итерации цикла, он пропускает все оставшиеся инструкции и переходит к следующей итерации.

Если break и continue помещаются внутри нескольких вложенных циклов, они влияют только на выполнение самого внутреннего. Давайте посмотрим на довольно глупый пример, чтобы продемонстрировать это:

Инструкции break и continue , если вы можете реализовать свою идею без их использования. Вот типичный пример плохого использования break : этот код подсчитывает количество цифр в целых числах.

Это чище и легче читать, чтобы переписать этот цикл со значимым условием цикла:

4. Множественное присвоение

В Python для одного оператора присваивания можно изменить значение нескольких переменных. Посмотрим:

Эффект, продемонстрированный выше, может быть записан как:

Разница между двумя версиями заключается в том, что несколько присваиваний одновременно меняют значения двух переменных.

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

В Python один и тот же своп можно записать в одну строку:

Левая часть «=» должна иметь список имен переменных, разделенных запятыми. Правой частью могут быть любые выражения, разделенные запятыми. Левая и правая части должны иметь одинаковую длину.

Решение модуля 2.1 из курса «Программирование на Python»

Какое значение будет у переменной i после выполнения фрагмента программы?

i = 0
while i <= 10:
i = i + 1
if i > 7:
i = i + 2

Сколько итераций цикла будет выполнено в этом фрагменте программы?

i = 0
while i <= 10:
i = i + 1
if i > 7:
i = i + 2

Сколько всего знаков * будет выведено после исполнения фрагмента программы:

i = 0
while i < 5:
print(‘*’)
if i % 2 == 0:
print(‘**’)
if i > 2:
print(‘***’)
i = i + 1

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

В Институте биоинформатики между информатиками и биологами устраивается соревнование. Победителям соревнования достанется большой и вкусный пирог. В команде биологов aa человек, а в команде информатиков — bb человек.

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

Напишите программу, которая помогает найти это число.
Программа должна считывать размеры команд (два положительных целых числа aa и bb, каждое число вводится на отдельной строке) и выводить наименьшее число dd, которое делится на оба этих числа без остатка.

Сколько итераций цикла будет выполнено в этом фрагменте программы i 0 while i 10 i i 1 if i 7 i i 2

Сколько итераций цикла будет выполнено в этом фрагменте программы i 0 while i 10 i i 1 if i 7 i i 2

Цикл while (“пока”) позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается до тела цикла и проверяется до выполнения тела цикла. Как правило, цикл while используется, когда невозможно определить точное значение количества проходов исполнения цикла.

Синтаксис цикла while в простейшем случае выглядит так:

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

Например, следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10. Видно, что цикл while может заменять цикл for . in range(. ) :

В этом примере переменная i внутри цикла изменяется от 1 до 10. Такая переменная, значение которой меняется с каждым новым проходом цикла, называется счетчиком. Заметим, что после выполнения этого фрагмента значение переменной i будет равно 11 , поскольку именно при i == 11 условие i <= 10 впервые перестанет выполняться.

Вот еще один пример использования цикла while для определения количества цифр натурального числа n :

В этом цикле мы отбрасываем по одной цифре числа, начиная с конца, что эквивалентно целочисленному делению на 10 ( n //= 10 ), при этом считаем в переменной length , сколько раз это было сделано.

В языке Питон есть и другой способ решения этой задачи: .

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

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

Казалось бы, никакого смысла в этом нет, ведь эту же инструкцию можно просто написать после окончания цикла. Смысл появляется только вместе с инструкцией break . Если во время выполнения Питон встречает инструкцию break внутри цикла, то он сразу же прекращает выполнение этого цикла и выходит из него. При этом ветка else исполняться не будет. Разумеется, инструкцию break осмыленно вызывать только внутри инструкции if , то есть она должна выполняться только при выполнении какого-то особенного условия.

Приведем пример программы, которая считывает числа до тех пор, пока не встретит отрицательное число. При появлении отрицательного числа программа завершается. В первом варианте последовательность чисел завершается числом 0 (при считывании которого надо остановиться).

Другая инструкция управления циклом — continue (продолжение цикла). Если эта инструкция встречается где-то посередине цикла, то пропускаются все оставшиеся инструкции до конца цикла, и исполнение цикла продолжается со следующей итерации.

Увлечение инструкциями break и continue не поощряется, если можно обойтись без их использования. Вот типичный пример плохого использования инструкции break (данный код считает количество знаков в числе).

3. Множественное присваивание

Если слева от знака «=» в множественном присваивании должны стоять через запятую имена переменных, то справа могут стоять произвольные выражения, разделённые запятыми. Главное, чтобы слева и справа от знака присваивания было одинаковое число элементов.

Множественное присваивание удобно использовать, когда нужно обменять значения двух переменных. В обычных языках программирования без использования специальных функций это делается так:

Циклы в программировании. Цикл while

Циклы являются такой же важной частью структурного программирования, как условные операторы. С помощью циклов можно организовать повторение выполнения участков кода. Потребность в этом возникает довольно часто. Например, пользователь последовательно вводит числа, и каждое из них требуется добавлять к общей сумме. Или нужно вывести на экран квадраты ряда натуральных чисел и тому подобные задачи.

Цикл while

«While» переводится с английского как «пока». Но не в смысле «до свидания», а в смысле «пока имеем это, делаем то».

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

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

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

Цикл завершает свою работу только тогда, когда логическое выражение в заголовке возвращает ложь, то есть условие выполнения цикла больше не соблюдается. После этого поток выполнения перемещается к выражениям, расположенным ниже всего цикла. Говорят, «происходит выход из цикла».

Рассмотрите блок-схему цикла while .

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

С циклом while возможны две исключительные ситуации:

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

Если логическое выражение в заголовке while никогда не возвращает False , а всегда остается равным True , то цикл никогда не завершится, если только в его теле нет оператора принудительного выхода из цикла ( break ) или вызовов функций выхода из программы – quit() , exit() в случае Python. Если цикл повторяется и повторяется бесконечное количество раз, то в программе происходит зацикливание. В это время она зависает и самостоятельно завершиться не может.

Вспомним наш пример из урока про исключения. Пользователь должен ввести целое число. Поскольку функция input() возвращает строку, то программный код должен преобразовать введенное к целочисленному типу с помощью функции int() . Однако, если были введены символы, не являющиеся цифрами, то возникает исключение ValueError , которое обрабатывается веткой except . На этом программа завершается.

Другими словами, если бы программа предполагала дальнейшие действия с числом (например, проверку на четность), а она его не получила, то единственное, что программа могла сделать, это закончить свою работу досрочно.

Но ведь можно просить и просить пользователя корректно вести число, пока он его не введет. Вот как может выглядеть реализующий это код:

Примечание 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 будет успешно конвертировано в число.

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

Сколько раз «прокрутится» цикл в этой программе, то есть сколько итераций он сделает? Ответ: 5.

Сначала переменная i равна 0. В заголовке цикла проверяется условие i < 5 , и оно истинно. Тело цикла выполняется. В нем меняется значение i , путем добавления к нему единицы.

Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.

Два меньше пяти. Тело цикла выполняется третий раз. Значение i становится равным трем.

Три меньше пяти. На этой итерации i присваивается 4.

Четыре по прежнему меньше пяти. К i добавляется единица, и теперь ее значение равно пяти.

Далее начинается шестая итерация цикла. Происходит проверка условия i < 5 . Но поскольку теперь оно возвращает ложь, то выполнение цикла прерывается, и его тело не выполняется.

«Смысловая нагрузка» данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for , который так и называется: «цикл со счетчиком». Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for .

В языке Python тоже есть цикл for . Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.

Для while наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:

Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.

Самое главное для цикла 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 обозначается как ** . Фрагмент вывода:

Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса

Lesson 6
Пока цикл

while цикл повторяет последовательность действий много раз, пока какое-то условие не достигнет False . Условие задается перед телом цикла и проверяется перед каждым исполнением тела цикла. Как правило, в while используется цикл , когда невозможно определить точное число итераций цикла заранее.

Синтаксис в while цикл в простейшем случае выглядит следующим образом :

Сначала Python проверяет условие. Если это значение False, то цикл завершается и управление передается следующему оператору после в while тело цикла. Если условие истинно, то тело цикла выполняется, а затем условие снова проверяется. Это продолжается, пока условие равно True. Когда условие становится False, цикл завершается и управление передается следующему оператору после цикла.

Например, следующий фрагмент программы печатает квадраты всех целых чисел от 1 до 10. Здесь можно заменить цикл «while» на цикл for . in range(. ) :

В этом примере переменная i внутри цикла выполняет итерацию от 1 до 10. Такая переменная, значение которой изменяется с каждой новой итерацией цикла, называется счетчиком. Обратите внимание, что после выполнения этого фрагмента значение переменной i определено и равно 11 , потому что, когда i == 11 условие i <= 10 является False в первый раз.

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

На каждой итерации мы сокращаем последнюю цифру числа, используя целочисленное деление на 10 ( n //= 10 ). В переменной length мы подсчитываем, сколько раз мы это делали.

В Python есть еще один, более простой способ решить эту проблему: .

2. Поток управления контуром: else

Можно написать оператор else: после тела цикла, который выполняется один раз после окончания цикла:

На первый взгляд это утверждение, похоже, не имеет смысла, потому else: тело else: statement можно просто поместить после окончания цикла. «else» после цикла имеет смысл только при использовании в сочетании с break . Если во время выполнения цикла интерпретатор Python обнаруживает break , он немедленно останавливает выполнение цикла и выходит из него. В этом случае ветка else: не выполняется. Таким образом, break используется для прерывания выполнения цикла в середине любой итерации.

Вот пример, похожий на Black Jack: программа, которая считывает числа и суммирует их до тех пор, пока общая сумма не станет больше или равна 21. Входная последовательность заканчивается на 0, чтобы программа могла остановиться, даже если общая сумма всех чисел равна менее 21.

Посмотрим, как он ведет себя на разных входах.

Версия 1. После проверки условия цикл завершается нормально, поэтому выполняется ветка else.

Версия 2. Цикл прерывается break , поэтому ветвь «else» пропускается.

Филиал «Else» также может использоваться с циклом «for». Давайте рассмотрим пример, когда программа считывает 5 целых чисел, но останавливается вправо, когда выполняется первое отрицательное целое число.

Версия 1. Цикл завершается нормально, поэтому выполняется ветка «else».

Версия 2. Цикл прерван, поэтому ветка «else» не выполняется.

3. Поток управления контуром: продолжить

Другая инструкция, используемая для управления выполнением цикла, continue . Если интерпретатор Python встречает по- continue где — то в середине итерации цикла, он пропускает все оставшиеся инструкции и переходит к следующей итерации.

Если break и continue помещаются внутри нескольких вложенных циклов, они влияют только на выполнение самого внутреннего. Давайте посмотрим на довольно глупый пример, чтобы продемонстрировать это:

Инструкции break и continue , если вы можете реализовать свою идею без их использования. Вот типичный пример плохого использования break : этот код подсчитывает количество цифр в целых числах.

Это чище и легче читать, чтобы переписать этот цикл со значимым условием цикла:

4. Множественное присвоение

В Python для одного оператора присваивания можно изменить значение нескольких переменных. Посмотрим:

Эффект, продемонстрированный выше, может быть записан как:

Разница между двумя версиями заключается в том, что несколько присваиваний одновременно меняют значения двух переменных.

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

В Python один и тот же своп можно записать в одну строку:

Левая часть «=» должна иметь список имен переменных, разделенных запятыми. Правой частью могут быть любые выражения, разделенные запятыми. Левая и правая части должны иметь одинаковую длину.

Циклы for и while. Цикл for

Двоеточие (:) в конце строки с инструкцией while сообщает Python, что дальше находится блок команд. В блок входят все строки, расположенные с отступом от строки с инструкцией while , вплоть до следующей строки без отступа.

Блок команд, который выполняется в цикле while , называется телом цикла.

Рассмотрим код, использующий цикл while , который распечатает 10 раз слово Привет :

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

Напишем программу, которая считывает числа и выводит их квадраты, пока не будет введено -1. При такой постановке задачи мы не можем воспользоваться циклом for , так как не знаем сколько чисел будет предшествовать числу -1.

print( ‘Квадрат вашего числа равен:’ , num * num)

  1. напечатать квадрат введенного числа;
  2. считать следующее число.
  1. правильная инициализация переменной num ;
  2. изменение переменной num внутри цикла while .

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

Цикл for VS цикл while

Мы всегда можем заменить цикл for с помощью цикла while . Следующие две программы выводят числа от 0 до 100:

for i in range( 101 ):

В первом цикле переменная i последовательно принимает значения от 0 до 100. Для цикла while , нам пришлось завести самостоятельно переменную i и придать ей начальное значение. Тело цикла while содержит аналогичную инструкцию вывода print(i) , однако помимо этого мы самостоятельно увеличиваем значение переменной i на 1, что делается автоматически в случае с циклом for .

Напишем программу, выводящую все числа, кратные 3, используя цикл for и while :

for i in range( 0 , 100 , 3 ):

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

Считывание данных до стоп значения

Часто при решении задач на цикл while , мы считываем данные, до тех пор пока пользователь не введет некоторое значение, которое называют стоп значением. Напишем программу, которая считывает числа и находит их сумму, до тех пор пока пользователь не введет слово stop :

while text != ‘stop’ :

print( ‘ Сумма чисел равна ‘ , total)

Такой код будет часто использоваться при решении задач.

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

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

Пример бесконечного цикла:

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

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

Примечание 1. Цикл while получил свое название из-за характера своей работы: он выполняет некую задачу до тех пор, пока условие является истинным. Слово while на английском означает как раз «пока».

Примечание 2. Цикл while называют циклом с предусловием, поскольку выполнению тела цикла предшествует проверка условия (сначала проверяется условие, а уже затем выполняется тело цикла).

Примечание 3. Однократное выполнение тела цикла называется итерацией цикла.

Примечание 4. Цикл while может не выполниться ни одного раза. Например, следующий код:

print( ‘Hello world!’ )

не выведет текст, поскольку условие i > 0 ложно с самого начала.

Примечание 5. Графическое представление цикла while имеет вид:

Примечание 6. Условие в цикле while , как и в условном операторе if , может содержать логические операции or, and, not .

Когда цикл while проверяет свое условие: до или после того, как он выполнит итерацию?

Сколько раз сообщение «Python awesome!» будет напечатано в приведенном ниже фрагменте кода?

print ( ‘ Python awesome !’ )

Сколько раз сообщение «Python awesome!» будет напечатано в приведенном ниже фрагменте кода?

print( ‘Python awesome!’ )

Что покажет приведенный ниже фрагмент кода?

  1. Использование цикла while для обработки цифр числа;
  2. Решение задач.

Обработка цифр числа

При изучении целых чисел (тип данных int ), мы говорили про операцию целочисленного деления // и операцию нахождения остатка от деления одного целого числа на другое % . Используя цикл while и две данных операции, можно обработать цифры числа с произвольным количеством разрядов (цифр).

  • результатом операции n % 10 – является последняя цифра числа;
  • результатом операции n // 10 – является число с удаленной последней цифрой.

while n != 0 : # пока в числе есть цифры

last_digit = n % 10 # получить последнюю цифру

# код обработки последней цифры

  1. процедуру получения последней цифры last_digit = n % 10 ;
  2. код обработки последней цифры;
  3. процедуру удаления последней цифры из числа n = n // 10 .

Напишем программу, которая определяет есть ли в числе цифра 7.

has_seven = False # сигнальная метка

last_digit = num % 10

if last_digit == 7 :

if has_seven == True :

  1. Оператор break;
  2. Оператор continue;
  3. Бесконечные циклы ;
  4. Ключевое слово else в циклах;
  5. Решение задач.

Оператор прерывания цикла break

Иногда бывает нужно прервать выполнение цикла преждевременно. Оператор break прерывает ближайший цикл for или while .

Усовершенствуем программу, проверяющую число на простоту с помощью оператора break:

Напишем программу, определяющую, что число является простым:

for i in range( 2 , num):

if num % i == 0 : # если исходное число делится на какое-либо отличное от 1 и самого себя

break # останавливаем цикл если встретили делитель числа

print( ‘ Число простое ‘ )

print( ‘Число составное’ )

Как только мы встречаем делитель отличный от 1 и num , мы меняем значение сигнальной метки и прерываем цикл, поскольку дальнейшее его выполнение лишено смысла: число гарантированно не является простым.

Оператор прерывания цикла break позволяет ускорять программы, так как мы избавляемся от лишних итераций.

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

for i in range( 10 ):

Оператор прерывания цикла break удобен в связке с сигнальными метками: когда после проверки некоторого условия нам нет смысла продолжать выполнение цикла.

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

last_digit = num % 10

if last_digit == 7 :

break # прерываем цикл, так как число гарантированно содержит цифру 7

print ( ‘Число’ , number , ‘содержит цифру 7’ )

print( ‘Число’ , number, ‘не содержит цифру 7’ )

Как только мы встретили цифру 7, мы меняем значение сигнальной метки и прерываем цикл с помощью оператора break . Мы можем и не прерывать цикл преждевременно, а дождаться его естественного завершения (условие num != 0 , то есть все цифры числа обработаны), однако в таком случае мы будем совершать лишнюю работу, и в случае если число очень большое, то программа будет работать медленнее.

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

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

print ( ‘ Python awesome !’ )

Результатом выполнения такого кода будет бесконечное количество строчек текста:

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

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

query = get_new_query() # получаем новый запрос на обработку

query.process() # обрабатываем запрос

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

if условие 1 : # условие для остановки цикла

if условие 2 : # еще одно условие для остановки цикла

if условие 3 : # еще одно условие для остановки цикла

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

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

Оператор continue

Другая стандартная идиома циклов — пропуск отдельных элементов при переборе. Оператор continue позволяет перейти к следующей итерации цикла for или while до завершения всех команд в теле цикла.

Напишем программу, которая выводит все числа от 1 до 100, кроме чисел 7, 17, 29 и 78.

for i in range( 1 , 101 ):

if i == 7 or i == 17 or i == 29 or i == 78 :

continue # переходим на следующую итерацию

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

Примечание 2. Графическое представление операторов break и continue имеет вид:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *