Зацикливание кода с помощью for
Другой вид цикла, доступный в Python, основан на наблюдении, что иногда важнее подсчитать "обороты" цикла, чем проверять условия.
Представьте, что тело цикла нужно выполнить ровно сто раз. Если вы хотите использовать для этого цикл while
, он может выглядеть следующим образом:
i = 0
while i < 100:
# do_something()
i += 1
Было бы здорово, если бы кто-нибудь мог сделать за вас этот скучный подсчет. Это возможно?
Конечно, для такого рода задач существует специальный цикл, который называется for
.
На самом деле цикл for
предназначен для выполнения более сложных задач - он может "просматривать" большие коллекции данных, элемент за элементом. Мы скоро покажем вам, как это сделать, а сейчас представим более простой вариант его применения.
Взгляните на фрагмент:
for i in range(100):
# do_something()
pass
Есть несколько новых элементов. Расскажем о них:
- ключевое слово for открывает цикл
for
; примечание - после него нет условия; вам не нужно думать об условиях, поскольку они проверяются изнутри, без какого-либо вмешательства; - любая переменная после ключевого слова for является управляющей переменной цикла; он считает итерации цикла и делает это автоматически;
- ключевое слово in вводит элемент синтаксиса, описывающий диапазон возможных значений, присваиваемых управляющей переменной;
- функция
range()
(это особая функция) отвечает за генерацию всех желаемых значений управляющей переменной; в нашем примере функция будет создавать (мы даже можем сказать, что она будет кормить цикл) последующими значениями из следующего набора: 0, 1, 2 .. 97, 98, 99; примечание: в этом случае функцияrange()
начинает свою работу с 0 и заканчивает ее за один шаг (одно целое число) до значения своего аргумента; - обратите внимание на ключевое слово pass внутри тела цикла - оно вообще ничего не делает; это пустая инструкция - мы поместили ее сюда, потому что синтаксис цикла
for
требует как минимум одной инструкции внутри тела (кстати -if
,elif
,else
иwhile
выражают одно и то же)
Наши следующие примеры будут немного скромнее по количеству повторений цикла.
Взгляните на приведенный ниже фрагмент кода. Можете ли вы предсказать его вывод?
for i in range(10):
print("The value of i is currently", i)
Запустите код, чтобы проверить, были ли вы правы.
Примечание:
- цикл был выполнен десять раз (это аргумент функции
range()
) - значение последней управляющей переменной -
9
(не10
, так как оно начинается с0
, а не с1
)
Вызов функции range()
может иметь два аргумента, а не только один:
for i in range(2, 8):
print("The value of i is currently", i)
В этом случае первый аргумент определяет начальное (первое) значение управляющей переменной.
Последний аргумент показывает первое значение, которое не будет присвоено управляющей переменной.
Примечание: функция range()
принимает только целые числа в качестве аргументов и генерирует последовательности целых чисел.
Вы можете угадать результат работы программы? Запустите ее, чтобы проверить, были ли вы сейчас правы.
Первое показанное значение - 2
(взято из первого аргумента range()
).
Последний - 7
(хотя второй аргумент range()
- 8
).