Как сделать цикл while в tkinter

Добавил пользователь Валентин П.
Обновлено: 05.10.2024

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

В Python есть две основные конструкции цикла: цикл for и while .

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

Python while Loop

В while цикл выполняет свои операторы неизвестное число раз до тех пор , как данное условие имеет значение true .

Python во while цикла имеет следующий вид:

Оператор while начинается с ключевого слова while , за которым следует условное выражение.

EXPRESSION оценивается перед выполнением операторов. Если условие true , выполняется STATEMENT(S) . В противном случае, если условие оценивается как false , цикл завершается, и управление программой передается следующей инструкции.

Блок STATEMENT(S) начинается с отступа и заканчивается первой строкой без отступа. Большинство людей предпочитают использовать отступы с четырьмя или двумя пробелами. Официальное руководство по стилю для кода Python рекомендует использовать 4 пробела для каждого уровня отступа и избегать смешивания использования табуляции и пробелов для отступа.

Давайте посмотрим на следующий пример кода, который увеличивает и печатает текущее значение переменной i если оно меньше пяти:

Цикл вторника повторяется, пока i меньше или равно пяти. Он выдаст следующий результат:

Python поддерживает стандартные операции сравнения:

  • a == b — Истинно, если a и b равны.
  • a != b — Верно, если a и b не равны.
  • a > b — Истинно, если a больше b .
  • a >= b — Истинно, если a равно или больше b .
  • a — Истинно, если a меньше b .
  • a — Истинно, если a равно или меньше b .

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

break и continue утверждения

break и continue заявления позволяют контролировать while выполнение цикла.

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

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

Оператор continue завершает текущую итерацию цикла и передает управление программой следующей итерации цикла.

В следующем примере, как только текущий повторяемый элемент равен 2 оператор continue заставит выполнение вернуться к началу цикла и продолжить следующую итерацию.

else пункт

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

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

Теперь Лью посмотрим , что происходит , когда вы break из петли:

Оператор внутри предложения else не выполняется, потому что выражение не имеет значения false :

else пункт с в while цикла не часто используется. Одна из распространенных ситуаций — это когда вы ожидаете выхода из цикла, и если цикл продолжает выполняться до тех пор, пока условие не станет false , вы можете выполнить некоторый оператор или функцию.

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

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

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

Другой способ прервать бесконечный цикл — нажать CTRL+C

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

Выводы

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

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

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

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

Основные типы циклов

В языке Python существуют 2 основных цикла: while и for. Рассмотрим подробно работу каждого из них.

Цикл while

Цикл while — один из самых распространенных в Python. Он позволяет воспроизводить элемент кода снова и снова, пока заданное условие остается верным (true). Чтобы цикл правильно работал, нужен фрагмент кода, который вы хотите использовать повторно, условие true или false и ключевое слово while .

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

Цикл for

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

Так выглядит код с использованием цикла for :

Функция range

Функция range используется при работе со строками цикла for, а также для создания последовательностей чисел. Рассмотрим на примере кода, как эта функция работает с целыми числами:

Для работы функции range указываются 2 или 3 числа:

  • Первое число — start — с него функция начинает отсчет.
  • Второе число называется stop и обозначает конец выбранного промежутка чисел. В примере это цифра 10, поэтому функция не может показать число больше 10.
  • Третье число называется step : это шаг, который делает функция при переборе чисел. Можно не указывать шаг, и тогда в нашем примере функция покажет все числа от 5 до 10.

Заданный пример начинается с 5, к этому числу прибавляется по 2, пока мы не упремся в потолок функции. Так, получается следующая последовательность чисел:

Range также можно использовать с отрицательными числами и выполнять вычитание. Например:

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

Циклы while и for можно как использовать по отдельности, так и комбинировать. Можно вложить цикл for внутрь внешнего цикла while и наоборот, а также вкладывать циклы одного вида друг в друга.

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

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

Рассмотрим на примере вложенного цикла for , как это работает на практике:

По результату выполнения кода видно, что программа завершает первую итерацию внешнего цикла на цифре 1 и затем запускает завершение внутреннего цикла, печатая a, b, c. Как только внутренний цикл завершен, программа возвращается к началу внешнего цикла и печатает цифру 2, а после снова воспроизводит вложенный цикл.

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

Вложенный цикл while выглядит так:

Выход из цикла

Если вам нужно пропустить какую-то часть цикла, то прервать его выполнение можно с помощью двух операторов: break или continue .

Break позволяет выйти из вложенного цикла сразу во внешний:

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

Оператор continue позволяет вернуться ко внешнему циклу, полностью пропуская вложенный цикл. В коде continue ставится в конце внешнего цикла:

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

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

В программировании есть два типа итераций: неопределенные и определенные:

В этом уроке вы:

  • Узнаете о цикле while , конструкции управления Python, используемой для неопределенной итерации
  • Узнаете, как преждевременно выйти из цикла или итерации цикла
  • Исследуете бесконечные циклы

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

Цикл while

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

Характер элементарного цикла while показан ниже:

statement(s) представляет собой блок для многократного выполнения, часто называется телом цикла. Обозначается отступом, как в операторе if .

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

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

Когда встречается while цикл, expr сначала оценивается в логическом контексте. Если это правда, тело цикла выполняется. Затем expr проверяется снова, и если это опять правда, то выполняется снова. Это продолжается до тех пор, пока expr станет ложью, после чего выполнение программы переходит к первому оператору после тела цикла.

Рассмотрим этот цикл:

Вот что происходит в этом примере:

  • n изначально равно 5. Выражение в while заголовке оператора n > 0 имеет значение true, поэтому тело цикла выполняется. Внутри тела цикла n уменьшается на 1 до 4 и затем печатается.
  • Когда тело цикла завершено, выполнение программы возвращается к началу цикла, и выражение проверяется снова. Оно все еще true, поэтому тело выполняется снова и 3 печатается.
  • Это продолжается до тех пор, пока не n станет 0. В этот момент, когда выражение проверяется, оно ложно, и цикл завершается.

Обратите внимание, что управляющее выражение цикла while проверяется первым, прежде чем еще что‑то произойдет. Если начинать с false, тело цикла не будет выполнено вообще:

В приведенном выше примере, когда встречается цикл, n равно 0. Управляющее выражение n > 0 уже ложно, поэтому тело цикла никогда не выполнится.
Вот еще один while цикл, включающий список, а не числовое сравнение:

Операторы Python break и continue

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

  • Оператор break немедленно завершает цикл. Выполнение программы продолжается до первого оператора, следующего за телом цикла.
  • Оператор continue немедленно завершает текущую итерацию цикла. В основном используется для пропуска итерации, или переходу к следующей итерации.

Различие между break и continue показано на рисунке:


Это файл скрипта с именем break.py который демонстрирует работу оператора break :

Запуск break.py из интерпретатора командной строки приводит к следующему результату:

Когда n станет равно 2, break оператор выполняется, цикл полностью завершается, и выполнение программы переходит к print() оператору.
Следующий скрипт continue.py идентичен, за исключением continue оператора вместо break:

Вывод continue.py выглядит так:

На этот раз, когда n равно 2, continue оператор вызывает завершение этой итерации.
Таким образом, 2 не печатается. Выполнение возвращается к началу цикла, условие переоценивается, и оно все еще выполняется. Цикл возобновляется, завершается, когда n становится 0, как ранее.

Условный оператор else

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

additional_statement(s , указанный в условии else , будет выполняться , когда прервётся цикл while .

В последнем случае, без else , additional_statement(s) будет выполняться после завершения while цикла, несмотря ни на что.

Рассмотрим следующий пример:

В этом случае цикл повторялся до тех пор, пока условие не стало false: n стало 0, а условие n > 0 стало ложным. Поскольку цикл прожил свою естественную жизнь, так сказать, условие else было выполнено. Теперь обратите внимание на разницу здесь:

Этот цикл преждевременно завершается с помощью break , поэтому else не выполняется.

Может показаться, что значение слова else не совсем соответствует while циклу, а также if оператору. Гвидо ван Россум એ , создатель Python, сказал, что, если бы он начал сначала, то исключил бы условие else цикла while из языка.

Какая-нибудь из следующих интерпретаций может помочь сделать ее более понятной:

  • Думайте о заголовке цикла (while n > 0) как об if операторе (if n > 0), который выполняется снова и снова, и else выполняется, когда условие становится false.
  • Думайте об else , как если бы это был nobreak, поскольку следующий блок выполняется, если не был break .

Если вы не найдете ни одну из этих интерпретаций полезной, просто проигнорируйте их.

Когда может быть полезным else в цикле while ? Одна распространенная ситуация, если вы ищете в списке определенный элемент. Вы можете использовать break для выхода из цикла, если элемент найден, и else может содержать код, который должен быть выполнен, если элемент не найден:

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

Прежде всего, списки обычно обрабатываются с определенной итерацией, а не while циклом. Определенная итерация (for) рассматривается в следующем уроке.

Во-вторых, Python предоставляет встроенные способы поиска элемента в списке. Вы можете использовать in оператор:

list.index() метод также будет работать. Этот метод вызывает исключение ValueError, если элемент не найден в списке, поэтому для его использования необходимо понимать обработку исключений. В Python вы используете try оператор для обработки исключения. Пример приведен ниже:

Вы узнаете об обработке исключений позже.

Условие else с циклом while — это немного странное, редко встречающееся явление. Но не избегайте его, в некоторых ситуациях else может внести ясность в ваш код!

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

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

Рассмотрим этот пример:

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

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

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

Вот еще один вариант показанного выше цикла, который последовательно удаляет элементы из списка, .pop() пока он не станет пустым:

Когда a становится пустым, not a становится истинным, и break оператор выходит из цикла.

Вы также можете указать несколько break операторов в цикле:

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

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

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

Управляющие конструкции Python могут быть вложены друг в друга. Например, условные операторы if/elif/else могут быть вложенными:

Точно так же while цикл может содержаться в другом while цикле, как показано здесь:

Оператор break или continue , найденный во вложенных циклах, применяется к ближайшему охватывающему циклу:

Кроме того, while циклы могут быть вложены в if/elif/else операторы, и наоборот:

Однолинейные циклы while

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

Это работает только с простыми утверждениями, вы не сможете объединить два составных оператора в одну строку. Таким образом, вы можете указать while цикл в одной строке, как указано выше, и пишете if оператор в одной строке:

Но вы не можете сделать так:

Помните, что PEP 8препятствует нескольким утверждениям в одной строке. Поэтому, вам не желательно делать так очень часто.

Вывод

В этом блоке вы узнали о неопределенной итерации с помощью цикла Python while . Теперь вы можете:

  • Строить основные и сложные while циклы
  • Выполнить цикл с break и continue
  • Использовать else с while циклом
  • Разбираться с бесконечными циклами

Теперь вы должны хорошо понимать, как выполнить фрагмент кода повторно.
ОРИГИНАЛ СТАТЬИ

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

Цикл while

"While" переводится с английского как "пока". Но не в смысле "до свидания", а в смысле "пока имеем это, делаем то".

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

Это похоже на условный оператор if . Однако в случае циклических операторов их тела могут выполняться далеко не один раз. В случае if , если логическое выражение в заголовке возвращает истину, то тело выполняется единожды. После этого поток выполнения программы возвращается в основную ветку и выполняет следующие выражения, расположенные ниже всей конструкции условного оператора.

В случае while , после того как его тело выполнено, поток возвращается к заголовку цикла и снова проверяет условие. Если логическое выражение возвращает истину, то тело снова выполняется. Потом снова возвращаемся к заголовку и так далее.

Цикл завершает свою работу только тогда, когда логическое выражение в заголовке возвращает ложь, то есть условие выполнения цикла больше не соблюдается. После этого поток выполнения перемещается к выражениям, расположенным ниже всего цикла. Говорят, "происходит выход из цикла".

Рассмотрите блок-схему цикла while .

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

С циклом while возможны две исключительные ситуации:

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

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

Вспомним наш пример из урока про исключения. Пользователь должен ввести целое число. Поскольку функция input() возвращает строку, то программный код должен преобразовать введенное к целочисленному типу с помощью функции int() . Однако, если были введены символы, не являющиеся цифрами, то возникает исключение ValueError , которое обрабатывается веткой except . На этом программа завершается.

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

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

Примечание 1. Не забываем, в языке программирования Python в конце заголовков сложных инструкций ставится двоеточие.

Примечание 2. В выражении type(n) != int с помощью функции type() проверяется тип переменной n . Если он не равен int , то есть значение n не является целым числом, а является в данном случае строкой, то выражение возвращает истину. Если же тип n равен int , то данное логическое выражение возвращает ложь.

Примечание 3. Оператор % в языке Python используется для нахождения остатка от деления. Так, если число четное, то оно без остатка делится на 2, то есть остаток будет равен нулю. Если число нечетное, то остаток будет равен единице.

Проследим алгоритм выполнения этого кода. Пользователь вводит данные, они имеют строковый тип и присваиваются переменной n . В заголовке while проверяется тип n . При первом входе в цикл тип n всегда строковый, то есть он не равен int . Следовательно, логическое выражение возвращает истину, что позволяет зайти в тело цикла.

Здесь в ветке try совершается попытка преобразования строки к целочисленному типу. Если она была удачной, то ветка except пропускается, и поток выполнения снова возвращается к заголовку while .

Теперь n связана с целым числом, следовательно, ее тип int , который не может быть не равен int . Он ему равен. Таким образом логическое выражение type(n) != int возвращает False , и весь цикл завершает свою работу. Далее поток выполнения переходит к оператору if-else, находящемуся в основной ветке программы. Здесь могло бы находиться что угодно, не обязательно условный оператор.

Вернемся назад. Если в теле try попытка преобразования к числу была неудачной, и было выброшено исключение ValueError , то поток выполнения программы отправляется в ветку except и выполняет находящиеся здесь выражения, последнее из которых просит пользователя снова ввести данные. Переменная n теперь имеет новое значение.

После завершения except снова проверяется логическое выражение в заголовке цикла. Оно даст True , так как значение n по-прежнему строка.

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

Рассмотрим следующий пример:

Сколько раз "прокрутится" цикл в этой программе, то есть сколько итераций он сделает? Ответ: 5.

Сначала переменная i равна 0. В заголовке цикла проверяется условие i , и оно истинно. Тело цикла выполняется. В нем меняется значение i , путем добавления к нему единицы.

Теперь переменная i равна 1. Это меньше пяти, и тело цикла выполняется второй раз. В нем i меняется, ее новое значение 2.

Два меньше пяти. Тело цикла выполняется третий раз. Значение i становится равным трем.

Три меньше пяти. На этой итерации i присваивается 4.

Четыре по прежнему меньше пяти. К i добавляется единица, и теперь ее значение равно пяти.

Далее начинается шестая итерация цикла. Происходит проверка условия i . Но поскольку теперь оно возвращает ложь, то выполнение цикла прерывается, и его тело не выполняется.

"Смысловая нагрузка" данного цикла – это последовательное вычитание из переменной total вводимых чисел. Переменная i в данном случае играет только роль счетчика итераций цикла. В других языках программирования для таких случаев предусмотрен цикл for , который так и называется: "цикл со счетчиком". Его преимущество заключается в том, что в теле цикла не надо изменять переменную-счетчик, ее значение меняется автоматически в заголовке for .

В языке Python тоже есть цикл for . Но это не цикл со счетчиком. В Питоне он предназначен для перебора элементов последовательностей и других сложных объектов. Данный цикл и последовательности будут изучены в последующих уроках.

Для while наличие счетчика не обязательно. Представим, что надо вводить числа, пока переменная total больше нуля. Тогда код будет выглядеть так:

Сколько раз здесь выполнится цикл? Неизвестно, все зависит от вводимых значений. Поэтому у цикла со счетчиком известно количество итераций, а у цикла без счетчика – нет.

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

Примечание 1. Не обязательно в выражениях total = total - n и i = i + 1 повторять одну и ту же переменную. В Python допустим сокращенный способ записи подобных выражений: total -= n и i += 1 .

Примечание 2. При использовании счетчика он не обязательно должен увеличиваться на единицу, а может изменяться в любую сторону на любое значение. Например, если надо вывести числа кратные пяти от 100 до 0, то изменение счетчика будет таким i = i - 5 , или i -= 5 .

Примечание 3. Для счетчика не обязательно использовать переменную с идентификатором i . Можно назвать переменную-счетчик как угодно. Однако так принято в программировании, что счетчики обозначают именами i и j (иногда одновременно требуются два счетчика).

Практическая работа

Используя цикл while , выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как ** . Фрагмент вывода:

Примеры решения и дополнительные уроки в android-приложении и pdf-версии курса

Читайте также: