Если число повторов известно заранее, его не копируют руками и не крутят while со счётчиком. Функция range строит ленту целых чисел, а for берёт их по одному и каждый раз выполняет тело. Ниже — три формы вызова, тренажёр границы и разбор, где одного аргумента уже мало.
Цикл while с прошлого занятия ждёт условие: пароль верный, пользователь написал «стоп», счётчик кто-то увеличил руками. Цикл for устроен иначе: лента чисел уже готова, и тело выполняется ровно по одному разу на каждое число.
Слова на этой странице
for i in range(...) имя i по очереди равно числам ленты.Руками тот же повтор выглядел бы так: напечатать 0, напечатать 1, напечатать 2, напечатать 3. Цикл оставляет действие в одном месте и подставляет очередное число.
range не печатает. Он только перечисляет целые. Дробных и строк в этой ленте нет.
Имя слева от in можно выбрать любое: i, n, day. Если число не нужно, пишут _.
Команды с отступом под for. Прибавлять счётчик руками, как в while, не надо: лента сама сдвигается.
for i in range(4):
print(i)
print("после цикла")
Четыре итерации печатают 0, 1, 2 и 3. Число 4 — граница, его нет. Строка «после цикла» выполняется один раз, уже без отступа.
| while | for и range | |
|---|---|---|
| Когда удобен | конец заранее неизвестен: слово «стоп», верный пароль | число шагов или последовательность известны до запуска |
| Кто двигает счётчик | вы, строкой в теле | сам range, на каждом шаге |
| Пустой проход | условие сразу ложно — тело ни разу | лента пустая — тело ни разу, это не ошибка |
range(0, 5, 0) падает с ошибкой, а не «печатает нули».Аргументов может быть один, два или три. Во всех формах последнее «останавливающее» число в ленту не входит. Переключайте схемы: это одна и та же функция, меняется только, откуда, докуда и каким прыжком идти.
range(4, 4) и range(0) не выполняют тело ни разу. Код после цикла всё равно выполняется.Нажмите плашку, затем колонку. Здесь ошибка видна сразу. В зачётном тесте ниже правильный ответ не показывается.
лента чисел известна, тело выполнится
конец зависит от условия, не от готовой ленты
тело не выполнится ни разу
Осталось разложить: 8
Подставьте три числа и посмотрите, какие клетки загораются. Серая пунктирная клетка — граница: цикл до неё доходит взглядом и не берёт. Если лента пустая или шаг нулевой, линейка объяснит почему, а не «напечатает что-нибудь».
for n in range(5):
Нажмите «Показать ленту». По умолчанию это range(5): 0, 1, 2, 3, 4.
Здесь шаг не 1, поэтому соседние числа лента перепрыгивает. Сумма копит только то, что реально взяли. Граница 6 в сумму не попадает.
s = 0
for i in range(1, 6, 2):
s = s + i
print(s)
Нажмите «Следующий шаг».
К каждой формулировке выберите верное продолжение.
Не запускайте фрагменты. Прогоните их на бумаге. Числа пишите подряд через пробел, без запятых. Слово оставляйте как есть.
for i in range(3):
print(i)
s = 0
for i in range(1, 5):
s = s + i
print(s)
for i in range(8, 3, -2):
print(i)
print("конец")
for i in range(1, 8, 3):
print(i)
for i in range(4, 4):
print(i)
print("пусто")
В ответ впишите вызов целиком, например range(1, 4). Не переписывайте print.
for n in ____:
print(n)
for _ in ____:
print("шаг")
for n in ____:
print(n)
Хотели напечатать 1 2 3 4 5, а написали range(1, 5). Что именно не вошло и какой вызов нужен вместо этого?
for, лента — range.Пользователь вводит целое N. Напечатайте квадраты чисел от 1 до N включительно, каждое с новой строки. N само должно войти: при N = 4 последняя строка — 16. Подсказка: range(1, n) квадрат n не напечатает.
Чётные от 2 до N включительно возьмите шагом, а не проверкой «если чётное». Напечатайте их сумму. Прогоны: N = 8 даёт 20. N = 1 даёт 0: лента пустая, сумма так и осталась нулём.
Пользователь вводит N. Цикл печатает N, N−1, …, 1. После цикла, уже без отступа, один раз печатается слово пуск. Прогон N = 4: строки 4, 3, 2, 1 и затем пуск. Граница должна быть 0, иначе единица не напечатается.
Один верный вариант. Правильные ответы на странице не показываются.
1. range(4) — это числа…
2. Какого числа нет в range(1, 4)?
3. range(10, 4, -2) даёт…
4. Когда число шагов известно до запуска…
5. Нужны числа от 1 до n включительно. range(1, n)…
6. range(0, 5, 0)…
7. После цикла for i in range(3) переменная i…
8. range(5, 1, -1) даёт…
9. Тело цикла for — это…
Нажмите «Собрать отчёт».