Цикл 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 в Python
Цикл while позволяет повторить одно или несколько действий до тех пор, пока заданное условие остается истинным.
| Содержание страницы: |
|---|
| 1. Цикл while в Python |
| 1.2. Как прервать цикл while |
| 1.3. Флаги в цикле while |
| 2.1. Команда break в цикле while |
| 2.2. Команда continue в цикле while |
| 3. Предотвращение зацикливания в цикле while |
| 4. Цикл while со списками |
| 5. Цикл while со словарями |
1. Цикл while в Python
Цикл while в Python используется во многих программах. Он позволяет выполнять программу пока остается истинным условие. Приведем пример перебора числовой последовательности в заданном диапазоне.
>>> number = 1 # присваиваем начальное значение переменной
>>> while number . print(number) # выводим значение number при каждом цикле
. number += 1 # после каждого цикла увеличиваем значение на 1
.
1
2
3
4
5
6
7
Вначале присваиваем значение переменной number. Затем запускаем цикл while до тех пор, пока значение переменной number не будет больше 7. При каждом проходе цикла выводим значение number и затем увеличиваем его на 1. Как только значение number станет больше 7 цикл прекращается.
1.2. Как прервать цикл while на Python.
Предположим, что вам нужно остановить программу, когда пользователь захочет этого. Для этого в программе определяем признак завершения, и программа работает до тех пор, пока пользователь не ввел нужное значение. Признаком завершения может быть как число, так и строка или символ. Приведем пример простого цикла while при котором пользователь вводит слово, а оно возвращается, наоборот.
prompt = «\nВведите любое слово, и оно будет выведено наоборот»
prompt += «\nЕсли надоело введите команду ‘стоп’.\n»
message = »
while message != «стоп»:
message = input(prompt)
if message != «стоп»:
print(message[::-1])
else:
print(«Программа завершена»)
В начале создаем сообщение prompt (посказку) которое объясняет пользователю что за программа и как ее можно завершить. Затем создается переменная message и ей присваивается пустое значение. Важно переменную message определить до запуска цикла, присвоить ей можно любое значение или пустую строку. При запуске цикла while идет проверка совпадает ли значение message с условием продолжения цикла. При каждом выполнение цикла на экран выводятся правила цикла и условия его завершения. Дальше можно запустить команду if-else для проверки условия, если пользователь не ввел строку «стоп«, то выводим строку пользователя на экран в обратном порядке с помощью сегментации строки [: : -1].
Введите любое слово, и оно будет выведено наоборот
Если надоело введите команду ‘стоп’.
python лучший язык программирования
яинавориммаргорп кызя йишчул nohtyp
Введите любое слово, и оно будет выведено наоборот
Если надоело введите команду ‘стоп’.
123456789
987654321
Введите любое слово, и оно будет выведено наоборот
Если надоело введите команду ‘стоп’.
стоп
Программа завершена
Пока пользователь не введет слово «стоп», цикл будет начинаться заново.
1.3. Флаги в цикле while на Python
Если программа должна выполняться при нескольких условиях, то лучше определить одну переменную — флаг. Переменная — флаг сообщает, должна ли программа выполняться при каждом цикле. Для флага достаточно определить два состояния True — в котором программа продолжит выполнение и False — завершение программы. В результате в начале цикла while достаточно проверить всего одно условие для запуска программы, а все остальные проверки организовать в остальном коде.
prompt = «\nВведите любое слово, и оно будет выведено наоборот»
prompt += «\nЕсли надоело введите команду ‘стоп’\n»
active = True
while active:
message = input(prompt)
if message == «стоп»:
active = False
print(«Программа завершена»)
else:
print(message[::-1])
В примере переменной active присваивается True и программа будет выполняться до тех пор, пока переменная active не станет равной False. Результат работы этой программы ничем не будет отличаться от программы в разделе 1.2. Вот что получим мы на выходе.
Введите любое слово, и оно будет выведено наоборот
Если надоело введите команду ‘стоп’
Python
nohtyP
Введите любое слово, и оно будет выведено наоборот
Если надоело введите команду ‘стоп’
стоп
Программа завершена
Программа завершится если пользователь введет «стоп». После этого переменная active становится равной False и действие цикла прекращается.
2.1. Команда break в цикле while на Python
С помощью команды break так же можно прервать цикл while. Цикл, который начинается с while True выполняется бесконечно, пока не будет выполнена команда break .
prompt = «\nВведите столицу США с заглавной буквы: »
active = True
while active:
capital = input(prompt)
if capital == ‘Вашингтон’:
print(‘Совершенно верно’)
break
else:
print(f» не является столицей США»)
В результате цикл while будет выполняться до тех пор, пока не будет введен правильный ответ, после чего сработает команда break и произойдет выход из цикла.
Введите столицу США с заглавной буквы: Лондон
Лондон не является столицей США
Введите столицу США с заглавной буквы: Москва
Москва не является столицей США
Введите столицу США с заглавной буквы: Вашингтон
Совершенно верно
2.2. Команда continue в цикле while на Python
Предположим, что вам нужно прервать цикл while при выполнение каких-либо условий и запустить его заново. Для этого можно воспользоваться командой continue . Напишем цикл while , который выводит только четные числа в диапазоне от 1 до 20:
>>> number = 0
>>> while number < 20:
. number += 1
. if number % 2 == 1:
. continue
. print(number, end=’ ‘)
.
2 4 6 8 10 12 14 16 18 20 >>>
Сначала создадим переменную number и присвоим ей начальное значение. После идет проверка условий цикла что значение number меньше 20. При входе в цикл значение number увеличивается на 1 и затем команда if проверяет остаток от деления на 2. Если остаток равен одному, то число не четное, команда continue приказывает Python игнорировать остаток кода и цикл запускается заново. Если остаток от деления равен нулю, то число выводится на экран и так до того пока number будет равен 20, затем условия цикла while не будут выполнены и цикл прекратится.
3. Предотвращение зацикливания в циклах while на Python
В каждом цикле должно быть предусмотрена возможность завершения, чтобы цикл while не выполнялся бесконечно. Например, если в предыдущем примере мы пропустили бы строку number += 1 , то значение number всегда будет равно 0 и цикл будет продолжаться до бесконечности
>>> number = 0
>>> while number < 20:
. if number % 2 == 1:
. continue
. print(number, end=’ ‘)
.
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .
Для предотвращения зацикливания в терминальном окне введите Ctrl + C и всегда заранее проверяйте все условия цикла while и пути выхода из него.
4. Цикл while со списками в Python
Для изменения списков в процессе обработки удобно использовать цикл while . К примеру, у нас есть целый список пользователей, который может состоять из тысяч пользователей и нам нужно будут удалить всех пользователей с определенным именем. Нам уже известно, что метод remove() для списков удаляет лишь первое вхождение заданного значения в список, но нам нужно удалить их все. В этом случае мы можем запустить цикл while :
>>> login = [‘qwerty’, ‘arfa’, ‘bond’, ‘chelsy’, ‘qwerty’, ‘serg’, ‘cat’, ‘qwerty’]
>>> while ‘qwerty’ in login:
. login. remove (‘qwerty’)
.
>>> print(login)
[‘arfa’, ‘bond’, ‘chelsy’, ‘serg’, ‘cat’]
В результате при запуске цикла while проверяется условия нахождения ‘qwerty‘ в списке login. Затем после первого удаления из списка, цикл запускается снова и Python проверяет наличие ‘qwerty‘ в списке заново и так до тех, пор пока будет выполняться условие цикла while .
5. Цикл while со словарями в Python
При каждом проходе цикла while программа может выполнять любое действие. Так же, как и со списками, цикл while работает и со словарями. Создадим программу, которая будет запрашивать у посетителя имя и записывать ответы на заданный вопрос и в конце выводить словарь на экран:
interview = <>
active = True
while active:
# Запрашиваем имя и ответ на вопрос
name = input («\nКак вас зовут? «)
question = input («Какая марка автомобиля вам нравиться «)
# Создаем список с ответами и добавляем первый ответ
answers = []
answers. append (question)
# Ответ сохраняем в словаре «имя: список ответов»
interview[name] = answers
# Запускаем второй цикл с возможностью добавления еще ответов к одному пользователю
active_2 = True
while active_2:
repeat = input («Желаете добавить еще один автомобиль? (yes/no) «)
if repeat == ‘no’:
active_2 = False
else :
question_n = input («Какая марка автомобиля вам еще нравиться «)
# Добавляем ответ в список
answers. append (question_n)
# Вопрос о продолжение опроса
repeat = input («Желаете продолжить опрос? (yes/no) «)
if repeat == ‘no’:
active = False
print(«\nОпрос завершен, все результаты:»)
# Переберем словарь и посмотрим ответы
for name, questions in interview.items():
print(f» \n name.title()> любит автомобили марки:»)
for question in questions:
print(f» \t question.title()>»)
В начале программы создаем словарь interview в который в будущем будем добавлять посетителя с его ответами. Затем устанавливаем флаг продолжения опроса active = True. Пока active = True Python будет выполнять цикл while . При запуске цикла посетителю предлагается представиться и ввести ответ на заданный вопрос. Затем сразу создадим список ответов answers на всякий случай, если посетитель захочет дать несколько ответов и добавляем его в словарь. После запускаем второй цикл while с вопросом добавить еще один ответ. Количество ответов бесконечно, и посетитель сам решает, когда прервать программу. Если ответов больше нет, то возвращаемся к первому циклу и предлагаем ввести нового посетителя с опросом. После окончания цикла while выведем на экран всех посетителей и их ответы. Если запустить программу и ввести несколько пользователей с ответами, то результат будет выглядеть так:
Как вас зовут? bob
Какая марка автомобиля вам нравиться: audi
Желаете добавить еще один автомобиль? (yes/no) yes
Какая марка автомобиля вам еще нравиться: bmw
Желаете добавить еще один автомобиль? (yes/no) yes
Какая марка автомобиля вам еще нравиться: ford
Желаете добавить еще один автомобиль? (yes/no) no
Желаете продолжить опрос? (yes/no) yes
Как вас зовут? Artem
Какая марка автомобиля вам нравиться: porshe
Желаете добавить еще один автомобиль? (yes/no) no
Желаете продолжить опрос? (yes/no) no
Опрос завершен, все результаты:
Bob любит автомобили марки:
Audi
Bmw
Ford
Artem любит автомобили марки:
Porshe
Выход из бесконечного цикла 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
Отслеживать
48.7k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков
задан 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(): условие можно использовать для цикла.
Артём Санников
Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Главная › Языки программирования › Python › Циклы › Цикл while в Python
Цикл while в Python
Как работает цикл while
Цикл while продолжает свою работу пока заданное условие истинно.
Пример
Необходимо вывести цифры от 1 до 10 . Объявляем переменную i и присваиваем ей числовое значение 1 . Далее открываем цикл while и пишем условие: пока переменная i меньше или равна 10 , выводим значение переменной i , а затем увеличиваем значение переменной i на одну единицу.
# Объявляем переменную i = 1 # Запускаем цикл while while iПредотвращение зацикливания while
У каждого цикла while должна быть предусмотрена возможность завершения, чтобы цикл не выполнялся бесконечно. Обычно для завершения цикла используют условия, по завершению которых цикл прекращает работу.
Цикл while с ошибкой
В примере ниже должны быть выведены цифры от 1 до 5 , но этого не произойдёт поскольку цикл написан с ошибкой, а именно не увеличивается значение счётчика (значение переменной i не меняется). Если выполнить этот код, то Python зациклится и будет выполняться бесконечно.
# Объявляем переменную x x = 1 # Запускаем цикл while while xЦикл while без ошибки
Мы уже выяснили, чтобы цикл while работал нужно увеличивать значение счётчика, а именно добавлять к переменной i одну единицу. Это можно сделать двумя способами: i = i + 1 или i += 1
Если сейчас запустить код, то он отработает и выведет цифры от 1 до 5 .
# Объявляем переменную x x = 1 # Запускаем цикл while while xКоманда break и выход из цикла while
Цикл while может работать бесконечно, пока условие истинно. Но чтобы немедленно прервать выполнение оставшегося кода в цикле независимо от условия, нужно использовать команду break
Важный момент: команда break может использоваться в любых циклах Python.
Пример
Необходимо вывести цифры от 1 до 7 . Но как только значение переменной i будет равно 6 нужно прервать работу цикла while командой break .
i = 0 while i < 7: i += 1 if i == 6: break print(i, end=' ') # Вывод в консоли 1 2 3 4 5Команда continue и продолжение цикла while
Цикл while можно прерывать, командой break . Вместо того, чтобы полностью прерывать выполнение цикла без выполнения оставшейся части кода, можно воспользоваться командой continue для возвращения к началу списка и проверке условия.
Пример
Необходимо вывести цифры от 1 до 10 . Но как только значение переменной i будет равно 4 , необходимо будет пропустить это значение используя команду continue в цикле while .
i = 0 while i < 10: i += 1 if i == 4: continue print(i, end=' ') # Вывод в консоли 1 2 3 5 6 7 8 9 10Команда else в цикле while
Команда else в цикле while отвечает за то, что будет выполнено после окончания работы цикла.
Пример
Необходимо вывести цифры от 0 до 9 , а по завершению работы цикла while нужно вывести текст Цикл завершён!
i = 0 while i < 10: print(i, end=', ') i += 1 else: print('Цикл завершён!') # Вывод в консоли 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, Цикл завершён!Записи по теме
- Вложенные циклы в Python
- Цикл for в Python