Если число повторов известно заранее, его не копируют руками и не крутят 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):
Нажмите «Показать ленту». По умолчанию в полях стоят старт 0, граница 5, шаг 1 — проверьте ленту сами.
Для каждого набора параметров нажмите «Показать ленту» и опишите результат своими словами: какие числа взялись, что с серой клеткой, пустая ли лента.
Прогоните фрагмент кнопками. Смотрите, какие клетки активны и как меняется сумма. Ответы пишите своими словами — текст с экрана не копируйте.
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("пусто")
for i in range(0, 10, 4):
print(i)
print(i)
total = 0
for n in range(3, 12, 3):
total = total + n
print(n)
print(total)
for k in range(2, -1, -1):
print(k)
print("стоп")
В ответ впишите вызов целиком (range(...)). Не переписывайте print и остальной код.
for n in ____:
print(n)
for _ in ____:
print("шаг")
for n in ____:
print(n)
Хотели напечатать 1 2 3 4 5 6 7, а написали range(1, 7). Что именно не вошло и какой вызов нужен вместо этого? Ответ — двумя-тремя предложениями плюс верный вызов.
for n in ____:
print(n)
Лента должна содержать ровно одно число: 0. Подберите вызов.
for n in ____:
print("не должно появиться")
print("после")
Подберите вызов с двумя аргументами и шагом по умолчанию (+1), при котором тело не выполнится ни разу, а строка «после» напечатается. Кратко поясните, почему лента пустая.
for, лента — range. Проверку «если чётное» / «если нечётное» в теле не используйте: нужный набор чисел задайте шагом.Лифт объявляет этажи от 1 до N включительно: на каждой итерации печатается строка вида этаж X, где X — номер этажа. После цикла, уже без отступа, один раз печатается готово. Пользователь вводит N. Сделайте два прогона и вставьте оба вывода: N = 3 и N = 1. В пояснении напишите, почему граница в range не равна N.
Пользователь вводит целое N. Нужны нечётные числа от 1 до N включительно — через шаг, без проверки «если нечётное». Напечатайте две строки: сначала сумму этих чисел, затем сколько чисел вошло в сумму. Два прогона: N = 9 и N = 2. В пояснении сравните, что происходит, когда N чётное и когда нечётное.
Пользователь вводит N. Цикл печатает N, N−1, …, 1 — каждое число с новой строки. После цикла один раз печатается слово пуск. Сделайте прогоны для N = 5 и N = 1. В пояснении укажите, какую границу и какой шаг вы выбрали и почему единица всё же печатается.
Пользователь вводит целое M. Программа печатает десять строк вида M x k = результат для k от 1 до 10 включительно. Число k должно идти из range. Прогон: M = 7. В пояснении укажите выбранный вызов range и почему последняя строка всё же содержит k = 10.
Один верный вариант. Правильные ответы на странице не показываются.
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 — это…
10. range(7, 0, -2) даёт…
11. Нужны квадраты чисел 1…n. Цикл for i in range(1, n): print(i * i)…
12. print после цикла for выполняется…
Нажмите «Собрать отчёт».