Счёт с range()
Цикл for проходит по элементам списка. Но очень часто нужно просто считать: от 1 до 10 или «сделать это три раза». Для этого в Python есть range(). Он выдаёт циклу for целые числа одно за другим:
for i in range(5):
print(i)Вывод:
0
1
2
3
4range(5) даёт пять чисел, от 0 до 4. Как и индексы списка, он начинает с 0, а останавливается перед числом, которое вы ему передали: сама 5 не входит. Переменную цикла часто называют i (от index — «индекс»), но подойдёт любое имя.
Чтобы начать с другого числа, передайте range() два числа: начало и конец:
for number in range(1, 4):
print(number)1
2
3Начало входит в диапазон, конец — нет. Чтобы сосчитать от 1 до 10, нужно написать range(1, 11). Забыть об этом — самая частая ошибка с range(): range(1, 10) заканчивается на 9.
Третье число — это шаг: на сколько увеличивать число каждый раз. range(0, 21, 5) считает по пятёркам:
for number in range(0, 21, 5):
print(number)0
5
10
15
20Отрицательный шаг позволяет считать в обратную сторону: range(3, 0, -1) даёт 3, 2 и 1. Конец, 0, снова не входит.
С помощью range() легко повторить что-то заданное число раз. Этот цикл вообще не использует i; range(3) лишь заставляет его выполниться три раза:
for i in range(3):
print("Ура, ура, ура!")Ура, ура, ура!
Ура, ура, ура!
Ура, ура, ура!В первом упражнении этого урока вы считали с помощью while: переменная перед циклом, условие и number += 1 в конце блока. Строка for number in range(1, 6): делает то же самое. А поскольку range() сам переходит к следующему числу, вы не можете забыть увеличить счётчик и застрять в бесконечном цикле.
Так какой цикл выбрать? for — когда вы знаете, сколько раз он будет выполняться: по разу для каждого элемента списка или заданное число раз с помощью range(). while — когда заранее неизвестно, например, чтобы удваивать число, пока оно не станет больше 1000:
number = 1
doublings = 0
while number <= 1000:
number = number * 2
doublings += 1
print("Удвоений:", doublings)
print("Число:", number)Удвоений: 10
Число: 1024Задание
- 1
Перепишите цикл
whileиз редактора как циклforсrange()и удалите циклwhile. Программа по-прежнему выводит числа от 1 до 5. - 2
Измените свой цикл так, чтобы он выводил числа от 1 до 10 включительно.
- 3
Ниже напишите второй цикл, который выводит каждое пятое число от 0 до 50:
0,5,10и так далее до50, каждое на отдельной строке. Используйте третье числоrange()— шаг.