Циклы

Циклы

Elena Gor

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

print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)
print(10)
print(11)
print(12)
print(13)

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


Цикл while

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

# создаем переменную, равную 1
var = 1
# прописываем цикл с условием - выполнять до тех пор, пока переменная
# меньше или равна 13
while var <= 13:
# выводим значение переменной
    print(var)
# увеличиваем переменную на 1
    var += 1

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

Памятка

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


Цикл for

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

for i in [1, 2, 3, 4, 5 ,6 ,7 ,8 ,9 , 10, 11, 12, 13]:
    print(i)

В примере выше написана программа с использованием цикла for. Мы указываем, что наша вложенная инструкция print(i) должна выполняться для каждого элемента из массива [1, 2, 3, 4, 5 ,6 ,7 ,8 ,9 , 10, 11, 12, 13]. То есть данный цикл описывает конструкцию:

i =1 
print(i)
i =2 
print(i)
i =3 
print(i)
...
i = 13
print(i)

В нашем примере все равно отсутствует элегантность, присущая языку Python. Давайте попробуем что-нибудь сделать с массивом из 13 чисел. Что если нам понадобится выводить 100 или 100000 чисел? Для этих целей применим функцию range(), которая поможет нам автоматически сгенерировать последовательность чисел.

>>> var = range(1, 14)
>>> print(var)
range(1, 14)
>>> print(var[0])
1
>>> print(var[1])
2
>>> print(var[12])
13
>>> print(var[14])
Traceback (most recent call last):
  File "<pyshell#77>", line 1, in <module>
    print(var[14])
IndexError: range object index out of range

Мы присвоили переменной значение выражения range(1,14), после того, как мы решили вывести содержимое переменной var, обнаружилось, что в ней заложено это выражение - range(1, 14). Как говорилось ранее, range это особый тип, который содержит в себе последовательность данных. Чтобы это показать, выполним команду print(var[0]), которая выводит содержимое переменной, стоящей в 0 ячейке памяти. Ячейки памяти берут отсчет с 0, поэтому на 12 позиции будет храниться число 13, как видно из примера. Тем самым мы видим, что переменная var содержит в себе последовательность чисел от 1 до 13. Но как быть с 14 позицией, ведь в команде range() второй параметр у нас равен 14? Особенность range() состоит в том, что последнее число последовательности не включается в нее, то есть мы говорим, что нам надо сформировать последовательность чисел от 1 до 14, не включая 14. Функция range() работает так, потому что чаще всего используется для работы с индексами, отсчет которых начинается с 0.

Вернемся к циклу for. Теперь мы можем написать нашу программу максимально компактно:

for i in range(1,14):
    print(i)

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


Оператор continue

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

for var in 'Python':
    if var == 'h':
        continue
    print(var)

На примере выше мы перебираем последовательность символов и когда наша переменная хранит в себе символ 'h', мы используем оператор continue, чтобы пропустить дальнейшую инструкцию print(var).


Оператор break

Оператор break досрочно прерывает цикл. Повторите пример ниже и посмотрите, что получится.

for var in 'Python':
    if var == 'h':
        break
    print(var)


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


Оператор else

Оператор else проверяет цикл на экстренный выход (break). Если экстренного выхода не было, т.е. оператор break не был выполнен, блок инструкций вложенный в оператор else - выполняется.

for var in 'Python':
    if var == 'a':
        break 
else:
    print('Символа a нет в слове Python')

Операторы continue, break и else работают с циклами for и while.


Report Page