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

Обзор определенной итерации в программировании

Определенные итерационные циклы часто называют  циклами, потому что  это ключевое слово, которое используется для их представления почти на всех языках программирования, включая Python.

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

Цикл числового диапазона

Самый простой  цикл – это простой числовой оператор диапазона с начальными и конечными значениями. Точный формат зависит от языка, но обычно выглядит примерно так:

Здесь тело цикла выполняется десять раз. Переменная  принимает значение  на первой итерации,  на второй и т. д. Этот вид  цикла используется в языках BASIC, Algol и Pascal.

Цикл с тремя выражениями

Другая форма  цикла, популярная на языке программирования C, состоит из трех частей:

  • Инициализация
  • Выражение, указывающее конечное условие
  • Действие, которое нужно выполнить в конце каждой итерации.

Этот тип цикла имеет следующую форму:

Техническое примечание: на языке программирования C  увеличивает значение переменной . Это примерно эквивалентно  в Python.

Этот цикл интерпретируется следующим образом:

  • Инициализировать  в .
  • Продолжать цикл до тех пор, пока .
  • Увеличение на  после каждой итерации цикла.

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

Цикл на основе коллекции или итератора

Этот тип цикла перебирает коллекцию объектов, а не указывает числовые значения или условия:

Каждый раз в цикле переменная  принимает значение следующего объекта в . Этот тип  цикла, пожалуй, наиболее обобщенный и абстрактный. Perl и PHP также поддерживают этот тип цикла, но он вводится ключевым словом  вместо .

Функция range()

Теперь пришло время познакомиться с встроенной в Python функцией range(). «range» переводится как «диапазон». Она может принимать один, два или три аргумента. Если задан только один, то генерируются числа от 0 до указанного числа, не включая его. Если заданы два, то числа генерируются от первого до второго, не включая его. Если заданы три, то третье число – это шаг. Рассмотрим случай с одним аргументом:

for number in range(5):

    print(number)
for number in , 1, 2, 3, 4:

    print(number)

Напечатаются числа от 0 до 4. Это связано с тем, что функция range с одним аргументом генерирует диапазон от 0 до n-1, где n — это переданный аргумент.

Передадим в функцию два аргумента: 5 и 10. В этом случае range cгенерирует последовательность чисел от 5 до 9.

for el in range(5,10,2):

    print(el)

Если передать в range три аргумента: 5, 10, 2, то мы получим последовательность от 5 до 10 с шагом в 2

for el in range(5,10):

    print(el)

Цикл while

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

Python

i = 0
while i < 10:
print(i)
i = i + 1

1
2
3
4

i=

whilei<10

print(i)

i=i+1

Цикл while является своего рода условным оператором. Вот что значит этот код: пока переменная i меньше единицы, её нужно выводить на экран. Далее, в конце, мы увеличиваем её значение на единицу. Если вы запустите этот код, он выдаст от 0 до 9, каждая цифра будет в отдельной строке, после чего задача будет выполнена. Если вы удалите ту часть, в которой мы увеличиваем значение i, то мы получим бесконечный цикл. Как правило – это плохо. Бесконечные циклы известны как логические ошибки, и их нужно избегать. Существует другой способ вырваться из цикла, для этого нужно использовать встроенную функцию break. Давайте посмотрим, как это работает:

Python

while i < 10:
print(i)

if i == 5:
break

i += 1

1
2
3
4
5
6
7

whilei<10

print(i)

ifi==5

break

i+=1

В этой части кода мы добавили условное выражение для проверки того, равняется ли когда-либо переменная i цифре 5. Если нет, тогда мы разрываем цикл. Как вы видите в выдаче кода, как только значение достигает пяти, код останавливается, даже если мы ранее указали while продолжать цикл, пока переменная не достигнет значения 10

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

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

Python

i = 0

while i < 10:
if i == 3:
i += 1
continue

print(i)
if i == 5:
break

i += 1

1
2
3
4
5
6
7
8
9
10
11
12

i=

whilei<10

ifi==3

i+=1

continue

print(i)

ifi==5

break

i+=1

Слегка запутанно, не так ли? Мы добавили второе условное выражение, которое проверяет, не равняется ли i трем. Если да, мы увеличиваем переменную и переходим к следующему циклу, который удачно пропускает вывод значения 3 на экран. Как и ранее, когда мы достигаем значения 5, мы разрываем цикл. Существует еще одна тема, касающаяся циклов, которую нам нужно затронуть – это оператор else.

Функция range()

Теперь пришло время познакомиться со встроенной в Python функцией . «Range» переводится как «диапазон». Она может принимать один, два или три аргумента. Их назначение такое же как у функции из модуля . Если задан только один, то генерируются числа от 0 до указанного числа, не включая его. Если заданы два, то числа генерируются от первого до второго, не включая его. Если заданы три, то третье число – это шаг.

Однако, в отличие от , функция генерирует не одно случайное число в указанном диапазоне. Она вообще не генерирует случайные числа. Она генерирует последовательность чисел в указанном диапазоне. Так, сгенерирует последовательность 5, 6, 7, 8, 9, 10. Однако это будет не структура данных типа «список». Функция производит объекты своего класса – диапазоны:

>>> a = range(-10, 10)
>>> a
range(-10, 10)
>>> type(a)
<class 'range'>

Несмотря на то, что мы не видим последовательности чисел, она есть, и мы можем обращаться к ее элементам:

>>> a
-10
>>> a
-5
>>> a
5
>>> a
9

Хотя изменять их нельзя, так как, в отличие от списков, объекты относятся к группе неизменяемых:

>>> a = 100
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'range' object does not support 
item assignment

Примеры для использования уменьшения для цикла

В этих примерах мы будем знать о том, как мы можем уменьшить значение для цикла в Python. Мы будем объяснять все примеры с объяснением подробно.

1. Использование запуска, остановки индекса и шаг к снижению цикла в Python

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

#Start index and stop index value
startindex = 10
stopindex = 0
step = -1

#applying for loop
for i in range(startindex, stopindex, step):
    print(i)

Выход:

10
9
8
7
6
5
4
3
2
1

Объяснение:

  • Во-первых, мы назначаем значение индекса запуска больше, чем индекс остановки, то есть 10.
  • Затем мы присваивали значение индекса остановки как 0.
  • После этого значение STEP AS -1, в котором мы будем уменьшить значение в цикле.
  • А затем мы применили петлю с переменной «I» и Диапазон В качестве индекса запуска, остановите индекс и шаг.
  • Наконец, мы напечатали вывод.
  • Следовательно, мы можем увидеть вывод в обратном порядке.

2. Использование запуска, остановки и шаги для цикла только для уменьшения для цикла в Python

В этом примере мы установим значение начала индекса, STOP INDEX, STEP внутри только для цикла и см. Выход. Значение индекса запуска будет больше, чем индекс остановки, так что значение уменьшается. Давайте посмотрим на примере для понимания концепции подробно.

#applying for loop
for i in range(10,0,-2):
    print('output : ',i)

Выход:

output :  10
output :  8
output :  6
output :  4
output :  2

Объяснение:

  • В этом примере мы применили все значения внутри диапазона () функции для цикла.
  • Индекс Start устанавливается как 10, индекс остановки устанавливается как 0, и этап устанавливается AS -2, что будет уменьшить значение на 2 при каждой итерации до 0.
  • Наконец, мы напечатали значение переменной I.
  • Следовательно, вы можете увидеть вывод.

3. Использование функции обратной () для уменьшения цикла в Python

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

#applying reversed() function 
for i in reversed(range(5)):
    print('Output : ',i)

Выход:

Output :  4
Output :  3
Output :  2
Output :  1
Output :  0

Объяснение:

  • В этом примере мы применили функцию обратной (), которая используется для печати значений обратного завода.
  • Мы применили к цитируемой цикле и применяемой обратной функции () внутри него.
  • Внутри обратной функции () мы также применили функцию диапазона () с 5.
  • Наконец, мы напечатали значение переменной I.
  • Следовательно, вы можете увидеть вывод.

4. Используя во время и

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

#applying while and -= operation
s = 10
while s>0:
    print("Output : ",s)
    s -= 1

Выход:

Output :  10
Output :  9
Output :  8
Output :  7
Output :  6
Output :  5
Output :  4
Output :  3
Output :  2
Output :  1

Объяснение:

  • Во-первых, мы возьмем входную переменную S и назначаем ее значение, которое мы хотим уменьшить).
  • Затем мы будем применять при этом, что S> 0.
  • Внутри при этом условие, мы распечатаем значение s, а после печати значения мы будем уменьшить значение S на 1 (ы).
  • Следовательно, вы можете увидеть вывод.

Функция range

Функция range() создает объект, который внутри себя содержит итератор, выдающий элементы из диапазона, определяемого аргументами функции.

Создадим объект range.

>>> r = range(3)

Получим его итератор.

>>> ri = iter(r)

Используя next(), извлечем из него все элементы.

>>> next(ri)

>>> next(ri)
1
>>> next(ri)
2
>>> next(ri)
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    next(ri)
StopIteration

Через параметры функции range можно задать диапазон и шаг. Создадим range, генерирующий числа от 1 до 10 с шагом 3.

>>> ri2 = iter(range(1,10,3))
>>> next(ri2)
1
>>> next(ri2)
4
>>> next(ri2)
7
>>> next(ri2)
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    next(ri2)
StopIteration

Объект range идеально подходит для использования в цикле for. Работа цикла for организована следующим образом:

  • получаем итератор у объекта, который предоставляет данные;
  • используя функцию next(), извлекаем элементы на каждой итерации цикла;
  • если произошел выброс исключения StopIteration, то выходим из цикла.

Пример: выведем список целых чисел от 0 до 2 на экран.

>>> for i in range(3):
        print(i)


1
2

Список чисел от 1 до 10 с шагом 2.

>>> for i in range(1, 10, 2):
        print(i)

1
3
5
7
9

Range можно использовать в List Comprehensions.

>>> 

Функция range() – мощный инструмент, позволяющий получать последовательности целых чисел в заданном диапазоне с определенным шагом, с доступом через итератор.

Примеры решения задач

Возведение числа в степень с помощью цикла while

n = int(input()) # число

k = int(input()) # степень

i = 1 # текущая степень

result = 1
while i k:

    result *= n

    i += 1
print(result)

Сумма последовательности с помощью цикла while

n = int(input())

result =

i =
while i n:

    result += i

    i += 1
print(result)

Ввод последовательности чисел

i =
while True:

    n = input()

    if n == ‘end’:

        print(‘Ввод закончен’)

        print(‘Было введено’, i, ‘чисел’)

        break

    n = int(n)

    i += 1

Сумма введенных чисел

i =

summa =
while True:

    n = input()

    if n == ‘end’:

        print(‘Ввод закончен’)

        print(‘Было введено’, i, ‘чисел’)

        print(‘Их сумма равна’, summa)

        break

    n = int(n)

    summa += n

    i += 1

Best practice

Цикл по списку

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

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

Цикл по словарю

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

Цикл, в таком случае, будет выглядеть следующим образом:

Цикл по строке

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

Как сделать цикл for с шагом

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

Обратный цикл for

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

for в одну строку

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

В общем виде генератор выглядит так:

Приведем пример, в котором продублируем каждый символ строки

Другой пример, но теперь уже с условием:

Сложности итераций по спискам

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

colours = 
for i in colours:
    if i == "красный":
        colours += 
    if i == "черный":
        colours += 
print(colours)

Что получится при применении ?

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

colours = 
for i in colours:
    if i == "красный":
        colours += 
    if i == "черный":
        colours += 
print(colours)

Результат:

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

Цикл while

В этом блоке про while:

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

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

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

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

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

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

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

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

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

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

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

Вот еще один  цикл, включающий список, а не числовое сравнение:

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

2.2. Команда continue в цикле while на Python

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

>>> number = 0
>>> number < 20:
…     number += 1
…     number 2 == 1:
…             continue
…     print(number, )
…2 4 6 8 10 12 14 16 18 20 >>>

Сначала создадим переменную number и присвоим ей начальное значение. После идет проверка условий цикла что значение number  меньше 20. При входе в цикл значение number увеличивается на 1 и затем команда проверяет на 2. Если остаток равен одному, то число не четное, команда continue приказывает Python игнорировать остаток кода и цикл запускается заново. Если остаток от деления равен нулю, то число выводится на экран и так до того пока number будет равен 20, затем условия цикла while не будут выполнены и цикл прекратится.

Цикл for в Python.

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

>>> cars =
>>> for brend in cars
…     print(brend)  # отступ в 4 пробела
…ford
opel
audi
land rover
bmw

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

1.2. Аргумент end фунции print.  

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

>>> cars =
>>> for brend in cars
…     print(brend, end=’ ‘)  # отступ в 4 пробела
…ford opel audi land rover bmw

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

1.3. Действия во время выполнения цикла for. 

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

>>> cars =
>>> for brend in cars
…     print(f»Автомобили торговой марки {brend.title()} очень надежные»)
…Автомобили торговой марки Ford очень надежные
Автомобили торговой марки Opel очень надежные
Автомобили торговой марки Audi очень надежные
Автомобили торговой марки Land Rover очень надежные
Автомобили торговой марки Bmw очень надежные

Со строками цикл for работает также как и со списком.

>>> mesage = ‘Hello World!’
>>> for i in mesage
…     print(i * 5, end=’ ‘)
…HHHHH eeeee lllll lllll ooooo       WWWWW ooooo rrrrr lllll ddddd !!!!!

1.4. Основные ошибки с циклом for. 

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

Пропущенный отступ.

>>> mesage = ‘Hello World!’
>>> for i in mesage
… print(i * 5, end=’ ‘) # нет отступа в 4 пробела
  File «<stdin>», line 2
    print(i * 5, end=’ ‘)
    ^IndentationError: expected an indented block

Для устранения этой ошибки, достаточно поставить в следующей строке после команды for 4 пробела. В основном, если вы работаете в любом современном текстовом редакторе, то после двоеточия он сам поставит отступы на следующей строке.

  • Лишний отступ. 
  • Пропущенное двоеточие.

Цикл for в Python

Цикл «for» повторно выполняет код согласно счетчику или переменной цикла. Циклы «for» используются тогда, когда количество итераций известно заранее, до запуска цикла (в отличие от цикла «while», который выполняется согласно логическим условиям).. Общая схема кода для реализации цикла «for» выглядит следующим образом:

for  in :
    
  • итерационная переменная — создаётся переменная, с которой будут в дальнейшем производиться те или иные операции;
  • последовательность — это может быть любая последовательность: числовая или список и т.д.;
  • делаем что-то — совершаем действие с данными, например выводим их на экран или продолжаем совершать другие операции,

Непосредственно в коде цикл «for» может выглядеть таким образом:

for i in range(,20): # создаём переменную "i" и производим над ней функцию "range()", т.е. заводим диапазон чисел от 0 до 20
    print(i) # выводим результат

Цикл «for» также может использоваться в последовательных типах данных, это когда у нас есть определённый список и нам нужно вывести последовательно все его данные, более подробно это мы рассмотрим в статье про списки в Python.

Цикл For — синтаксис

Как уже пояснялось, цикл for в Python — итератор, основанный на цикличности. Он действует по элементам tuple и list, словарным ключам и иным итерируемым объектам.

Цикл в Python начинают с ключевого слова for, после которого идет произвольное имя переменной, хранящее значение последующего объекта задаваемой последовательности. Общий синтаксис for…in в python выглядит так:

for <переменная> in <последовательность>:
    <действие>
else:
    <действие>

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

Простой цикл for в Python на конкретном примере:

>>> languages = 
>>> for x in languages:
...     print(x)
...
C
C++
Perl
Python
>>>

Блок else особенный. Если программисты, работающий с Perl знакомы с ним, то для тех, кто взаимодействует с C и C++ — это новшество. Семантически он функционирует тождественно циклу while.

Выполняется лишь, когда цикл не “останавливается” оператором break. То есть, он выполняется исключительно после прохождения всеми элементами заданной последовательности.

Оператор прерывания в python — break

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

edibles = 
for food in edibles:
    if food == "пельмени":
        print("Я не ем пельмени!")
        break
    print("Отлично, вкусные " + food)
else:
    print("Хорошо, что не было пельменей!")
print("Ужин окончен.")

Если запустить данный код, получится нижеследующий итог:

Отлично, вкусные отбивные
Я не ем пельмени!
Ужин окончен.

Удаляем “пельмени” из имеющегося списка данных и получаем:

Отлично, вкусные отбивные
Отлично, вкусные яйца
Отлично, вкусные орехи
Хорошо, что не было пельменей!
Ужин окончен.

Оператор пропуска python — continue

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

edibles = 
for food in edibles:
    if food == "пельмени":
        print("Я не ем пельмени!")
        continue
    print("Отлично, вкусные " + food)
    # здесь может быть код для наслаждения едой:-)
else:
    print("Ненавижу пельмени!")
print("Ужин окончен.")

Итог:

Отлично, вкусные отбивные
Я не ем пельмени!
Отлично, вкусные яйца
Отлично, вкусные орехи
Ненавижу пельмени!
Ужин окончен.
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: