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

python — Как правильно выйти из бесконечного цикла

Вопрос задан

Изменён 11 месяцев назад

Просмотрен 253 раза

Столкнулся с проблемой в цикле. Его нужно прервать по команде "done:", но при этом, чтобы вызывалась ошибка «Invalid input» в блоке try / except.
В моем же случае исключение ошибки ввода не позволяет прервать такой цикл строчкой.

largest = 0
smallest = 0
while True:
    try:
        num = int(input("Enter a number: "))
    except:
        print("Invalid input")
        continue
    if num == "done":
        break
    elif largest < num:
        largest = num
    elif smallest < num:
        smallest = num
print("Maximum is ", largest)
print("Minimum is ", smallest)```
  • python
  • python-3.
    x
  • циклы
  • while
  • break

12

Попробуйте так

largest = 0
smallest = 0
fl = False
while True:
    try:
        _input = input("Enter a number: ")
        num = int(_input)
    except Exception as e:
        print(f"Invalid input: {e}")
        num = _input
        fl = True
        #print(f'num = {num}') #
#        continue
        
    if num == "done":
        break
    elif fl:
         fl = False
    elif largest < num:
        largest = num
    elif smallest < num:
        smallest = num
print("Maximum is ", largest)
print("Minimum is ", smallest)

Предлагаю Вам так:

largest = 0
smallest = 0
while True:
    try:
        answer = input("Enter a number: ")
        number = int(answer)
    except (TypeError, ValueError):
        if answer == "done":
            break
        else:
            print("Invalid input")
    else:
        if largest < number:
            largest = number
        elif number < smallest:
            smallest = number
print("Maximum is ", largest)
print("Minimum is ", smallest)
values = {0}
while True:
    if (reply := input("Enter a number: ")) == 'done':
        break
    sign = ''
    if reply. startswith(('+', '-')):
        sign, *val = reply
        reply = ''.join(val)
    if not reply.isnumeric():
        print('Wrong value. Try once more.')
        continue
    values.add(
        int(sign + reply)
    )
print("Maximum is ", max(values))
print("Minimum is ", min(values))

Если чем-то не устраивает использование max и min
можно так:

smallest = 0
largest = 0
while True:
    if (reply := input("Enter a number: ")) == 'done':
        break
    sign = ''
    if reply.startswith(('+', '-')):
        sign, *val = reply
        reply = ''.join(val)
    if not reply.isnumeric():
        print('Wrong value. Try once more.')
        continue
    smallest, _, largest = sorted([smallest, int(sign + reply), largest])
print("Maximum is ", smallest)
print("Minimum is ", largest)

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

python — Как выйти из двух вложенных циклов

Ищу циклом текущего пользователя компьютера в локальной сети

def scan_Lan():
    ip_list = ['192. 168.4.']
    i = 50
    while i <= 240:
        scan_ip = ip_list[0] + str(i)
        response = subprocess.Popen(["ping", "-n", "1", "-w", "200", scan_ip]).wait()
        if(response == 0):
            try:
                wql = 'SELECT *  FROM Win32_computerSystem'
                c = wmi.WMI(scan_ip, user='office\admin', password='fff')
                for item in c.query(wql):
                    currentUser = str(item.UserName)
                    print(currentUser)
                    if(currentUser == "ivanov"):
                        print(scan_ip)
                        break
            except:
                   print("-")
        i += 1
    print("end")
scan_Lan()

Все хорошо работает, но хочу после поиска выходить полностью из цикла while, как это сделать? Поставил вот здесь

 print(scan_ip)
 break

но он по всей видимости выходит только из for, а как сделать глобальный break?

  • python
  • python-3.x

1

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

if current_user == 'ivanov':
    return scan_ip

Можно сделать так

    while i <= 240:
        scan_ip = ip_list[0] + str(i)
        response = subprocess.Popen(["ping", "-n", "1", "-w", "200", scan_ip]).wait()
        if(response == 0):
            try:
                wql = 'SELECT *  FROM Win32_computerSystem'
                c = wmi.WMI(scan_ip, user='office\admin', password='fff')
                for item in c.query(wql):
                    currentUser = str(item.UserName)
                    print(currentUser)
                    if(currentUser == "ivanov"):
                        print(scan_ip)
                        break
                else: 
                  i += 1  # сюда зайдет, если цикл завершился полностью(то есть не было найдено)
                  print("end")
                  continue;
            except:
                   print("-")
        break; # сюда попадем и прервем большой цикл, если во внутреннем был найден объект

Вот более простой пример для понимания

for x in xrange(10):
    for y in xrange(10):
        for z in xrange(10):
            print x,y,z
            if x*y*z == 30:
                break # прерываем внутренний цикл
        else:
            continue # продолжаем, если внутренний цикл не был прерван
        break # внутренний цикл был прерван, прерываем и этот цикл
    else:
        continue
    break

Используйте флаг (булево значение) для выхода из циклов. При входе в условие currentUser == «ivanov» меняйте его значение на положительное, делайте break, а в основном цикле установите условие while i <= 240 and not result, тогда цикл будет завершен, как только result станет истиной.

Глобального break, для выхода из всех циклов, не существует.

a:

list_ = [1, 2, 3, 4, 5]
check = True
while check:
    for v in list_:
        if v == 3:
            check = False
            break
        else:
            print(v)

b:

list_ = [1, 2, 3, 4]
try:
    while True:
        for v in list_:
            if v == 3:
                raise UserWarning
            else:
                print(v)
except UserWarning:pass

1

2

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Оператор While.

..End While — Visual Basic

Редактировать

Твиттер LinkedIn Фейсбук Электронная почта

  • Статья

Запускает серию инструкций, пока заданное условие равно True .

Синтаксис

 Пока условие
    [ заявления ]
    [Продолжить пока]
    [ заявления ]
    [Выйти во время]
    [ заявления ]
Конец пока
 

Детали

Срок Определение
состояние Обязательно. Логическое выражение . Если условие равно Ничего , Visual Basic обрабатывает его как Ложь .
отчеты Дополнительно. Один или несколько операторов после While , которые выполняются каждый раз, когда условие равно True .
Продолжить пока Дополнительно. Передает управление следующей итерации блока While .
Выход Пока Дополнительно. Передает управление из блока While .
Конец пока Обязательно. Завершает определение блока
While
.

Используйте структуру While...End While , когда вы хотите повторить набор операторов неопределенное количество раз, пока сохраняется условие Правда . Если вам нужна большая гибкость в отношении того, где вы проверяете условие или какой результат вы проверяете, вы можете предпочесть оператор Do…Loop. Если вы хотите повторить операторы заданное количество раз, оператор For. ..Next обычно является лучшим выбором.

Примечание

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

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

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

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

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

Exit While

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

Обычно вы используете Exit While после оценки некоторого условия (например, в Если... Тогда... Иначе структура). Вы можете выйти из цикла, если обнаружите условие, делающее ненужным или невозможным продолжение итерации, например ошибочное значение или запрос на завершение. Вы можете использовать Exit While при проверке условия, которое может вызвать бесконечный цикл , который может выполняться чрезвычайно большое или даже бесконечное количество раз. Затем вы можете использовать Exit While , чтобы выйти из цикла.

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

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

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

Пример 1

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

 Dim индекс As Integer = 0
Пока индекс <= 10
    Debug.Write(index.ToString & "")
    индекс += 1
Конец пока
Отладка.WriteLine("")
' Вывод: 0 1 2 3 4 5 6 7 8 9 10
 

Пример 2

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

 Размерный индекс Целое число = 0
Пока индекс < 100000
    индекс += 1
    ' Если индекс находится между 5 и 7, продолжить
    ' со следующей итерацией.
    Если индекс >= 5 И индекс <= 8 Тогда
        Продолжить пока
    Конец, если
    ' Показать индекс.
    Debug.Write(index.ToString & "")
    ' Если индекс равен 10, выйти из цикла.
    Если индекс = 10 Тогда
        Выход во время
    Конец, если
Конец пока
Отладка.WriteLine("")
' Вывод: 1 2 3 4 910
 

Пример 3

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

 Private Sub ShowText (ByVal textFilePath As String)
    Если System.IO.File.Exists(textFilePath) = False Тогда
        Debug.WriteLine("Файл не найден: " & textFilePath)
    Еще
        Dim sr As System. IO.StreamReader = System.IO.File.OpenText(textFilePath)
        Пока sr.Peek() >= 0
            Debug.WriteLine(sr.ReadLine())
        Конец пока
        ср.Закрыть()
    Конец, если
Конец сабвуфера
 

См. также

  • Петлевые конструкции
  • Оператор Do...Loop
  • Для... Следующей инструкции
  • Логический тип данных
  • Вложенные управляющие структуры
  • Заявление о выходе
  • Заявление о продолжении

Обратная связь

Просмотреть все отзывы о странице

python - Как остановить цикл While?

Задавать вопрос

спросил

Изменено 3 месяца назад

Просмотрено 250 тысяч раз

Я написал цикл 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

4

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

 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

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

, если numpy.array_equal(tmp,universe_array) имеет значение True:
        перерыв
 

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

 if numpy.array_equal(tmp,universe_array):
        перерыв
 

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

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

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