The Python Programming Guide

Циклы

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

Внутри циклов могут использованы следующие специальные команды:

Цикл while

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

Синтаксис для while:

while <условие>:
    <инструкция 1>
    ...
    <инструкция N>
<инструкция M>      # не входит в цикл, т.к. отступ вернулся на предыдущий уровень

Разберём следующий пример. Допустим, надо вывести числа от нуля до пяти в терминал:

n = 0
while n <= 5:
    print(n)
    n += 1

Вывод:

0
1
2
3
4
5

Цикл проверяет условие n <= 5, если оно выполняется - выводит в терминал текущее значение n, а потом увеличивает значение переменной n на единицу. В данном примере выполняется шесть итераций, после чего цикл заканчивается.

Использование break

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

n = 0
while n <= 5:
    print(n)
    if n == 3:
        break
    n += 1

Вывод:

0
1
2
3

Использование continue

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

n = 0
while n <= 5:
    if n == 3 or n == 4:
        n += 1
        continue
    else:
        print(n)
    n += 1

Вывод:

0
1
2
5

Использование else

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

Пример 1:

n = 0
while n <= 3:
    print(n)
    n += 1
else:
    print("Цикл успешно завершился!")
0
1
2
3
Цикл успешно завершился!

Пример 2:

n = 0
while n <= 3:
    print(n)
    if n == 2:
        break
    n += 1
else:
    print("Цикл успешно завершился!")
0
1
2

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

Цикл for

Цикл for используется для перебора значений в последовательности. В целом это может быть любой итерируемый объект - список, кортеж, словарь, множество, строка (т.к. является набором символов) и др. На каждой итерации исполняется набор инструкций единожды для каждого элемента итерируемого объекта.

Синтаксис для for:

for <переменная> in <итерируемый объект>:
    <инструкция 1>
    ...
    <инструкция N>
<инструкция M>      # не входит в цикл

Пример:

numbers = [5, 9, 22, 3]
for num in numbers:
    print(num)
5
9
22
3

На каждой итерации переменной num присваивается следующий элемент из списка numbers, значение которого потом выводится в терминал. Когда элементы в списке заканчиваются - происходит выход из цикла.

Пример 2:

for s in "cat":
    print(s)
c
a
t

Использование break

Использование команды break для цикла for ничем не отличается от while:

for animal in ["dog", "cat", "parrot"]:
    if animal == "cat":
        break
    print(animal)
dog

Использование continue

Аналогично циклу while, в цикле for можно прервать текущую итерацию и перейти к следующей с помощью continue:

for animal in ["dog", "cat", "parrot"]:
    if animal == "cat":
        continue
    print(animal)
dog
parrot

Использование else

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

Пример:

for n in range(3):
    print(n)
else:
    print("Цикл успешно завершился!")
0
1
2
Цикл успешно завершился!

Использование range()

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

for n in range(5):
    print(n)
0
1
2
3
4

Предупреждение

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

Пример 2:

for n in range(2, 10, 5):
    print(n)
2
7

В данном примере мы итерируем объект range от 2 до 10 с шагом 5.