Как выйти из бесконечного цикла python
Перейти к содержимому

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

  • автор:

8.1. Python – Цикл while: синтаксис, блок-схема, примеры. Бесконечный цикл. Оператор else с циклом while. Цикл while в одну строку

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

Синтаксис

Синтаксис цикла while в языке программирования Python:

while выражение: оператор(ы) 

Здесь оператор(ы) могут быть одиночным оператором или блоком операторов. Условие может быть любым выражением, а true — любым ненулевым значением. Цикл повторяется, пока условие истинно.

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

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

Блок-схема

Блок-схема цикла while в Python

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

Пример

#!/usr/bin/python count = 0 while (count < 9): print 'Количество:', count count = count + 1 print "До свидания!" 

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

Количество: 0 Количество: 1 Количество: 2 Количество: 3 Количество: 4 Количество: 5 Количество: 6 Количество: 7 Количество: 8 До свидания! 

Здесь блок, состоящий из операторов печати и инкремента, выполняется повторно до тех пор, пока значение count не станет меньше 9. С каждой итерацией отображается текущее значение счетчика индексов, которое затем увеличивается на 1.

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

В Python цикл становится бесконечным, если условие никогда не становится ЛОЖНЫМ. Вы должны соблюдать осторожность при использовании циклов while из-за возможности того, что это условие никогда не перейдёт в значение FALSE. Это приводит к циклу, который никогда не заканчивается. Такой в Python цикл while называется бесконечным циклом.

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

Как сделать бесконечный цикл в Python? Ниже пример бесконечного цикла.

#!/usr/bin/python var = 1 while var == 1 : # Это создает бесконечный цикл num = raw_input("Введите число:") print "Вы ввели: ", num print "До свидания!" 

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

Введите число :20 Вы ввели: 20 Введите число :29 Вы ввели: 29 Введите число :3 Вы ввели: 3 

Вышеприведенный пример выполняется нескончаемо. Как остановить бесконечный цикл в Python? Используйте CTRL + C, чтобы выйти из бесконечного цикла и программы.

Использование оператора else с циклом while

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

В следующем примере показано сочетание в Python оператора else с оператором while, который выводит число, если оно меньше 5, в противном случае выполняется оператор else.

#!/usr/bin/python count = 0 while count < 5: print count, " меньше 5" count = count + 1 else: print count, " не меньше 5" 

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

0 меньше 5 1 меньше 5 2 меньше 5 3 меньше 5 4 меньше 5 5 не меньше 5 

Цикл while в одну строку

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

Ниже приведен синтаксис и пример однострочного while.

#!/usr/bin/python flag = 1 while (flag): print 'flag действительно true!' print "До свидания!" 

Лучше не пробовать приведенный выше пример, потому что он входит в бесконечный цикл, и вам нужно нажать клавиши CTRL + C, чтобы выйти.

Оглавление

  • 1. Python – Самоучитель для начинающих
  • 2. Python – Обзор
  • 3. Python – Установка среды
  • 4. Python – Базовый синтаксис
  • 4.1. Python – Аргументы командной строки
  • 5. Python – Типы переменных
  • 6. Python – Основные операторы
  • 6.1. Python – Арифметические операторы
  • 6.2. Python – Операторы сравнения
  • 6.3. Python – Операторы присваивания: примеры
  • 6.4. Python – Побитовые операторы
  • 6.5. Python – Логические операторы
  • 6.6. Python – Операторы членства
  • 6.7. Python – Операторы идентификации
  • 6.8. Python – Приоритет операторов
  • 7. Python – Условные операторы
  • 7.1. Python – Условие if
  • 7.2. Python – Условные операторы if. else и elif
  • 7.3. Python – Вложенные операторы if
  • 8. Python – Циклы
  • 8.1. Python – Цикл while
  • 8.2. Python – Цикл for
  • 8.3. Python – Вложенные циклы
  • 8.4. Python – Оператор break
  • 8.5. Python – Оператор continue
  • 8.6. Python – Оператор pass
  • 9. Python – Числа
  • 9.1. Python – Метод abs()
  • 9.2. Python – Метод ceil()
  • 9.3. Python – Метод cmp()
  • 9.4. Python – Метод exp()
  • 9.5. Python – Метод fabs()
  • 9.6. Python – Метод floor()
  • 9.7. Python – Метод log()
  • 9.8. Python – Метод log10()
  • 9.9. Python – Метод max()
  • 9.10. Python – Метод min()
  • 9.11. Python – Метод modf()
  • 9.12. Python – Метод pow()
  • 9.13. Python – Метод round()
  • 9.14. Python – Метод sqrt()
  • 9.15. Python – Метод choice()
  • 9.16. Python – Метод randrange()
  • 9.17. Python – Метод random()
  • 9.18. Python – Метод seed()
  • 9.19. Python – Метод shuffle()
  • 9.20. Python – Метод uniform()
  • 9.21. Python – Метод acos()
  • 9.22. Python – Метод asin()
  • 9.23. Python – Метод atan()
  • 9.24. Python – Метод atan2()
  • 9.25. Python – Метод cos()
  • 9.26. Python – Метод hypot()
  • 9.27. Python – Метод sin()
  • 9.28. Python – Метод tan()
  • 9.29. Python – Метод degrees()
  • 9.30. Python – Метод radians()

Цикл while в Python

Из этого материала вы узнаете, что такое циклы 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) # 2 
a = 1 while a  5: a += 1 if a == 3: continue print(a) # 2, 4, 5 

Выход из бесконечного цикла while True по вводу значения с клавиатуры

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

while a=1: print('Something') 

который можно прервать вводом значения a:

a = input('Enter a') 

Как это правильно сделать? В голову пришло разделить это с помощью multiprocessing на два отдельных потока , но на функции с a=input() код выпадает в ошибку. Или я не туда пошел? Спасибо UPD. для понятности выкладываю упрощенный код.

. class AB: def __call__(self): while a = 1: print('Hello') class CD: def __call__(self): a = input('Enter a=') if __name__ == __main__: a = AB() b = CD() p1 = Process(target = a) p2 = Process(target = b) p1.start() p2.start() p1.join() p2.join() 

Этот код потоки запускает, цикл работает а на input() ошибка:

input('Enter a=') EOFError:EOF when reading line 

Отслеживать
49.3k 17 17 золотых знаков 57 57 серебряных знаков 101 101 бронзовый знак
задан 1 мар 2018 в 10:44
Anton Pozdnyakov Anton Pozdnyakov
31 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака
В чем конкретно проблема? В операторе break или в неблокирующем чтении нажатой клавиши?
1 мар 2018 в 10:50
Если я верно понял ваш вопрос - то второе.
1 мар 2018 в 11:14

если интересно, то о EOFError в дочернем процессе, отдельный вопрос задайте. Связанный вопрос Is there any way to pass 'stdin' as an argument to another process in python?

1 мар 2018 в 11:58

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Чтобы прервать Питон-скрипт, запущенный в консоли, не нужно дочерние процессы запускать, достаточно Ctrl+C нажать:

while True: print('Something') 

Если вы не хотите на traceback с KeyboardInterrupt исключением смотреть, можно свой обработчик сигнала установить перед запуском цикла:

import os import signal signal.signal(signal.SIGINT, lambda *_: os._exit(1)) # exit on Ctrl+C 

или обернуть в try/except KeyboardInterrupt код в основном потоке.

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

import threading def loop(): while True: print('something') threading.Thread(target=loop, daemon=True).start() input('Press to exit.') 

В этом случае, выход происходит по нажатию на , так как поток объявлен как daemon=True , поэтому он не переживёт основной поток (в котором мы ввод ожидали). Если убрать daemon=True , то дочерний поток продолжил бы выполняться и по прекращению основного потока.

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

import threading def loop(done, interval=1): while not done.wait(interval): print('something') done = threading.Event() threading.Thread(target=loop, args=[done], daemon=True).start() input('Press Enter to exit.') done.set() # break the loop 

Если пауза между итерациями вам не нужна, то просто while not done.is_set(): условие можно использовать для цикла.

Как выйти из бесконечного цикла в state, получив новое сообщение aiogram selenium?

Мне нужен бесконечный цикл, который обновляет страницу и проверяет date. Так же мне нужно, чтобы этот бесконечный цикл прерывался, если сообщение = отмена. через отдельный хендлер не работает, т.к. открыт браузер и цикл

async def checker_start(msg: types.Message, state: FSMContext): if msg.text.title() == 'Да': parser = AvitoParcer() await FSMAd.ad.set() while True: parser.update_page() date = parser.get_time() if date == '1 минуту назад' or date == 'Несколько секунд назад' or date == '2 минуты назад': date = parser.get_time() name = parser.get_name() desc = parser.get_desc() image_url = parser.get_image_url() url = parser.get_url() price = parser.get_price() await bot.send_photo( msg.from_user.id, caption=f'Найдено новое объявление. Выложено:\n' f'\n' f'\n' f'\n' f'ссылка - ', photo=f'')
  • Вопрос задан более года назад
  • 197 просмотров

1 комментарий

Простой 1 комментарий

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

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