Python while true не работает

Цикл while в Python

Из этого материала вы узнаете, что такое циклы while, как они могут становиться бесконечными, как использовать инструкцию else в цикле while и как прерывать исполнение цикла.

Управление потоком инструкций: цикл While в Python

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

Что такое цикл while в Python?

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

Сначала программа оценивает условие цикла while. Если оно истинное, начинается цикл, и тело while исполняется. Тело будет исполняться до тех пор, пока условие остается истинным. Если оно становится ложным, программа выходит из цикла и прекращает исполнение тела.

Рассмотрим пример, чтобы лучше понять.

Читайте также:  С помощью какого приложения можно настроить гитару

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

Бесконечный цикл while — это цикл, в котором условие никогда не становится ложным. Это значит, что тело исполняется снова и снова, а цикл никогда не заканчивается.

Следующий пример — бесконечный цикл:

Если запустить этот код, то программа войдет в бесконечный цикл и будет снова и снова спрашивать имена. Цикл не остановится до тех пор, пока не нажать Ctrl + C .

Else в цикле while

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

Этот пример демонстрирует принцип работы else в цикле while.

Программа исполняет код цикла while до тех, пока условие истинно, то есть пока значение a меньше 5. Поскольку начальное значение a равно 1, а с каждым циклом оно увеличивается на 1, условие станет ложным, когда программа доберется до четвертой итерации — в этот момент значение a изменится с 4 до 5. Программа проверит условие еще раз, убедится, что оно ложно и исполнит блок else , отобразив «условие неверно».

Прерывания цикла while в Python

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

  1. Break — ключевое слово break прерывает цикл и передает управление в конец цикла
  2. Continue — ключевое слово continue прерывает текущую итерацию и передает управление в начало цикла, после чего условие снова проверяется. Если оно истинно, исполняется следующая итерация.

Источник

Подробный разбор цикла while в Python

Цикл — это некий набор инструкций. Он выполняется до тех пор, пока его условие истинно. Давайте разберемся, как работает цикл while в Python.

Что такое цикл?

Циклы — фундаментальное понятие в программировании. Если вы новичок, то обязаны в них разобраться. Циклы могут помочь выполнять набор инструкций до тех пор, пока заданное условие истинно.

В Python есть два основных вида циклов:

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

Цикл while

Суть работы цикла while очень проста. Работает он так: ваши инструкции выполняются, пока условие истинно.

Цикл while проверяет условие перед каждой итерацией цикла. Если возвращается True , то выполняется блок кода внутри цикла.

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

А теперь напишем небольшую программу. Это простой цикл, выводящий в консоль числа от 1 до 10.

Как вы можете заметить, тело цикла выполняется, пока x меньше или равно 10. Если вы присвоите x значение 20, то цикл не запустится вообще.

Вывод будет следующим:

Цикл do-while

Есть две вариации цикла while . Первая — непосредственно сам while , вторая — do-while . Разница заключается в том, что do-while запустится хотя бы один раз.

Цикл while может не запуститься вообще, если условие не будет истинным изначально. Do-while — напротив. Тут сначала выполняется тело цикла, и только потом происходит проверка условия.

Цикл do-while реализован в большинстве языков программирования, но в Python такого оператора нет. Тем не менее, его можно с легкостью имитировать — например, с помощью функций.

Давайте напишем код, имитирующий цикл do-while . Все нужные инструкции мы поместим внутри функции.

Эта программа запускает run_commands() еще до цикла while . Но сам цикл while не запустится: x равен 20.

Оператор else

Если вы хотите выполнить блок кода, когда проверка условия возвращает False , — добавьте оператор else .

Добавим в наш код else . Внутри этого блока напишем код, который будет выводить в консоль Готово . Выполнится этот блок только после того, как в консоль выведутся числа от 1 до 10.

Эта программа выведет в консоль числа от 1 до 10. Как только x станет равно 11, результатом проверки условия будет False . После этого выполнится блок кода else .

Однострочное объявление while

Если внутри цикла while у вас только одна строка — можно воспользоваться однострочным вариантом. Делается это так:

Будьте осторожны — этот цикл бесконечный.

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

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

Этот цикл — бесконечный. Внутри цикла нет команды, которая изменяет значение x . Поэтому условие x >= 1 всегда истинно. Именно из-за этого цикл будет запускаться бесконечное количество раз.

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

Управление циклом

С циклом разобрались. Наконец мы можем перейти к операторам его управления.

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

Break

Этот оператор позволяет завершить цикл, если проверка условия возвращает True .

Выполнение цикла прекращается, когда x становится равно 5 — даже если x больше или равно 1.

Continue

Допустим, вам нужно пропустить итерацию цикла, если выполняется какое-то условие. Но цикл вы не хотите завершать до тех пор, пока проверка его условия не вернет False .

В этом случае вам нужно использовать ключевое слово continue :

Как видите, цикл выводит в консоль все числа от 1 до 10 кроме 5. Когда x становится равен 5, оставшаяся часть команд не выполняется, а начинается следующая итерация цикла.

Источник

почему этот цикл python while не работает в программе?

Я пытаюсь запустить программу в следующей статье:

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

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

Кажется, что он игнорирует остальную часть кода в цикле while (часть оператора if).

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

Почему оператор if запускается здесь, а не в основной программе?

Обновление: Извините, я понимаю, что, возможно, не очень ясно, в чем проблема.

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

Ниже приведен код всей программы из статьи в ссылке. Включает в себя весь код в программе. Если я запускаю эту основную программу, цикл while не использует оператор if. Кажется, он просто выходит из цикла сразу после того, как я выбрал 1, 2 или 3 (любое другое число должно выйти из цикла в любом случае).

Вот ссылка на снимок экрана, показывающий, как выглядит консоль после того, как я выбрал номер 1 для этой опции.

Источник

Как работает цикл «while» в Python

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

Циклы в языке Python представлены двумя основными конструкциями: while и for . Цикл while считается универсальным, в то время как for нужен для обхода последовательности поэлементно. Более подробную информацию о цикле for вы можете прочитать здесь .

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

Немного информатики

Как было отмечено выше,

Цикл – это управляющая конструкция, которая раз за разом выполняет серию команд (тело цикла) до тех пор, пока условие для выполнения является истинным.

Напишем на псевдокоде классическую схему:

повторять, пока условие начало цикла последовательность инструкций конец цикла

Конструкция начинает свою работу с проверки условия, и, если оно истинно, запускается цикл. На каждой новой итерации (единичный проход по циклу) условие продолжения проверяется вновь. Таким образом, последовательность инструкций будет исполняться до тех пор, пока это условие, наконец, не окажется ложным.

Циклы, как механизм программирования, нужны, главным образом, для упрощения написания кода. Вполне очевидно, что создавать программу, выполняющую определённую операцию для каждой точки 4К дисплея в отсутствии циклов – это вручную повторять описание нужной команды 4096*2160 раз. 🤔 Много? Безусловно.

Применение в этой задаче всего одного цикла позволит сократить длину кода, как минимум, на 6 порядков. А если представить, что ту же самую программу нужно переписать для 8К монитора, то, вместо изменения всего одной инструкции в счетчике цикла, вам придётся дописывать ещё пару десятков миллионов строк кода, что является попросту недопустимым по своей величине и трудозатратам объёмом.

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

Синтаксис цикла while

В самом простом случае, цикл while в python очень похож по своей структуре на условную конструкцию с if :

import time a = 1 if a == 1: print(«I’m the condition») while a == 1: print(«I’m the loop») time.sleep(1)

И в том и в другом случае, блок кода внутри (инструкция print(‘…’) ) будет исполнен тогда и только тогда, когда условие (a == 1) будет иметь значение True . Вот только в конструкции с if , при успешной проверке, вывод на экран будет выполнен всего один раз, а в случае с while фраза «I’m the loop» будет печататься бесконечно.

Такое явление называется бесконечным циклом . У них есть свои определенные смысл и польза, но их мы разберём чуть позже, поскольку чаще всего цикл всё-таки должен как-то заканчиваться. И вполне логично, что для его завершения нужно произвести определенные манипуляции с условием.

Переменная a , в примере выше, называется управляющей (или счетчик). При помощи таких переменных можно контролировать момент выхода из цикла. Для этого их следует сравнить с каким-либо значением.

count = 1 # фиксируем начальное значение while count 1 2 3 4 5 6 7 8 9 10

В Python есть и более сложные, составные условия. Они могут быть сколь угодно длинными, а в их записи используются логические операторы ( not , and , or ):

dayoff = False sunrise = 6 sunset = 18 worktime = 12 # пример составного условия while not dayoff and sunrise You have 6 hours to work You have 5 hours to work You have 4 hours to work You have 3 hours to work You have 2 hours to work You have 1 hours to work Finally it’s over!

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

num = 0 contol = True while num

Стоит иметь в виду, что использование неинициализированной переменной в качестве управляющей цикла обязательно приведёт к возникновению ошибки:

# unknown до этого нигде не была объявлена while unknown: print(‘+’) > Traceback (most recent call last): while unknown: NameError: name ‘unknown’ is not defined

Несколько примеров использования цикла while

Идея циклов while проста: требуется определенное количество раз сделать что-то? Заведи счётчик и уменьшай/увеличивай его в теле цикла.

x = 20 y = 30 while x 20 23 26 29

Своеобразным счётчиком может быть даже строка:

word = «pythonchik» while word: print(word, end=» «) # на каждой итерации убираем символ с конца word = word[:-1] > pythonchik pythonchi pythonch pythonc python pytho pyth pyt py p

break и continue

Оператор break заставляет интерпретатор прервать выполнение цикла и перейти к следующей за ним инструкции:

counter = 0 while True: if counter == 10: break counter += 1

Цикл прервётся после того, как значение счетчика дойдёт до десяти.

Существует похожий оператор под названием continue , однако он не прекращает выполнение всей конструкции, а прерывает лишь текущую итерацию, переходя затем в начало цикла:

# классический пример вывода одних лишь чётных значений z = 10 while z: z -= 1 if z % 2 != 0: continue print(z, end=» «) > 8 6 4 2 0

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

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

В реальной практике, else в циклах применяется нечасто. Такая конструкция отлично сработает, когда будет необходимо проверить факт выполнения всех итераций цикла.

👉 Пример из практики : проверка доступности всех выбранных узлов сети

Например, обойти все узлы локальной сети и

def print_prime_list(list_of_numbers: list) -> None: «»» функция выведет список чисел, если каждое из этих чисел является простым «»» number_count = len(list_of_numbers) # количество чисел i = 0 while i print_prime_list([11, 113, 199]) > [11, 113, 199]

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

while true или бесконечный цикл

В большинстве случаев, бесконечные циклы появляются из-за логических ошибок программиста (например, когда условие цикла while при любых вариантах равно True ). Поэтому следует внимательно следить за условием, при котором цикл будет завершаться.

Однако вы некоторых случая бесконечный цикл делают намерено:

  1. Если нужно производить какие-то действия с интервалом, и выходить из цикла лишь в том случае, когда внутри тела «зашито» условие выхода. Пример : функция, которая возвращает connection базы данных. Если связь с базой данных отсутствует, соединение будет пытаться (в цикле) установиться до тех пор, пока не установится.
  2. Если вы пишете полноценный демон, который продолжительное время висит как процесс в системе и периодически производит какие-то действия. В таком случае остановкой цикла будет прерывание работы программы. Пример : скрипт, который раз в 10 минут «пингует» IP адреса и пишет в лог отчет о доступности этих адресов.

💁‍♂️ Совет : в бесконечных циклах рекомендуется ставить таймаут выполнения после каждой итерации, иначе вы очень сильно нагрузите CPU :

import time while True: print(«Бесконечный цикл») time.sleep(1) > Бесконечный цикл Бесконечный цикл Бесконечный цикл Traceback (most recent call last): File «main.py», line 5, in time.sleep(1) KeyboardInterrupt Aborted!

Код был прерван комбинацией клавиш ^Ctrl + C . Иначе цикл продолжался бы бесконечно.

Best practice

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

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

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

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

Вложенные while циклы встречаются не так часто, как их братья (или сестры) for , что, однако не мешает им быть полезными. Простой пример – выведем на экран таблицу умножения:

q = 1 while q 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 3 6 9 12 15 18 21 24 27 4 8 12 16 20 24 28 32 36 5 10 15 20 25 30 35 40 45 6 12 18 24 30 36 42 48 54 7 14 21 28 35 42 49 56 63 8 16 24 32 40 48 56 64 72 9 18 27 36 45 54 63 72 81

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

Как выйти с помощью break из двух циклов

В случае вложенных циклов, оператор break завершает работу только того цикла, внутри которого он был вызван:

i = 100 j = 200 while i J 200 J 201 J 202 # здесь видно, что внутренний цикл прерывается, но внешний продолжает работу I 100 I 101 I 102 I 103 I 104

В Python не существует конструкций, которая прерывала бы сразу несколько циклов. Но есть как минимум 3 способа, которыми можно реализовать данное поведение:

Способ №1 Используем конструкцию for . else . :

def same_values_exists(list_1: list, list_2: list) -> None: «»» функция выводит на экран первые совпавшие числа из списков «»» for i in list_1: for j in list_2: print(«compare: «, i, j) if i == j: print(f»found «) break else: continue break same_values_exists([0, 10, -2, 23], [-2, 2]) > compare: 0 -2 compare: 0 2 compare: 10 -2 compare: 10 2 compare: -2 -2 found -2

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

Способ №2 Через создание дополнительного флага:

def same_values_exists(list_1: list, list_2: list) -> None: «»» функция выводит на экран первые совпавшие числа из списков «»» break_the_loop = False for i in list_1: for j in list_2: print(«compare: «, i, j) if i == j: print(f»found «) break_the_loop = True break if break_the_loop: break same_values_exists([0, 10, -2, 23], [-2, 2]) > compare: 0 -2 compare: 0 2 compare: 10 -2 compare: 10 2 compare: -2 -2 found -2

Внешний цикл был прерван вслед за внутренним. Дело сделано!

Способ №3 Если циклы находятся в функции (как в нашем примере), достаточно просто сделать return :

def same_values_exists(list_1: list, list_2: list) -> None: «»» функция выводит на экран первые совпавшие числа из списков «»» for i in list_1: for j in list_2: print(«compare: «, i, j) if i == j: print(f»found «) return same_values_exists([0, 10, -2, 23], [-2, 2]) > compare: 0 -2 compare: 0 2 compare: 10 -2 compare: 10 2 compare: -2 -2 found -2

Источник

Оцените статью