Урок 4 из 8 · 20 мин · обновлено
Циклы: for и while
Как заставить программу повторять действия: цикл for с range, накопление суммы, цикл while, а также break и continue.
Зачем нужны циклы
Допустим, нужно вывести числа от 1 до 5. Можно написать пять строк с print, но что, если чисел будет тысяча? Для повторяющихся действий есть циклы — конструкции, которые выполняют блок кода несколько раз.
Цикл for и range
for перебирает элементы по очереди. Чаще всего вместе с ним используют range() — функцию, которая создаёт последовательность чисел:
for i in range(1, 6):
print(i)
Результат — числа от 1 до 5, каждое на новой строке. Переменная i на каждом шаге принимает следующее значение.
У range() три варианта записи:
| Запись | Числа |
|---|---|
range(5) |
0, 1, 2, 3, 4 |
range(1, 6) |
1, 2, 3, 4, 5 |
range(0, 10, 2) |
0, 2, 4, 6, 8 — с шагом 2 |
Главное правило: правая граница не входит в последовательность. К этому быстро привыкаешь.
for умеет перебирать не только числа. Например, строку — по одному символу:
for letter in "кот":
print(letter)
В уроке 6 так же будем перебирать списки.
Накопление результата
Частая задача — посчитать сумму. Для этого заводят переменную до цикла и на каждом шаге что-то к ней прибавляют:
total = 0
for price in range(100, 401, 100): # 100, 200, 300, 400
total += price # то же, что total = total + price
print(total) # 1000
Запись total += price — сокращение для total = total + price. Так же работают -=, *= и другие.
Цикл while
while повторяет блок, пока условие верно. Он нужен, когда заранее неизвестно, сколько будет повторов:
balance = 1000
months = 0
while balance < 2000:
balance = balance * 1.1 # +10% каждый месяц
months += 1
print("Сумма удвоится через", months, "мес.")
Будьте внимательны: если условие никогда не станет ложным, цикл будет бесконечным. Остановить зависшую программу можно сочетанием Ctrl+C.
break и continue
break— сразу выйти из цикла;continue— пропустить остаток текущего шага и перейти к следующему.
for n in range(1, 10):
if n % 2 == 0:
continue # чётные пропускаем
if n > 7:
break # дальше 7 не идём
print(n) # 1, 3, 5, 7
Типичный пример break — проверка пароля с ограниченным числом попыток:
attempts = 0
while attempts < 3:
password = input("Пароль: ")
if password == "secret":
print("Добро пожаловать!")
break
attempts += 1
Попробуйте сами. Выведите таблицу умножения на 7 в виде 7 x 1 = 7 … 7 x 10 = 70, а затем посчитайте сумму всех чисел от 1 до 100.
Решение
for i in range(1, 11):
print("7 x", i, "=", 7 * i)
total = 0
for n in range(1, 101):
total += n
print(total) # 5050
Обратите внимание на range(1, 11) и range(1, 101): чтобы включить 10 и 100, правую границу берут на единицу больше.
Мини-тест: проверьте себя
Закрепите урок: несколько вопросов, разбор ответов — в конце.
-
Какие числа даст range(1, 5)?
Левая граница входит, правая — нет. Поэтому range(1, 5) даёт числа от 1 до 4.
-
Когда остановится цикл while?
while проверяет условие перед каждым повтором. Если условие никогда не станет ложным и нет break, цикл будет бесконечным.
-
Что делает break внутри цикла?
break сразу выходит из цикла, и программа продолжает работу со строки после него. Пропуск одного шага — это continue.
-
Чему будет равна переменная total после цикла: total = 0; for n in range(1, 4): total += n?
Цикл пройдёт по числам 1, 2 и 3 и прибавит каждое к total: 0 + 1 + 2 + 3 = 6.