Как выйти из цикла while: Как выйти из цикла while js

Оператор While…End While — Visual Basic

Twitter LinkedIn Facebook Адрес электронной почты

  • Статья
  • Чтение занимает 3 мин

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

Синтаксис

While condition
    [ statements ]
    [ Continue While ]
    [ statements ]
    [ Exit While ]
    [ statements ]
End While

Компоненты

Термин Определение
condition Обязательный. Выражение Boolean. Если condition имеет значение Nothing, Visual Basic обрабатывает его как False.
statements Необязательный элемент. Одна или несколько инструкций после While, которые выполняются каждый раз condition , имеет значение True.
Continue While Необязательный элемент. Передает управление следующей итерации While блока.
Exit While
Необязательный элемент. Передает управление из While блока.
End While Обязательный. Завершает определение блока While.

Используйте структуру While...End While , если требуется повторять набор инструкций неопределенное количество раз, пока условие остается True. Если вы хотите больше гибкости с тем, где вы проверяете условие или какой результат вы тестируете его, вы можете выбрать do… Оператор Loop. Если вы хотите повторять инструкции заданное количество раз, выполните for… Следующий оператор , как правило, является лучшим выбором.

Примечание

Ключевое While слово также используется в do… Оператор Loop, предложение Skip While и предложение Take While.

Если condition имеет значение True, все выполняются

statements до тех пор, пока не End While будет обнаружена инструкция . Затем элемент управления возвращается к оператору While и condition снова проверяется. Если condition параметр по-прежнему Trueимеет значение , процесс повторяется. Если это False, управление передается оператору, который следует за оператором End While .

Оператор While всегда проверяет условие перед запуском цикла. Цикл продолжается, пока условие остается True. Если condition это False при первом входе в цикл, он не запускается ни разу.

Обычно condition является результатом сравнения двух значений, но это может быть любое выражение, результатом которого является логическое значение типа данных (True

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

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

Выход в режиме «Пока»

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

Обычно используется Exit While после вычисления некоторого условия (например, в If...Then...Else структуре). Вы можете выйти из цикла, если обнаружите условие, которое делает его ненужным или невозможным для продолжения, например ошибочное значение или запрос на завершение. Вы можете использовать при Exit While проверке условия, которое может привести к бесконечному циклу, который может выполняться очень большое или даже бесконечное количество раз. Затем можно использовать для Exit While экранирования цикла.

Вы можете разместить любое количество операторов Exit While в While любом месте цикла.

При использовании во вложенных While циклах Exit While передает управление из самого внутреннего цикла и на следующий более высокий уровень вложенности.

Оператор Continue While немедленно передает управление следующей итерации цикла. Дополнительные сведения см. в разделе Continue Statement.

Пример 1

В следующем примере операторы в цикле продолжают выполняться, пока переменная не index будет больше 10.

Dim index As Integer = 0
While index <= 10
    Debug.Write(index.ToString & " ")
    index += 1
End While
Debug.WriteLine("")
' Output: 0 1 2 3 4 5 6 7 8 9 10 

Пример 2

В следующем примере показано использование операторов Continue While и Exit While .

Dim index As Integer = 0
While index < 100000
    index += 1
    ' If index is between 5 and 7, continue
    ' with the next iteration.
    If index >= 5 And index <= 8 Then
        Continue While
    End If
    ' Display the index.
    Debug.Write(index.ToString & " ")
    ' If index is 10, exit the loop.
    If index = 10 Then
        Exit While
    End If
End While
Debug.
WriteLine("") ' Output: 1 2 3 4 9 10

Пример 3

В следующем примере считываются все строки в текстовом файле. Метод OpenText открывает файл и возвращает объект , StreamReader который считывает символы. В условии WhilePeek метод StreamReader объекта определяет, содержит ли файл дополнительные символы.

Private Sub ShowText(ByVal textFilePath As String)
    If System.IO.File.Exists(textFilePath) = False Then
        Debug.WriteLine("File Not Found: " & textFilePath)
    Else
        Dim sr As System.IO.StreamReader = System.IO.File.OpenText(textFilePath)
        While sr.Peek() >= 0
            Debug.WriteLine(sr.ReadLine())
        End While
        sr.Close()
    End If
End Sub

См. также раздел

  • Циклические структуры
  • Оператор Do…Loop
  • Оператор For…Next
  • Логический тип данных
  • Вложенные структуры управления
  • Оператор Exit
  • Оператор Continue

Как сделать «двойной break», то есть выйти из вложенного цикла, в Python?

Условие:

Перебрать все пары символов в строке, и остановиться при нахождении двух одинаковых символов.

Решение достаточно очевидное, но возникает вопрос:

s = "какая-то строка"
for i in range(len(s)):
    for j in range(i+1, len(s)):
        if s[i] == s[j]:
            print(i, j)
            break   # Как выйти сразу из двух циклов?

Если бы мы программировали, например, на Java, то мы могли бы воспользоваться механизмом меток:

outterLoop: for(int i=0; i<n; i++){
	for(int j=i; j<n; j++){
		if(/*something*/){
			break outterLoop;
		}
	}
}

Однако в Python такого механизма нет. Требуется предложить наиболее удобное в использовании и читаемое решение.

Возможные варианты ответа
  • Поместить цикл в тело функции, а затем сделать return из неё:
    def func():
    	s="teste"
    	for i in range(len(s)):
    		for j in range(i+1, len(s)):
    			if s[i]==s[j]:
    				print(i,j)
    				return
    
    func()

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

  • Выбросить исключение и поймать его снаружи цикла:
    try: s="teste" for i in range(len(s)): for j in range(i+1, len(s)): if s[i]==s[j]: print(i,j) raise Exception() except: print("the end")

    Почему это плохая идея: здесь мы используем механизм исключений как особую форму goto, но ведь на самом деле ничего исключительного в коде не произошло — это обычная ситуация. Как минимум, причины такого злоупотребления этим механизмом будут непонятны другим программистам.

  • Можно создать булевую переменную, которая будет хранить информацию о том, нужно ли выходить из внешнего цикла на данной итерации:
    exitFlag=False
    s="teste"
    for i in range(len(s)):
    	for j in range(i+1, len(s)):
    		if s[i]==s[j]:
    			print(i,j)
    			exitFlag=True
    			break
    	if(exitFlag):
    		break

    Почему это плохая идея: из всех перечисленных выше идей эта, пожалуй, лучшая.

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

  • Использовать вместо двух циклов for один while:
    s="teste"
    i=0
    j=1
    while i < len(s):
    	if s[i] == s[j]:
    		print(i, j)
    		break
    	j=j+1
    	i=i+j//len(s)
    	j=j%len(s)

    Почему это плохая идея: вам не кажется, что такой код читается хуже всех предложенных вариантов?

Решение на пятёрку

Давайте ещё раз внимательно прочитаем условие:

Перебрать все пары символов в строке, и остановиться при нахождении двух одинаковых символов.

Где там вообще хоть слово про двойной цикл или про перебор двух индексов? Нам нужно перебирать пары. Значит, по идее, мы должны написать что-то вроде этого:

s = "teste"
for i, j in unique_pairs(len(s)):
    if s[i] == s[j]:
        print(i, j)
        break

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

def unique_pairs(n):
    for i in range(n):
        for j in range(i+1, n):
            yield i, j

«Как это работает?» — спросите вы. Всё просто. При вызове unique_pairs(int) код в теле функции не вычисляется. Вместо этого будет возвращён объект генератора. Каждый вызов метода next() этого генератора (что неявно происходит при каждой итерации цикла for) код в его теле будет выполняться до тех пор, пока не будет встречено ключевое слово yield. После чего выполнение будет приостановлено, а метод вернёт указанный объект (здесь

yield действует подобно return). При следующем вызове функция начнёт выполняться не с начала, а с того места, на котором остановилась в прошлый раз. При окончании перебора будет выброшено исключение StopIteration.

Итак, самый true pythonic way в решении этой задачи:

def unique_pairs(n):
    for i in range(n):
        for j in range(i+1, n):
            yield i, j

s = "a string to examine"
for i, j in unique_pairs(len(s)):
    if s[i] == s[j]:
        print(i, j)
        break

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

itertools. combinations(s, 2)

Что же, для данной задачи это действительно более pythonic решение. Хочется отметить, что целью статьи было скорее познакомить новичков с механизмом генераторов, нежели действительно решить проблему, заявленную в первом абзаце 😉


Свои варианты предлагайте в комментариях!

Разбор взять из статьи «Breaking out of two loops»

Реклама на Tproger: найдем для вас разработчиков нужного стека и уровня.

Подробнее

Реклама на tproger.ru

Загрузка

Как остановить цикл while в Python — Finxter

Крис

5/5 — (2 голоса)

Python предоставляет три способа остановки цикла while:

  1. Условие цикла while проверяется один раз за итерацию. Если он оценивается как False , программа завершает цикл и переходит к первому оператору после построения цикла.
  2. Ключевое слово break немедленно завершает цикл. Программа переходит к первому оператору после конструкции цикла.
  3. Ключевое слово continue завершает только текущую итерацию цикла, но не весь цикл. Программа переходит к первому оператору в теле цикла.

Вы можете увидеть каждый из этих трех методов завершения цикла while на следующем рисунке:

Рисунок : Завершение цикла while с помощью (a) условия цикла, (b) ключевого слова break или (c) продолжить ключевое слово.

Чтобы проиллюстрировать эти методы, вы узнаете, как использовать каждый из них для достижения одной и той же цели: удалить первый символ из строки, пока не останется только 5 элементов.

Вы также можете посмотреть мое поясняющее видео по ходу чтения статьи:

Как остановить цикл while в Python?


Посмотреть это видео на YouTube

Метод 1: Условие цикла while

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

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

 с = «привет, мир»
в то время как len(s) > 5:
    с = с[1:]
печать(и)
# world 

Метод 2: Ключевое слово «break»

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

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

 с = «привет, мир»
пока верно:
    если len(s) > 5:
        с = с[1:]
    еще:
        сломать
печать(и)
# world 

К счастью, вы добавили конструкцию if, содержащую ключевое слово break , в ветку else. Как только , если условие оценивается как False , выполняется ветвь else и выполняется оператор break — цикл завершается.

Только строка с 5 или менее символами приводит к тому, что условие if оценивается как False , поэтому цикл завершается, как только s содержит строку 'world' .

Метод 3: Ключевое слово «продолжить»

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

Вот пример:

 s = 'привет, мир'
в то время как len(s) > 5:
    с = с[1:]
    если len(s) > 5:
        Продолжить
    печать(и)
# Мир
 

Вы начинаете с той же строки 'hello world' . Python проверяет, содержит ли строка более 5 символов в условии цикла while, что так и есть.

Затем он входит в тело цикла и существенно уменьшает длину строки на единицу. Теперь он проверяет, является ли len(s) > 5 , что остается верным, пока строка содержит более 5 символов. В этих случаях continue выполняется оператор, и Python немедленно завершает текущую итерацию и продолжает выполнение условия цикла, пока len(s) >5 .

Однако, как только строка s состоит только из 5 символов 'world' , ветвь if не выполняется и оператор continue пропускается. Вместо этого он выводит строку в оболочку и проверяет невыполненное условие цикла — и выходит из цикла.

Хотя тело цикла выполнялось несколько раз, Оператор print() был выполнен только один раз.

👉 Рекомендуемое руководство : Как завершить цикл for?

Памятка по ключевым словам Python

Вы можете узнать о самых важных ключевых словах Python в этой краткой памятке — если вы похожи на меня, вы тоже любите шпаргалка! ?

Вы можете скачать его здесь:

Резюме

Вы узнали три способа завершения цикла while.

Метод 1: Условие цикла while проверяется один раз за итерацию. Если он оценивается как False, программа завершает цикл и переходит к первому оператору после конструкции цикла.

Метод 2: Ключевое слово break немедленно завершает цикл. Программа переходит к первому оператору после конструкции цикла.

Метод 3: Ключевое слово continue завершает только текущую итерацию цикла, но не весь цикл. Программа переходит к первому оператору в теле цикла.

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

Присоединяйтесь к нам, это весело! 🙂

Юмор программиста

Вопрос: Как умер программист в душе? ☠️

Ответ : Они прочитали инструкцию на бутылочке с шампунем:
Вспенить. Смывать. Повторение.

Крис

Работая исследователем распределенных систем, доктор Кристиан Майер полюбил преподавать информатику студентам.

Чтобы помочь студентам достичь более высоких уровней успеха в Python, он основал образовательный веб-сайт по программированию Finxter.com. Он автор популярной книги по программированию Python One-Liners (NoStarch 2020), соавтор серии самостоятельно опубликованных книг Coffee Break Python, энтузиаст информатики, фрилансер и владелец одного из 10 крупнейших блогов Python в мире.

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

Категории Информатика, Структуры данных, Python, Скрипты

python — Как я могу остановить цикл While?

Я написал цикл while в функции, но не знаю, как его остановить. Когда он не соответствует своему конечному условию, цикл просто продолжается вечно. Как я могу это остановить?

 определение_периода (вселенная_массива):
    период=0
    tmp=universe_array
    пока верно:
        tmp=apply_rules(tmp)#aplly_rules — это другая функция
        период+=1
        если numpy.array_equal(tmp,universe_array) имеет значение True:
            break #я хочу, чтобы цикл останавливался и возвращал 0, если
                     #период больше 12
        если период>12: # я написал эту строку, чтобы остановить его.. но кажется, что это
                       #не работает....помогите..
            вернуть 0
        еще:
            период возврата
 
  • питон
  • цикл while

2

просто сделайте правильный отступ в коде:

 def define_period(universe_array):
    период=0
    tmp=universe_array
    пока верно:
        tmp=apply_rules(tmp)#aplly_rules — это другая функция
        период+=1
        если numpy. array_equal(tmp,universe_array) имеет значение True:
            период возврата
        если период>12: # я написал эту строку, чтобы остановить его.. но, похоже, это не работает.... помогите..
            вернуть 0
        еще:
            период возврата
 

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

Следуя вашей идее использовать бесконечный цикл, это лучший способ написать его:

 определение_периода (вселенная_массива):
    период=0
    tmp=universe_array
    пока верно:
        tmp=apply_rules(tmp)#aplly_rules — это другая функция
        период+=1
        если numpy. array_equal(tmp,universe_array) имеет значение True:
            сломать
        если период>12: # я написал эту строку, чтобы остановить его.. но, похоже, это не работает.... помогите..
            период = 0
            сломать
    период возврата
 

3

 определение_периода (вселенная_массива):
    период=0
    tmp=universe_array
    в то время как период <12:
        tmp=apply_rules(tmp)#aplly_rules — это другая функция
        если numpy.array_equal(tmp,universe_array) имеет значение True:
            сломать
        период+=1
    период возврата
 

5

Оператор — это в Python, вероятно, не делает того, что вы ожидаете. Вместо этого:

, если numpy.array_equal(tmp,universe_array) имеет значение True:
        сломать
 

Я бы написал так:

 if numpy.array_equal(tmp,universe_array):
        сломать
 

— это оператор , проверяющий идентичность объекта, что совсем не похоже на равенство.

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

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