Цикл пока в питоне

Цикл пока в питоне

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

Практических примеров цикла можно назвать много, например:

  • Просмотреть все файлы в папке (и удалить старые)
  • Просканировать все ссылки на сайте (и собрать все статьи)
  • Посчитать сложные проценты (прибавляя % каждый раз к предыдущему значению)
  • Просканировать все сервера в интернете
  • Бесконечно ждать ответа от другого компьютера или устройства
  • Получить список значений (например, торговых пар на бирже) и выбрать из них только активные
  • Заставлять бота работать бесконечно, например торговать на бирже или добавлять друзей в твиттере/инстаграмме
  • И всякое разное другое

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

while

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

Фактически, я говорю интерпретатору Питона компьютеру:

  1. Когда дойдешь до выполнения этого кода, проверь, является ли то, что написано в строчке после while истинным значением.
  2. Если да, то
  1. выполни все, что находится в блоке после него, отделенное отступами слева (тело цикла)
  2. вернись снова к пункту 1
  • Если нет, то выполняй все, что находится после тела цикла
  • Если вы запустите пример, то увидите, что примерно бесконечное количество раз на экран выводятся фразы «Я тут», «Привет привет»

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

    Выход по изменению истинности условия.

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

    Давайте начнем с простой проверки условия. Например, истинно ли то, что число 3 больше 5? А то, что 5 больше 3?

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

    И оно также работало бы бесконечно, потому 3 всегда будет меньше 5 (по крайней мере, в математике).

    Однако, если использовать переменные, можно их менять в теле цикла, и выходить из него, когда истинность изменится. Возьмем для примера хулигана Петю, который выбивает зубы у отличника Васи. Петя планирует оставить Васе хотя бы 3 зуба, что бы тот мог есть (и смешно фепелявить). Нет-нет, мы не поддерживаем Петю!

    Изначально мы объявили переменную vasyas_teeth, где указали, что у Васи 32 зуба (он же отличник, все зубы мудрости вылезли заранее). Каждый раз Петя проверяет, что осталось больше зубов, чем он умеет считать 3, и выбивает еще один. Когда зубов становится не больше трех, Петя прекращает свои противоправные действия (и едет зону на малолетку, хотя это другая история).

    Читайте также:  Полное удаление файлов андроид

    Вот как-то так всё:

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

    Выход по команде

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

    Давайте подключим модуль random для генерации псевдослучайных событий, random.random() возвращает случайное число от 0 до 1, после каждого выбитого зуба Петя озирается, и, если random.random() > 0.8 (т.е. с вероятностью 0.2, они же 20%) появляется кто-то, Петя убегает. Хулиганы, они такие. Теперь Пете намного сложное закончить начатое.

    В этом примере появилось ключевое слово break.

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

    Пропуск шага цикла

    Еще есть ключевое слово continue, оно позволяет сразу перейти к следующему шагу цикла. Допустим, зуб выбивается с вероятностью 35%, поэтому удар засчитывать надо, а зуб вычитать – нет. Давайте это реализуем.

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

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

    Теперь возможны ситуации, когда Вася вообще не пострадает. И это правильно.

    Заключение:

    Помимо while в питоне есть циклы for, которые итерируются по последовательностям, и специальные слова, например range, для генерации последовательностей. Рассмотрим их в следующих статьях цикла.

    Практически любой язык программирования содержит вложенные конструкции цикла, причём в большинстве случаев таких конструкций несколько. Python — не исключение. В списке техдокументации для Python есть 2 типа циклов: — цикл while, — цикл for.

    Циклы необходимы, если нам надо что-либо сделать множество раз, реализовать последовательность одинаковых действий. Речь идёт о выполнении какой-нибудь операции либо списков операций снова и снова. Циклы максимально упрощают этот процесс. Если говорить о вышеназванных циклах, то цикл for многие считают более популярным. С него и начнём.

    Цикл for в Python

    Как было сказано выше, использование цикла целесообразно, если нужно повторить действие n-ное количество раз, выполнить некую последовательность одних и тех же операций. Рассмотрим это на примере. Возьмём встроенную в Python 3 функцию range , которая создаёт список длиной в «n» элементов (в Python 2-й версии для этого надо было использовать функцию xrange — тоже генератор чисел, но не такой ресурсоёмкий).

    Читайте также:  Технические характеристики телефона сяоми

    Как видим, функция в Python взяла целое число, а вернула объект range . Также она принимает конечное значение, начальное значение и значение шага. Приведём ещё пару примеров:

    В первом примере мы передаём начальное и конечное значение, при этом range возвращает список из чисел последовательности, начиная с начального, заканчивая последним (но не включая последний). Таким образом, при запросе 5-10 мы получаем 5-9 в прямом, а не обратном порядке.

    Во 2-м случае используем функцию списка (list). В результате возвращается каждый 2-й элемент между 1-10 (наша последовательность будет равна 1, 3 и т. п., разумеется, также в прямом, а не обратном порядке).

    Закономерный вопрос: а что функция range будет делать с использованием цикла? Давайте посмотрим:

    Что в данном случае произошло? Чтобы понять это, расшифруем наш код: 1. Мы вводим число для каждого числа в диапазоне 5. 2. Мы знаем, что при вызове range со значением 5 будет создан вложенный список из пяти элементов. 3. Каждый раз функция, проходя через цикл for, выведет каждый из этих элементов по списку.

    Вышеупомянутый цикл for м. б. эквивалентом следующего:

    Здесь range просто выдаёт меньший результат.

    Что ещё «умеет» цикл for?

    Цикл for способен обходить любой итератор Python. Мы видели особенности действия цикла при обработке списка и последовательности. А теперь взглянем, можно ли его использовать для выполнения итерации со словарём:

    Если использовать for в словаре, легко заметить, что он перебирает ключи автоматически. К примеру, не нужно указывать for в a_dict.keys() (хотя это тоже работает). Python делает только то, что необходимо. Да, ключи выводятся в несколько другом порядке, который отличен от указанного в словаре. Однако словари не упорядочены, поэтому можно использовать итерацию над ними, а ключи при этом м. б. в любом порядке. Если вы знаете, что ключи можно отсортировать, это лучше сделать до итерации. Чтобы увидеть, как это работает, немного изменим словарь:

    Результат использования данного цикла for в Python следующий:

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

    Итак, получен доступ к ключам, хранимым в keys. Мы сортируем список, после чего нужно использовать цикл for в нём. Чтобы сделать процесс интереснее, попробуем использовать цикл for в функции range , однако для этого потребуется вывести лишь целые числа. Дабы это осуществить, придётся использовать условный оператор, а не параметр шага range, что делается так:

    Читайте также:  Что пишется сначала фамилия или инициалы

    Результат работы цикла for таков:

    Возможно, не все поняли, что происходит и откуда в цикле знак процента. Если кто подзабыл, в Python, % — это оператор модуля. Когда его используют, возвращается остаток. При делении целого числа на 2, остатка, разумеется, нет.

    После разговора о цикле for пришла пора познакомиться с циклом while.

    Цикл while

    Цикл while хорошо использовать для повторений частей кода. Здесь вместо зацикливания n-е количество раз цикл будет работать, пока не исполнится определённое условие.

    Пример работы цикла while в Python:

    Цикл while по сути — это один из вложенных условных операторов. Если говорить о коде цикла, который мы решили использовать выше, на экран будет выводиться переменная i до тех пор, пока она меньше десяти. То есть с запуском этого кода в Python вы получите список от 0 до 9, сформированный в прямом, а не обратном порядке, причём каждая цифра выведется в отдельной строке, и цикл завершится.

    Однако, удалив часть кода с увеличением значения i, мы получим бесконечный цикл, а это уже плохо. Бесконечные циклы называют логическими ошибками, которых лучше избегать. Но это не значит, что в таком случае нельзя будет «вырваться» из цикла. Можно, если использовать вложенные функции в Python, например, break :

    Узнать больше про Python-циклы вы всегда сможете на наших курсах. Изучайте циклы, списки, функции, классы и другие нюансы «Пайтона» вместе с OTUS!

    Бесплатные уроки для начинающих по изучению языка программирования Python. Будут рассмотрены: Django и парсинг на Python-e с помощью библиотек

    12 октября 2012 г.

    Циклы

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

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

    Инструкция while является самой универсальной конструкцией организации итераций в языке Python. Проще говоря, она продолжает выполнять блок инструкций (обычно с отступами) до тех пор, пока условное выражение продолжает возвращать истину.

    Общий формат:

    while : # Условное выражение test
    # Тело цикла
    else: # Необязательная часть else
    # Выполняется, если выход из цикла
    # производится не
    # инструкцией break

    Пример:


    >>> while True:
    . print(‘Type Ctrl-C to stop me!’)

    Пока условие возвращает истину на экран будет выводится " Type Ctrl-C to stop me!", если нажать Ctrl-C тогда мы прекратим выполнение цикла, тем самым задав ему ложное значение False.
    ——————————————————————

    >>> x = ‘spam’
    >>> while x: # Пока x не пустая строка
    . print(x, end=’ ‘)
    . x = x[1:] # Вырезать первый символ из x
    .
    spam pam am m

    Aргумент end=’ ‘ , который обеспечивает вывод значений в одну строку через пробел.

    ——————————————————————

    В языке Python отсутствует цикл «do until», его можно имитировать, добавив в конец тела цикла условную инструкцию и инструкцию break:
    while True:
    . тело цикла.
    if exitTest(): break
    ——————————————————————

    Ссылка на основную публикацию
    Adblock detector