Как в цикле while задать несколько условий

от admin

Установка двух условий для цикла While

Возможно ли установить для While два условия. К примеру:

Если хотите что бы выполнялись сразу два условия для цикла можно написать так while number1 > 0 and number2 > 0: , что бы цикл работал по одному условию, можно сделать как вы и написали через or

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.3.11.43304

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Оператор while

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

Общая форма оператора while имеет вид

  • условие – условие выполнения строки (строк) инструкции;
  • инструкции – один оператор или набор операторов, которые выполняются если значение условие=True . Если значение условие становится равным False , то происходит завершение выполнения оператора цикла while .
2. Примеры решения задач на оператор while
2.1. Вычисление суммы элементов списка

Условие задачи. Задан некоторый список A содержащий целые числа. Используя инструкцию while разработать программу, которая вычисляет сумму элементов списка.

Для определения количества элементов списка A используется функция len(A) .

В результате выполнения вышеприведенного кода будет получен результат

2.2. Создать список заданной длины и записать в него заданное число

В примере, с помощью цикла while , формируются два списка A и B разными способами.

В результате выполнения вышеприведенного кода будет получен следующий результат

2.3. Создание списка чисел по условию

Условие задачи. Задано число a (1< a <1.5). Из чисел 1+1/2, 1+1/3, 1+1/4 …, напечатать те, которые не меньше a .

Решение.

В результате выполнения вышеприведенного кода будет выведен следующий результат

3. Понятие вложенной инструкции (оператора) while

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

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

В цикле while используется вложенная инструкция if .

4.2. Определение месяца, числа и дня недели по номеру дня в году

Задано целое число k (1< k <365). Написать фрагмент кода, который определяет:

  • каким будет k -й день года: выходной (суббота, воскресенье);
  • какая будет дата (месяц и число).

В программе использовать цикл while .

Текст программы следующий:

В вышеприведенном коде для вычисления используются дополнительные внутренние переменные (объекты) tk , tday , tmonth , td2 и список MONTHS , содержащий количество дней в любом месяце года. В примере цикл while содержит несколько вложенных инструкций присваивания и две инструкции if .

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

Как можно увидеть, 256-й день в невисокосном году попадает на 13 сентября, который соответствует Дню программиста (а что еще может быть?).

4.3. Подсчет количества вхождений заданного символа в строке

Задан список строк. В каждой строке подсчитать количество вхождений заданного символа

Программный код на языке Python будет следующий

После выполнения вышеприведенного кода будет получен следующий результат

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

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

5.2. Задача о быках, коровах и телятах

Условие задачи. Имеется в наличии 100 рублей. Сколько быков, коров и телят можно купить на все эти деньги, если плата за быка — 10 рублей, плата за корову — 5 рублей, плата за теленка — 0.5 рублей. Обязательно нужно купить минимум по одному экземпляру каждого вида (один бык, одна корова, один теленок). Вывести все возможные варианты оплаты.

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

  • условие1 определяет, нужно ли выполнять следующую итерацию цикла. Если значение условие1 равно True (истинно), то выполняется следующая итерация цикла;
  • условие2 определяет, должен ли выполняться оператор break ;
  • условие3 определяет, должен ли выполняться оператор continue ;
  • инструкции1 , инструкции2 – один или несколько операторов.

Вышеприведенная форма оператора цикла while работает по следующему принципу. Сначала проверяется условие1 . Если условие1 истинно (равно True ), то выполняются инструкции1 .

В теле оператора цикла while также проверяются условия условие2 , условие3 . Если выполняется условие2 , то происходит выход из цикла. Если выполняется условие3 , то происходит переход к следующей итерации цикла до проверки условие1 .

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

7. Пример использования оператора while , предусматривающего использование инструкции break

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

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

В теле цикла while проверяется, совпадает ли значение искомого элемента t со значением элемента List[i] списка

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

Если пройден весь список и не найден ни один элемент, то это значит, что оператор break не был выполнен ни разу. В этом случае вызывается блок else оператора while :

После запуска на выполнение вышеприведенной программы, будет выведен следующий результат

Цикл while в Python (неопределенная итерация)

Итерация — выполнение одного и того же блока кода снова и снова. Конструкция программирования, реализующая итерацию, называется циклом.

В программировании есть два типа итераций: неопределенные и определенные:

В этом уроке вы:

  • Узнаете о цикле while , конструкции управления Python, используемой для неопределенной итерации
  • Узнаете, как преждевременно выйти из цикла или итерации цикла
  • Исследуете бесконечные циклы

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

Цикл while

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

Характер элементарного цикла while показан ниже:

statement(s) представляет собой блок для многократного выполнения, часто называется телом цикла. Обозначается отступом, как в операторе if .

Запомните: все конструкции управления в Python используют отступы для определения блоков.

Управляющая конструкция — expr обычно включает в себя одну или несколько переменных, которые инициализируются до начала цикла, а затем изменяются где-то в теле цикла.

Когда встречается while цикл, expr сначала оценивается в логическом контексте. Если это правда, тело цикла выполняется. Затем expr проверяется снова, и если это опять правда, то выполняется снова. Это продолжается до тех пор, пока expr станет ложью, после чего выполнение программы переходит к первому оператору после тела цикла.

Рассмотрим этот цикл:

Вот что происходит в этом примере:

  • n изначально равно 5. Выражение в while заголовке оператора n > 0 имеет значение true, поэтому тело цикла выполняется. Внутри тела цикла n уменьшается на 1 до 4 и затем печатается.
  • Когда тело цикла завершено, выполнение программы возвращается к началу цикла, и выражение проверяется снова. Оно все еще true, поэтому тело выполняется снова и 3 печатается.
  • Это продолжается до тех пор, пока не n станет 0. В этот момент, когда выражение проверяется, оно ложно, и цикл завершается.

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

В приведенном выше примере, когда встречается цикл, n равно 0. Управляющее выражение n > 0 уже ложно, поэтому тело цикла никогда не выполнится.
Вот еще один while цикл, включающий список, а не числовое сравнение:

Когда список оценивается в логическом контексте, он является истинным, если в нем есть элементы, и ложным, если он пуст. В этом примере a истинно, пока в нем есть элементы. После того, как все элементы будут удалены с помощью метода .pop () и список будет пуст, a примет значение «false», и цикл завершится.

Операторы Python break и continue

В каждом примере, который вы видели до этого, все тело while цикла выполняется на каждой итерации. Python предоставляет два ключевых слова, которые преждевременно завершают итерацию цикла:

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

Различие между break и continue показано на рисунке:

Это файл скрипта с именем break.py который демонстрирует работу оператора break :

Запуск break.py из интерпретатора командной строки приводит к следующему результату:

Когда n станет равно 2, break оператор выполняется, цикл полностью завершается, и выполнение программы переходит к print() оператору.
Следующий скрипт continue.py идентичен, за исключением continue оператора вместо break:

Вывод continue.py выглядит так:

На этот раз, когда n равно 2, continue оператор вызывает завершение этой итерации.
Таким образом, 2 не печатается. Выполнение возвращается к началу цикла, условие переоценивается, и оно все еще выполняется. Цикл возобновляется, завершается, когда n становится 0, как ранее.

Читать:
Firstvds как привязать домен к серверу

Условный оператор else

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

additional_statement(s , указанный в условии else , будет выполняться , когда прервётся цикл while .

У вас может возникнуть вопрос: «Чем это полезно?».

В последнем случае, без else , additional_statement(s) будет выполняться после завершения while цикла, несмотря ни на что.

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

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

В этом случае цикл повторялся до тех пор, пока условие не стало false: n стало 0, а условие n > 0 стало ложным. Поскольку цикл прожил свою естественную жизнь, так сказать, условие else было выполнено. Теперь обратите внимание на разницу здесь:

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

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

Какая-нибудь из следующих интерпретаций может помочь сделать ее более понятной:

  • Думайте о заголовке цикла (while n > 0) как об if операторе (if n > 0), который выполняется снова и снова, и else выполняется, когда условие становится false.
  • Думайте об else , как если бы это был nobreak, поскольку следующий блок выполняется, если не был break .

Если вы не найдете ни одну из этих интерпретаций полезной, просто проигнорируйте их.

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

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

Прежде всего, списки обычно обрабатываются с определенной итерацией, а не while циклом. Определенная итерация (for) рассматривается в следующем уроке.

Во-вторых, Python предоставляет встроенные способы поиска элемента в списке. Вы можете использовать in оператор:

list.index() метод также будет работать. Этот метод вызывает исключение ValueError, если элемент не найден в списке, поэтому для его использования необходимо понимать обработку исключений. В Python вы используете try оператор для обработки исключения. Пример приведен ниже:

Вы узнаете об обработке исключений позже.

Условие else с циклом while — это немного странное, редко встречающееся явление. Но не избегайте его, в некоторых ситуациях else может внести ясность в ваш код!

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Но вы не можете сделать так:

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

Вывод

В этом блоке вы узнали о неопределенной итерации с помощью цикла Python while . Теперь вы можете:

  • Строить основные и сложные while циклы
  • Выполнить цикл с break и continue
  • Использовать else с while циклом
  • Разбираться с бесконечными циклами

Теперь вы должны хорошо понимать, как выполнить фрагмент кода повторно.
ОРИГИНАЛ СТАТЬИ

Как в цикле while задать несколько условий

Цикл 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 (данный код считает количество знаков в числе).

Related Posts