Перейти к содержанию
Educora
Начальный16 мин5 / 42

Циклы: for и while

Научись повторять действия: for и range(), while, а также управление циклом с break и continue.

Проверь себя
В этом уроке ты узнаешь
  • Перебирать символы строки и последовательность чисел циклом for
  • Применять начало, конец и шаг функции range()
  • Писать цикл while, который повторяется, пока условие истинно
  • Управлять циклом с помощью break и continue

Представь, что нужно вывести на экран числа от 1 до 100. Написать print 100 раз? Конечно нет! Главная сила компьютеров — повторять одну и ту же работу, не уставая. Для этого существуют циклы: несколько строк кода могут выполниться тысячи раз.

Цикл for

Цикл for по очереди берёт элементы последовательности и для каждого выполняет один и тот же блок. В коде ниже переменная letter по очереди принимает значения 'B', 'a', 'k' и 'u'. Каждое повторение цикла называется итерацией.

Python
for letter in 'Baku':
    print(letter)
▸ Ожидаемый результат
B
a
k
u

Для цикла по числам используется функция range(). Она создаёт последовательность чисел: range(1, 11) даёт числа от 1 до 10 — как и в срезах, конечное значение не включается. Выведем таблицу умножения на 7:

Python
for i in range(1, 11):
    print(f'7 x {i} = {7 * i}')
▸ Ожидаемый результат
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
ВызовКакие числа даётПояснение
range(5)0, 1, 2, 3, 4начинается с 0, 5 не входит
range(2, 6)2, 3, 4, 5начало и конец
range(0, 10, 3)0, 3, 6, 9третье число — шаг
range(5, 0, -1)5, 4, 3, 2, 1отрицательный шаг считает назад

Накопление результата

Очень частый приём: перед циклом создаём переменную-«накопитель», а на каждой итерации что-то к ней прибавляем. Например, найдём сумму всех чисел от 1 до 100:

Python
total = 0
for n in range(1, 101):
    total += n
print('Sum:', total)
▸ Ожидаемый результат
Sum: 5050
Python
for i in range(1, 5):
    print('*' * i)
▸ Ожидаемый результат
*
**
***
****
Умножение строки на число внутри цикла рисует простой узор. Замени range(1, 5) на range(1, 8).

Цикл while

for удобен, когда число повторений известно заранее. А если нет? Тогда поможет цикл while: он повторяет блок, пока условие истинно. Мурад откладывает по 15 манатов в неделю, чтобы купить наушники за 100 манатов. Сколько недель ему понадобится?

Python
price = 100
saved = 0
weeks = 0
while saved < price:
    saved += 15
    weeks += 1
print(f'After {weeks} weeks Murad has {saved} AZN.')
▸ Ожидаемый результат
After 7 weeks Murad has 105 AZN.

break и continue

break сразу полностью останавливает цикл — это удобно, когда нужное уже найдено. Например, найдём первое число, которое делится и на 5, и на 7:

Python
for n in range(1, 100):
    if n % 5 == 0 and n % 7 == 0:
        print('Found:', n)
        break
▸ Ожидаемый результат
Found: 35

continue не останавливает цикл, а лишь пропускает остаток текущей итерации и переходит к следующей. Код ниже считает символы в тексте, не учитывая пробелы:

Python
text = 'Python is fun'
count = 0
for ch in text:
    if ch == ' ':
        continue
    count += 1
print('Letters:', count)
▸ Ожидаемый результат
Letters: 11
Задание

С помощью цикла for и range() выведи квадраты чисел от 1 до 5 — каждый на отдельной строке, в виде 3 x 3 = 9.

Задание · Python
# print the squares of 1..5 like: 3 x 3 = 9
▸ Ожидаемый результат
1 x 1 = 1
2 x 2 = 4
3 x 3 = 9
4 x 4 = 16
5 x 5 = 25
Задание

С помощью цикла while найди сумму цифр числа n = 4096 и выведи её после слов Digit sum:. Цикл должен работать, пока n не станет равным нулю.

Задание · Python
n = 4096
total = 0
# while n is greater than 0:
#     add the last digit of n to total
#     remove the last digit from n
# print Digit sum: and total
▸ Ожидаемый результат
Digit sum: 19

Главное

  • for выполняет блок один раз для каждого элемента последовательности.
  • range(start, stop, step) даёт числа; stop не включается.
  • while повторяет, пока условие истинно, — следи, чтобы оно когда-нибудь стало ложным.
  • break полностью завершает цикл, а continue переходит к следующей итерации.
  • Переменная-накопитель создаётся до цикла и обновляется на каждой итерации.

Проверь себя

Вопросов: 10. Каждый правильный ответ приносит XP.

1 / 10
Какие числа даёт range(1, 5)?