- Перебирать символы строки и последовательность чисел циклом
for - Применять начало, конец и шаг функции
range() - Писать цикл
while, который повторяется, пока условие истинно - Управлять циклом с помощью
breakиcontinue
Представь, что нужно вывести на экран числа от 1 до 100. Написать print 100 раз? Конечно нет! Главная сила компьютеров — повторять одну и ту же работу, не уставая. Для этого существуют циклы: несколько строк кода могут выполниться тысячи раз.
Цикл for
Цикл for по очереди берёт элементы последовательности и для каждого выполняет один и тот же блок. В коде ниже переменная letter по очереди принимает значения 'B', 'a', 'k' и 'u'. Каждое повторение цикла называется итерацией.
for letter in 'Baku':
print(letter)▸ Ожидаемый результат
B a k u
Для цикла по числам используется функция range(). Она создаёт последовательность чисел: range(1, 11) даёт числа от 1 до 10 — как и в срезах, конечное значение не включается. Выведем таблицу умножения на 7:
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:
total = 0
for n in range(1, 101):
total += n
print('Sum:', total)▸ Ожидаемый результат
Sum: 5050
for i in range(1, 5):
print('*' * i)▸ Ожидаемый результат
* ** *** ****
range(1, 5) на range(1, 8).Цикл while
for удобен, когда число повторений известно заранее. А если нет? Тогда поможет цикл while: он повторяет блок, пока условие истинно. Мурад откладывает по 15 манатов в неделю, чтобы купить наушники за 100 манатов. Сколько недель ему понадобится?
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:
for n in range(1, 100):
if n % 5 == 0 and n % 7 == 0:
print('Found:', n)
break▸ Ожидаемый результат
Found: 35
continue не останавливает цикл, а лишь пропускает остаток текущей итерации и переходит к следующей. Код ниже считает символы в тексте, не учитывая пробелы:
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.
# 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 не станет равным нулю.
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.
range(1, 5)?